00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _ASN1CSEQOFLIST_H_
00025 #define _ASN1CSEQOFLIST_H_
00026
00027 #ifndef __SYMBIAN32__
00028 #include <new>
00029 #endif
00030
00031 #include <stdlib.h>
00032 #include "rtsrc/asn1CppTypes.h"
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #ifndef _NO_UTILS_CLASSES
00062
00063 class EXTRTCLASS ASN1CSeqOfList;
00064
00066
00067
00068
00079 class EXTRTCLASS ASN1CSeqOfListIterator {
00080 friend class ASN1CSeqOfList;
00081 protected:
00082 ASN1CSeqOfList* pSeqList;
00083 OSRTDListNode* nextNode;
00084 OSRTDListNode* lastNode;
00085 volatile int expectedModCount;
00086 int stat;
00087
00088 EXTRTMETHOD ASN1CSeqOfListIterator(ASN1CSeqOfList* list);
00089 EXTRTMETHOD ASN1CSeqOfListIterator(ASN1CSeqOfList* list, OSRTDListNode* startNode);
00090
00091 public:
00102 inline OSBOOL hasNext() { return OSBOOL(nextNode != 0); }
00103
00114 inline OSBOOL hasPrev() { return OSBOOL(nextNode != 0); }
00115
00125 EXTRTMETHOD void* next();
00126
00137 EXTRTMETHOD void* prev();
00138
00150 EXTRTMETHOD int remove();
00151
00165 EXTRTMETHOD int set(void* data);
00166
00182 EXTRTMETHOD int insert(void* data);
00183
00184
00185 inline int getState () { return stat; }
00186
00187 protected:
00188 inline void* operator new(size_t, void* data) { return data; }
00189 #if !defined(__xlC__)
00190 inline void operator delete(void*, void*) {}
00191 #endif
00192 #ifndef __BORLANDC__
00193 inline void operator delete(void*, size_t) {}
00194 #endif
00195 } ;
00196
00197
00199
00200
00201
00208 class EXTRTCLASS ASN1CSeqOfList : public ASN1CType {
00209 friend class ASN1CSeqOfListIterator;
00210 protected:
00211 OSRTDList* pList;
00212 volatile int modCount;
00213 OSBOOL wasAssigned;
00214
00215
00216
00217 EXTRTMETHOD ASN1CSeqOfList (OSRTDList& lst);
00218 EXTRTMETHOD ASN1CSeqOfList (ASN1TSeqOfList& lst);
00219 EXTRTMETHOD ASN1CSeqOfList (ASN1TPDUSeqOfList& lst);
00220
00221 public:
00222
00236 EXTRTMETHOD ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf, OSRTDList& lst,
00237 OSBOOL initBeforeUse = TRUE);
00238
00245 EXTRTMETHOD ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf);
00246
00253 EXTRTMETHOD ASN1CSeqOfList (ASN1CType& ccobj);
00254
00268 EXTRTMETHOD ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf, ASN1TSeqOfList& lst);
00269
00283 EXTRTMETHOD ASN1CSeqOfList (ASN1CType& ccobj, ASN1TSeqOfList& lst);
00284
00298 EXTRTMETHOD ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf, ASN1TPDUSeqOfList& lst);
00299
00300 EXTRTMETHOD ASN1CSeqOfList (OSRTContext& ctxt, OSRTDList& lst,
00301 OSBOOL initBeforeUse = TRUE);
00302 EXTRTMETHOD ASN1CSeqOfList (OSRTContext& ctxt);
00303 EXTRTMETHOD ASN1CSeqOfList (OSRTContext& ctxt, ASN1TSeqOfList& lst);
00304 EXTRTMETHOD ASN1CSeqOfList (OSRTContext& ctxt, ASN1TPDUSeqOfList& lst);
00305
00306 EXTRTMETHOD ~ASN1CSeqOfList();
00307
00308
00320 EXTRTMETHOD void append(void* data);
00321
00322
00337 EXTRTMETHOD void appendArray(const void* data, int numElems, int elemSize);
00338
00339
00354 EXTRTMETHOD void appendArrayCopy(const void* data, int numElems, int elemSize);
00355
00359 inline void init () {
00360 rtxDListInit (pList);
00361 }
00362
00363
00376 EXTRTMETHOD void insert(int index, void* data);
00377
00378
00390 EXTRTMETHOD void remove(int index);
00391
00392
00403 EXTRTMETHOD void remove(void* data);
00404
00405
00412 inline void removeFirst() {
00413 remove(pList->head);
00414 }
00415
00416
00423 inline void removeLast() {
00424 remove(pList->tail);
00425 }
00426
00427
00437 EXTRTMETHOD int indexOf(void* data) const;
00438
00439
00448 inline OSBOOL contains (void* data) const {
00449 return indexOf(data) != -1;
00450 }
00451
00458 EXTRTMETHOD void* getFirst();
00459
00466 EXTRTMETHOD void* getLast();
00467
00474 EXTRTMETHOD void* get (int index) const;
00475
00484 EXTRTMETHOD void* set (int index, void* data);
00485
00489 EXTRTMETHOD void clear();
00490
00495 EXTRTMETHOD void free();
00496
00502 EXTRTMETHOD OSBOOL isEmpty() const;
00503
00509 EXTRTMETHOD int size() const;
00510
00518 EXTRTMETHOD ASN1CSeqOfListIterator* iterator();
00519
00520
00529 EXTRTMETHOD ASN1CSeqOfListIterator* iteratorFromLast();
00530
00531
00540 EXTRTMETHOD ASN1CSeqOfListIterator* iteratorFrom(void* data);
00541
00551 EXTRTMETHOD void* toArray (int elemSize);
00552
00553
00570 EXTRTMETHOD void* toArray (void* pArray, int elemSize, int allocatedElems);
00571
00572
00580 inline void* operator[](int index) const {
00581 return get(index);
00582 }
00583
00584 inline operator OSRTDList* () {
00585 return pList;
00586 }
00587 protected:
00588
00589 EXTRTMETHOD void remove(OSRTDListNode* node);
00590
00591
00592 EXTRTMETHOD void insertBefore(void* data, OSRTDListNode* node);
00593
00594
00595 EXTRTMETHOD void insertAfter(void* data, OSRTDListNode* node);
00596
00597
00598 } ;
00599 #else
00600 typedef class _ASN1CSeqOfList : public ASN1CType {
00601 public:
00602 _ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf, OSRTDList& lst,
00603 OSBOOL initBeforeUse = TRUE) : ASN1CType (msgBuf) {}
00604 _ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf, ASN1TSeqOfList& lst) :
00605 ASN1CType (msgBuf) {}
00606 _ASN1CSeqOfList (OSRTMessageBufferIF& msgBuf) : ASN1CType (msgBuf) {}
00607 } ASN1CSeqOfList;
00608
00609 #endif // _NO_UTILS_CLASSES
00610
00615 #endif // _ASN1CSEQOFLIST_H_