Author: lgiessmann
Date: Thu Aug 18 10:19:50 2011
New Revision: 754
Log:
trunk: src: datamodel: fixed a bug in the function list-instanceOf => currently duplicates are remove from the result
Modified:
trunk/src/model/datamodel.lisp
Modified: trunk/src/model/datamodel.lisp
==============================================================================
--- trunk/src/model/datamodel.lisp Thu Aug 18 01:40:40 2011 (r753)
+++ trunk/src/model/datamodel.lisp Thu Aug 18 10:19:50 2011 (r754)
@@ -2343,27 +2343,28 @@
(:method ((topic TopicC) &key (tm nil) (revision *TM-REVISION*))
(declare (type (or null TopicMapC) tm)
(integer revision))
- (delete-if
- #'null
- (map 'list
- #'(lambda(x)
- (when (and (parent x :revision revision)
- (instance-of x :revision revision)
- (loop for psi in (psis (instance-of x :revision revision)
- :revision revision)
- when (string= (uri psi) constants:*instance-psi*)
- return t))
- (loop for role in (roles (parent x :revision revision)
- :revision revision)
- when (not (eq role x))
- return (player role :revision revision))))
- (if tm
- (delete-if-not
- (lambda (role)
- (in-topicmap tm (parent role :revision revision)
- :revision revision))
- (player-in-roles topic :revision revision))
- (player-in-roles topic :revision revision))))))
+ (delete-duplicates
+ (delete-if
+ #'null
+ (map 'list
+ #'(lambda(x)
+ (when (and (parent x :revision revision)
+ (instance-of x :revision revision)
+ (loop for psi in (psis (instance-of x :revision revision)
+ :revision revision)
+ when (string= (uri psi) constants:*instance-psi*)
+ return t))
+ (loop for role in (roles (parent x :revision revision)
+ :revision revision)
+ when (not (eq role x))
+ return (player role :revision revision))))
+ (if tm
+ (delete-if-not
+ (lambda (role)
+ (in-topicmap tm (parent role :revision revision)
+ :revision revision))
+ (player-in-roles topic :revision revision))
+ (player-in-roles topic :revision revision)))))))
(defgeneric list-super-types (topic &key tm revision)
@@ -2372,26 +2373,27 @@
(:method ((topic TopicC) &key (tm nil) (revision *TM-REVISION*))
(declare (type (or null TopicMapC) tm)
(integer revision))
- (delete-if
- #'null
- (map 'list
- #'(lambda(x)
- (when (loop for psi in (psis (instance-of x :revision revision)
- :revision revision)
- when (string= (uri psi) *subtype-psi*)
- return t)
- (loop for role in (roles (parent x :revision revision)
- :revision revision)
- when (not (eq role x))
- return (player role :revision revision))))
- (if tm
- (delete-if-not
- (lambda (role)
- (in-topicmap tm (parent role :revision revision)
- :revision revision))
- (player-in-roles topic :revision revision))
- (player-in-roles topic :revision revision))))))
-
+ (delete-duplicates
+ (delete-if
+ #'null
+ (map 'list
+ #'(lambda(x)
+ (when (loop for psi in (psis (instance-of x :revision revision)
+ :revision revision)
+ when (string= (uri psi) *subtype-psi*)
+ return t)
+ (loop for role in (roles (parent x :revision revision)
+ :revision revision)
+ when (not (eq role x))
+ return (player role :revision revision))))
+ (if tm
+ (delete-if-not
+ (lambda (role)
+ (in-topicmap tm (parent role :revision revision)
+ :revision revision))
+ (player-in-roles topic :revision revision))
+ (player-in-roles topic :revision revision)))))))
+
;;; CharacteristicC
(defmethod versions ((construct CharacteristicC))