From 13aba586caafb8bf53f0811b66a02bb4fb8520e2 Mon Sep 17 00:00:00 2001 From: "Janet B. Anderson" Date: Tue, 6 Mar 2001 20:19:07 +0000 Subject: [PATCH] Changes because MSVC doesn't support anywhere near standard C++. Yuck. - ANJ --- src/libCom/cppStd/epicsList.h | 147 ++++++++++++++-------------- src/libCom/cppStd/epicsListBase.cpp | 4 +- src/libCom/cppStd/epicsListBase.h | 4 +- 3 files changed, 79 insertions(+), 76 deletions(-) diff --git a/src/libCom/cppStd/epicsList.h b/src/libCom/cppStd/epicsList.h index 867eec2b1..04913252e 100644 --- a/src/libCom/cppStd/epicsList.h +++ b/src/libCom/cppStd/epicsList.h @@ -21,13 +21,16 @@ // Reference numbers in comments are to sections in ISO/IEC 14882:1998(E) +template class epicsListIterator; +template class epicsListConstIterator; + template class epicsList { public: // Types typedef size_t size_type; - class iterator; - class const_iterator; + typedef epicsListIterator iterator; + typedef epicsListConstIterator const_iterator; // Construct/copy/destroy (23.2.2.1) epicsList(); @@ -75,8 +78,8 @@ private: // Data epicsListNode _head; epicsListNodePool _pool; -friend class iterator; -friend class const_iterator; +friend class epicsListIterator; +friend class epicsListConstIterator; }; // Specialized algorithms: @@ -87,64 +90,64 @@ template // Mutable iterator template -class epicsList::iterator { +class epicsListIterator { public: - iterator(); + epicsListIterator(); // The following are created automatically by C++: - // iterator(const iterator& rhs); - // iterator& operator=(const iterator& rhs); + // epicsListIterator(const epicsListIterator& rhs); + // epicsListIterator& operator=(const epicsListIterator& rhs); T operator*() const; T operator->() const; - iterator& operator++(); - const iterator operator++(int); - iterator& operator--(); - const iterator operator--(int); + epicsListIterator& operator++(); + const epicsListIterator operator++(int); + epicsListIterator& operator--(); + const epicsListIterator operator--(int); - bool operator==(const iterator& rhs) const; - bool operator==(const const_iterator& rhs) const; - bool operator!=(const iterator& rhs) const; - bool operator!=(const const_iterator& rhs) const; + bool operator==(const epicsListIterator& rhs) const; + bool operator==(const epicsListConstIterator& rhs) const; + bool operator!=(const epicsListIterator& rhs) const; + bool operator!=(const epicsListConstIterator& rhs) const; private: // Constructor for List use - iterator(epicsListNode* node); + epicsListIterator(epicsListNode* node); private: epicsListNode* _node; friend class epicsList; -friend class const_iterator; +friend class epicsListConstIterator; }; // Constant iterator template -class epicsList::const_iterator { +class epicsListConstIterator { public: - const_iterator(); - const_iterator(const iterator& rhs); - const_iterator& operator=(const iterator& rhs); + epicsListConstIterator(); + epicsListConstIterator(const epicsListIterator& rhs); + epicsListConstIterator& operator=(const epicsListIterator& rhs); // The following are created automatically by C++: - // const_iterator(const const_iterator& rhs); - // const_iterator& operator=(const const_iterator& rhs); + // epicsListConstIterator(const epicsListConstIterator& rhs); + // epicsListConstIterator& operator=(const epicsListConstIterator& rhs); const T operator*() const; const T operator->() const; - const_iterator& operator++(); - const const_iterator operator++(int); - const_iterator& operator--(); - const const_iterator operator--(int); + epicsListConstIterator& operator++(); + const epicsListConstIterator operator++(int); + epicsListConstIterator& operator--(); + const epicsListConstIterator operator--(int); - bool operator==(const const_iterator& rhs) const; - bool operator==(const iterator& rhs) const; - bool operator!=(const const_iterator& rhs) const; - bool operator!=(const iterator& rhs) const; + bool operator==(const epicsListConstIterator& rhs) const; + bool operator==(const epicsListIterator& rhs) const; + bool operator!=(const epicsListConstIterator& rhs) const; + bool operator!=(const epicsListIterator& rhs) const; private: // Constructor for List use - const_iterator(const epicsListNode* node); + epicsListConstIterator(const epicsListNode* node); private: const epicsListNode* _node; @@ -197,28 +200,28 @@ inline epicsList::size_type epicsList::size() const { template inline T epicsList::front() { if (empty()) - throw STD_ logic_error("list::front: list empty"); + throw STD_ logic_error("epicsList::front: list empty"); return static_cast(_head.next()->payload); } template inline const T epicsList::front() const { if (empty()) - throw STD_ logic_error("list::front: list empty"); + throw STD_ logic_error("epicsList::front: list empty"); return static_cast(_head.next()->payload); } template inline T epicsList::back() { if (empty()) - throw STD_ logic_error("list::back: list empty"); + throw STD_ logic_error("epicsList::back: list empty"); return static_cast(_head.prev()->payload); } template inline const T epicsList::back() const { if (empty()) - throw STD_ logic_error("list::back: list empty"); + throw STD_ logic_error("epicsList::back: list empty"); return static_cast(_head.prev()->payload); } @@ -233,7 +236,7 @@ inline void epicsList::push_front(const T x) { template inline void epicsList::pop_front() { if (empty()) - throw STD_ logic_error("list::pop_front: list empty"); + throw STD_ logic_error("epicsList::pop_front: list empty"); epicsListNode* node = _head.next(); node->unlink(); _count--; @@ -251,7 +254,7 @@ inline void epicsList::push_back(const T x) { template inline void epicsList::pop_back() { if (empty()) - throw STD_ logic_error("list::pop_back: list empty"); + throw STD_ logic_error("epicsList::pop_back: list empty"); epicsListNode* node = _head.prev(); node->unlink(); _count--; @@ -302,146 +305,146 @@ inline void epicsList::clear() { } -// epicsList::iterator +// epicsListIterator template -inline epicsList::iterator::iterator() : +inline epicsListIterator::epicsListIterator() : _node(0) {} template -inline epicsList::iterator::iterator(epicsListNode* node) : +inline epicsListIterator::epicsListIterator(epicsListNode* node) : _node(node) {} template -inline T epicsList::iterator::operator*() const { +inline T epicsListIterator::operator*() const { return static_cast(_node->payload); } template -inline T epicsList::iterator::operator->() const { +inline T epicsListIterator::operator->() const { return static_cast(_node->payload); } template -inline epicsList::iterator& epicsList::iterator::operator++() { +inline epicsListIterator& epicsListIterator::operator++() { _node = _node->next(); return *this; } template -inline const epicsList::iterator epicsList::iterator::operator++(int) { - iterator temp = *this; +inline const epicsListIterator epicsListIterator::operator++(int) { + epicsListIterator temp = *this; ++(*this); return temp; } template -inline epicsList::iterator& epicsList::iterator::operator--() { +inline epicsListIterator& epicsListIterator::operator--() { _node = _node->prev(); return *this; } template -inline const epicsList::iterator epicsList::iterator::operator--(int) { - iterator temp = *this; +inline const epicsListIterator epicsListIterator::operator--(int) { + epicsListIterator temp = *this; --(*this); return temp; } template -inline bool epicsList::iterator::operator==(const iterator& rhs) const { +inline bool epicsListIterator::operator==(const epicsListIterator& rhs) const { return (_node == rhs._node); } template -inline bool epicsList::iterator::operator==(const const_iterator& rhs) const { +inline bool epicsListIterator::operator==(const epicsListConstIterator& rhs) const { return (rhs == *this); } template -inline bool epicsList::iterator::operator!=(const iterator& rhs) const { +inline bool epicsListIterator::operator!=(const epicsListIterator& rhs) const { return !(_node == rhs._node); } template -inline bool epicsList::iterator::operator!=(const const_iterator& rhs) const { +inline bool epicsListIterator::operator!=(const epicsListConstIterator& rhs) const { return !(rhs == *this); } -// epicsList::const_iterator +// epicsListConstIterator template -inline epicsList::const_iterator::const_iterator() : +inline epicsListConstIterator::epicsListConstIterator() : _node(0) {} template -inline epicsList::const_iterator::const_iterator(const iterator& rhs) : +inline epicsListConstIterator::epicsListConstIterator(const epicsListIterator& rhs) : _node(rhs._node) {} template -inline epicsList::const_iterator::const_iterator(const epicsListNode* node) : +inline epicsListConstIterator::epicsListConstIterator(const epicsListNode* node) : _node(node) {} template -inline epicsList::const_iterator& -epicsList::const_iterator::operator=(const iterator& rhs){ +inline epicsListConstIterator& +epicsListConstIterator::operator=(const epicsListIterator& rhs){ _node = rhs._node; return *this; } template -inline const T epicsList::const_iterator::operator*() const { +inline const T epicsListConstIterator::operator*() const { return static_cast(_node->payload); } template -inline const T epicsList::const_iterator::operator->() const { +inline const T epicsListConstIterator::operator->() const { return static_cast(_node->payload); } template -inline epicsList::const_iterator& epicsList::const_iterator::operator++() { +inline epicsListConstIterator& epicsListConstIterator::operator++() { _node = _node->next(); return *this; } template -inline const epicsList::const_iterator epicsList::const_iterator::operator++(int) { - const_iterator temp = *this; +inline const epicsListConstIterator epicsListConstIterator::operator++(int) { + epicsListConstIterator temp = *this; ++(*this); return temp; } template -inline epicsList::const_iterator& epicsList::const_iterator::operator--() { +inline epicsListConstIterator& epicsListConstIterator::operator--() { _node = _node->prev(); return *this; } template -inline const epicsList::const_iterator epicsList::const_iterator::operator--(int) { - const_iterator temp = *this; +inline const epicsListConstIterator epicsListConstIterator::operator--(int) { + epicsListConstIterator temp = *this; --(*this); return temp; } template inline bool -epicsList::const_iterator::operator==(const const_iterator& rhs) const { +epicsListConstIterator::operator==(const epicsListConstIterator& rhs) const { return (_node == rhs._node); } template -inline bool epicsList::const_iterator::operator==(const iterator& rhs) const { +inline bool epicsListConstIterator::operator==(const epicsListIterator& rhs) const { return (_node == rhs._node); } template inline bool -epicsList::const_iterator::operator!=(const const_iterator& rhs) const { +epicsListConstIterator::operator!=(const epicsListConstIterator& rhs) const { return !(_node == rhs._node); } template -inline bool epicsList::const_iterator::operator!=(const iterator& rhs) const { +inline bool epicsListConstIterator::operator!=(const epicsListIterator& rhs) const { return !(_node == rhs._node); } diff --git a/src/libCom/cppStd/epicsListBase.cpp b/src/libCom/cppStd/epicsListBase.cpp index ca1d1885f..99190f7a7 100644 --- a/src/libCom/cppStd/epicsListBase.cpp +++ b/src/libCom/cppStd/epicsListBase.cpp @@ -14,7 +14,7 @@ epicsMutex epicsListNodePool::_mutex; epicsListLink epicsListNodePool::_store; -epicsListNodePool::~epicsListNodePool() { +epicsShareFunc epicsShareAPI epicsListNodePool::~epicsListNodePool() { while (_blocks.hasNext()) { epicsListNodeBlock* block = static_cast(_blocks.extract()); @@ -25,7 +25,7 @@ epicsListNodePool::~epicsListNodePool() { } } -void epicsListNodePool::extend() { +epicsShareFunc void epicsShareAPI epicsListNodePool::extend() { assert(!_free.hasNext()); epicsListNodeBlock* block = 0; if (_store.hasNext()) { diff --git a/src/libCom/cppStd/epicsListBase.h b/src/libCom/cppStd/epicsListBase.h index 41fb79715..99a6c4cda 100644 --- a/src/libCom/cppStd/epicsListBase.h +++ b/src/libCom/cppStd/epicsListBase.h @@ -79,7 +79,7 @@ private: // Data class epicsListNodePool { public: epicsListNodePool(); - ~epicsListNodePool(); + epicsShareFunc epicsShareAPI ~epicsListNodePool(); // allocate & free nodes epicsListNode* allocate(); @@ -88,7 +88,7 @@ public: void swap(epicsListNodePool& pool); private: // Non-inline routines - void extend(); + epicsShareFunc void epicsShareAPI extend(); private: // Data epicsListLink _free;