Salome HOME
bf3191b3eb4961969fce8c935a8e50e73c0153a7
[modules/gui.git] / src / SUIT / SUIT_DataOwner.cxx
1 #include "SUIT_DataOwner.h"
2
3 #ifndef WNT
4 #include <typeinfo>
5 #define _typeinfo std::type_info
6 #else
7 #include <typeinfo.h>
8 #define _typeinfo type_info
9 #endif
10
11 //********************************************************************
12 // SUIT_DataOwner class
13 //********************************************************************
14
15
16 /*! Constructor*/
17 SUIT_DataOwner::SUIT_DataOwner()
18 {
19 }
20
21 /*! Destructor*/
22 SUIT_DataOwner::~SUIT_DataOwner()
23 {
24 }
25
26 /*! operator== : compares two owners*/
27 bool operator==( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 )
28 {
29   if ( !p1.isNull() && !p2.isNull() )
30     return (p1->isEqual( *p2 ) && p2->isEqual( *p1 ));
31   return p1.isNull() && p2.isNull();
32 }
33
34 //********************************************************************
35 /*! \class SUIT_DataOwnerPtrList 
36  * implements value list with unique items (uniqueness is 
37  * provided by operator==())
38  */
39 //********************************************************************
40
41 //====================================================================
42 //! Constructor (default)
43 //====================================================================
44 SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList()
45   : QValueList<SUIT_DataOwnerPtr>(),
46     mySkipEqual( true )
47 {
48 }
49
50 //====================================================================
51 //! Constructor (default)
52 //====================================================================
53 SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const bool skipAllEqual )
54   : QValueList<SUIT_DataOwnerPtr>(),
55     mySkipEqual( skipAllEqual )
56 {
57 }
58
59 //====================================================================
60 //! Constructor (copy)
61 //====================================================================
62 SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const SUIT_DataOwnerPtrList& l )
63   : QValueList<SUIT_DataOwnerPtr>( l ),
64     mySkipEqual( true )
65 {
66 }
67
68 //====================================================================
69 //! Constructor (copy)
70 //====================================================================
71 SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const SUIT_DataOwnerPtrList& l, const bool skipAllEqual )
72   : QValueList<SUIT_DataOwnerPtr>(),
73     mySkipEqual( skipAllEqual )
74 {
75   if ( skipAllEqual == l.mySkipEqual )
76     operator =( l );
77   else
78   {
79     SUIT_DataOwnerPtrList::const_iterator beginIt = l.begin();
80     SUIT_DataOwnerPtrList::const_iterator endIt = l.end();
81     for( ; beginIt != endIt; ++beginIt )
82       append( *beginIt );
83   }
84 }
85
86 #ifndef QT_NO_STL
87 //====================================================================
88 //! Constructor (from stl)
89 //====================================================================
90 SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const std::list<SUIT_DataOwnerPtr>& l )
91   : QValueList<SUIT_DataOwnerPtr>( l ),
92     mySkipEqual( true )
93 {
94 }
95 #endif
96
97 #ifndef QT_NO_STL
98 //====================================================================
99 //! Constructor (from stl)
100 //====================================================================
101 SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const std::list<SUIT_DataOwnerPtr>& l, const bool skipAllEqual )
102   : QValueList<SUIT_DataOwnerPtr>(),
103     mySkipEqual( skipAllEqual )
104 {
105   std::list<SUIT_DataOwnerPtr>::const_iterator beginIt = l.begin();
106   std::list<SUIT_DataOwnerPtr>::const_iterator endIt = l.begin();
107   for( ; beginIt != endIt; ++beginIt )
108     append( *beginIt );
109 }
110 #endif
111
112 //====================================================================
113 //! Appends an item to the list
114 //====================================================================
115 SUIT_DataOwnerPtrList::iterator SUIT_DataOwnerPtrList::append( const SUIT_DataOwnerPtr& x )
116 {
117   SUIT_DataOwnerPtrList::iterator it = find( x );
118   if ( it != end() )
119   {
120     if ( mySkipEqual )
121       return it;
122
123     const _typeinfo& ti1 = typeid( *((*it).operator->()) );
124     const _typeinfo& ti2 = typeid( *(x.operator->()) );
125
126     if (ti1 == ti2)
127       return it;
128   }
129   return QValueList<SUIT_DataOwnerPtr>::append( x );
130 }