00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _TYPECODELIST_H
00026 #define _TYPECODELIST_H
00027
00028
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 class TypeCodeList
00055 {
00056
00057 public:
00058 TypeCodeElm * _firstTypeCodeElm;
00059 TypeCodeElm * _lastTypeCodeElm;
00060 int _countTypeCodeElm;
00061
00062 protected:
00063 void AddTypeCodeElmFirst(TypeCodeElm* item);
00064 void AddTypeCodeElmLast(TypeCodeElm* item);
00065 void AddTypeCodeElmAfter(TypeCodeElm* item, TypeCodeElm* pos);
00066 void AddTypeCodeElmBefore(TypeCodeElm* item, TypeCodeElm* pos);
00067 void RemoveTypeCodeElm(TypeCodeElm* item);
00068 void ReplaceTypeCodeElm(TypeCodeElm* item, TypeCodeElm* newItem);
00069
00070 public:
00071 void DeleteAllTypeCodeElm();
00072 TypeCodeElm* GetFirstTypeCodeElm() const;
00073 TypeCodeElm* GetLastTypeCodeElm() const;
00074 TypeCodeElm* GetNextTypeCodeElm(TypeCodeElm* pos) const;
00075 TypeCodeElm* GetPrevTypeCodeElm(TypeCodeElm* pos) const;
00076 int GetTypeCodeElmCount() const;
00077 void MoveTypeCodeElmFirst(TypeCodeElm* item);
00078 void MoveTypeCodeElmLast(TypeCodeElm* item);
00079 void MoveTypeCodeElmAfter(TypeCodeElm* item, TypeCodeElm* pos);
00080 void MoveTypeCodeElmBefore(TypeCodeElm* item, TypeCodeElm* pos);
00081 void SortTypeCodeElm(int (*comp)(TypeCodeElm*, TypeCodeElm*));
00082
00083 class TypeCodeElmIterator
00084 {
00085 private:
00086 TypeCodeElm* _refTypeCodeElm;
00087 TypeCodeElm* _prevTypeCodeElm;
00088 TypeCodeElm* _nextTypeCodeElm;
00089 const TypeCodeList* _iterTypeCodeList;
00090
00091 TypeCodeElmIterator* _prev;
00092 TypeCodeElmIterator* _next;
00093
00094 int (TypeCodeElm::*_method)() const;
00095
00096 static TypeCodeElmIterator* _first;
00097 static TypeCodeElmIterator* _last;
00098
00099 public:
00100 TypeCodeElmIterator(const TypeCodeList* iterTypeCodeList,
00101 int (TypeCodeElm::*method)() const = 0,
00102 TypeCodeElm* refTypeCodeElm = 0);
00103 TypeCodeElmIterator(const TypeCodeList& iterTypeCodeList,
00104 int (TypeCodeElm::*method)() const = 0,
00105 TypeCodeElm* refTypeCodeElm = 0);
00106 TypeCodeElmIterator(const TypeCodeElmIterator& iterator,
00107 int (TypeCodeElm::*method)() const = 0);
00108 ~TypeCodeElmIterator();
00109
00110 TypeCodeElmIterator& operator= (const TypeCodeElmIterator& iterator)
00111 {
00112 _iterTypeCodeList = iterator._iterTypeCodeList;
00113 _refTypeCodeElm = iterator._refTypeCodeElm;
00114 _prevTypeCodeElm = iterator._prevTypeCodeElm;
00115 _nextTypeCodeElm = iterator._nextTypeCodeElm;
00116 _method = iterator._method;
00117 return *this;
00118 }
00119 TypeCodeElm* operator++ ()
00120 {
00121 _nextTypeCodeElm = _iterTypeCodeList->GetNextTypeCodeElm(_nextTypeCodeElm);
00122 if (_method != 0)
00123 {
00124 while (_nextTypeCodeElm && !(_nextTypeCodeElm->*_method)())
00125 _nextTypeCodeElm = _iterTypeCodeList->GetNextTypeCodeElm(_nextTypeCodeElm);
00126 }
00127 _refTypeCodeElm = _prevTypeCodeElm = _nextTypeCodeElm;
00128 return _refTypeCodeElm;
00129 }
00130 TypeCodeElm* operator-- ()
00131 {
00132 _prevTypeCodeElm = _iterTypeCodeList->GetPrevTypeCodeElm(_prevTypeCodeElm);
00133 if (_method != 0)
00134 {
00135 while (_prevTypeCodeElm && !(_prevTypeCodeElm->*_method)())
00136 _prevTypeCodeElm = _iterTypeCodeList->GetPrevTypeCodeElm(_prevTypeCodeElm);
00137 }
00138 _refTypeCodeElm = _nextTypeCodeElm = _prevTypeCodeElm;
00139 return _refTypeCodeElm;
00140 }
00141 operator TypeCodeElm*() { return _refTypeCodeElm; }
00142 TypeCodeElm* operator-> () { return _refTypeCodeElm; }
00143 TypeCodeElm* Get() { return _refTypeCodeElm; }
00144 void Reset() { _refTypeCodeElm = _prevTypeCodeElm = _nextTypeCodeElm = (TypeCodeElm*)0; }
00145
00146 int IsLast() { return (_iterTypeCodeList->GetLastTypeCodeElm() == _refTypeCodeElm); }
00147 int IsFirst() { return (_iterTypeCodeList->GetFirstTypeCodeElm() == _refTypeCodeElm); }
00148
00149 static void Check(TypeCodeElm* itemTypeCodeElm);
00150 static void Check(TypeCodeElm* itemTypeCodeElm, TypeCodeElm* newItemTypeCodeElm);
00151 };
00152
00153
00154
00155
00156
00157 private:
00158
00159 protected:
00160
00161 public:
00162
00163
00164 private:
00165 void ConstructorInclude();
00166 void DestructorInclude();
00167
00168 protected:
00169
00170 public:
00171 TypeCodeList();
00172 virtual ~TypeCodeList();
00173 bool Exists(CORBA::TypeCode_ptr tc);
00174 };
00175
00176 #endif
00177
00178
00179 #ifdef CB_INLINES
00180 #ifndef _TYPECODELIST_H_INLINES
00181 #define _TYPECODELIST_H_INLINES
00182
00183
00184
00185
00186 #endif
00187 #endif
00188