diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-10-22 06:39:26 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-10-22 06:39:26 +0400 |
commit | 226a5ee83446f91cfeccc73912de85e89fe2169f (patch) | |
tree | c06afdbfae2a0f1f8b0ede3a43c912a0ef4a0c6e /intern/container | |
parent | 91ceb8f552c4619d57b47957da0fbfd7628ac200 (diff) |
remove LOD_Decimator (c++ decimator), now replaced by bmesh decimator. also remove CTR c++ classes that are no longer used.
Diffstat (limited to 'intern/container')
-rw-r--r-- | intern/container/CMakeLists.txt | 7 | ||||
-rw-r--r-- | intern/container/CTR_HashedPtr.h | 6 | ||||
-rw-r--r-- | intern/container/CTR_List.h | 112 | ||||
-rw-r--r-- | intern/container/CTR_Map.h | 8 | ||||
-rw-r--r-- | intern/container/CTR_TaggedIndex.h | 219 | ||||
-rw-r--r-- | intern/container/CTR_TaggedSetOps.h | 301 | ||||
-rw-r--r-- | intern/container/CTR_UHeap.h | 307 | ||||
-rw-r--r-- | intern/container/intern/CTR_List.cpp | 127 |
8 files changed, 7 insertions, 1080 deletions
diff --git a/intern/container/CMakeLists.txt b/intern/container/CMakeLists.txt index b29eea37bc7..4743247af26 100644 --- a/intern/container/CMakeLists.txt +++ b/intern/container/CMakeLists.txt @@ -33,14 +33,9 @@ set(INC_SYS ) set(SRC - intern/CTR_List.cpp - CTR_HashedPtr.h - CTR_List.h CTR_Map.h - CTR_TaggedIndex.h - CTR_TaggedSetOps.h - CTR_UHeap.h ) +# infact nothing to compile! blender_add_lib(bf_intern_ctr "${SRC}" "${INC}" "${INC_SYS}") diff --git a/intern/container/CTR_HashedPtr.h b/intern/container/CTR_HashedPtr.h index 11dc37b3625..8d0ad2bb2a3 100644 --- a/intern/container/CTR_HashedPtr.h +++ b/intern/container/CTR_HashedPtr.h @@ -30,8 +30,8 @@ * \ingroup ctr */ -#ifndef CTR_HASHEDPTR_H -#define CTR_HASHEDPTR_H +#ifndef __CTR_HASHEDPTR_H__ +#define __CTR_HASHEDPTR_H__ #include <stdlib.h> @@ -51,5 +51,5 @@ public: void *getValue() const { return m_valptr; } }; -#endif //CTR_HASHEDPTR_H +#endif /* __CTR_HASHEDPTR_H__ */ diff --git a/intern/container/CTR_List.h b/intern/container/CTR_List.h deleted file mode 100644 index 404a08fddf2..00000000000 --- a/intern/container/CTR_List.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file container/CTR_List.h - * \ingroup ctr - */ - - - -#ifndef CTR_LIST_H -#define CTR_LIST_H - -class CTR_Link { -public: - CTR_Link( - ); - - CTR_Link( - CTR_Link *next, - CTR_Link *prev - ); - - CTR_Link * - getNext( - ) const; - - CTR_Link * - getPrev( - ) const; - - bool - isHead( - ) const; - - bool - isTail( - ) const; - - void - insertBefore( - CTR_Link *link - ); - - void - insertAfter( - CTR_Link *link - ); - - void - remove( - ); - -private: - CTR_Link *m_next; - CTR_Link *m_prev; -}; - -class CTR_List { -public: - - CTR_List( - ); - - CTR_Link * - getHead( - ) const; - - CTR_Link * - getTail( - ) const; - - void - addHead( - CTR_Link *link - ); - - void - addTail( - CTR_Link *link - ); - -private: - CTR_Link m_head; - CTR_Link m_tail; -}; - -#endif - diff --git a/intern/container/CTR_Map.h b/intern/container/CTR_Map.h index 9557821d642..d729f2a1b06 100644 --- a/intern/container/CTR_Map.h +++ b/intern/container/CTR_Map.h @@ -29,9 +29,8 @@ * \ingroup ctr */ - -#ifndef CTR_MAP_H -#define CTR_MAP_H +#ifndef __CTR_MAP_H__ +#define __CTR_MAP_H__ template <class Key, class Value> class CTR_Map { @@ -177,5 +176,4 @@ private: Entry **m_buckets; }; -#endif - +#endif /* __CTR_MAP_H__ */ diff --git a/intern/container/CTR_TaggedIndex.h b/intern/container/CTR_TaggedIndex.h deleted file mode 100644 index 8420414d6c7..00000000000 --- a/intern/container/CTR_TaggedIndex.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file container/CTR_TaggedIndex.h - * \ingroup ctr - */ - - -/** - - * Copyright (C) 2001 NaN Technologies B.V. - * Simple tagged index class. - */ - -#ifndef __CTR_TAGGEDINDEX_H__ -#define __CTR_TAGGEDINDEX_H__ - -/** - * This class is supposed to be a simple tagged index class. If these - * were indices into a mesh then we would never need 32 bits for such indices. - * It is often handy to have a few extra bits around to mark objects etc. We - * steal a few bits of CTR_TaggedIndex objects for this purpose. From the outside - * it will behave like a standard unsigned int but just carry the extra tag - * information around with it. - */ - -#include <functional> - -#include "MEM_sys_types.h" - -enum { - - empty_tag = 0x0, - empty_index = 0xffffffff -}; - -template < - int tag_shift, - int index_mask -> class CTR_TaggedIndex { -public: - CTR_TaggedIndex( - ) : - m_val ((empty_tag << tag_shift) | (empty_index & index_mask)) - { - } - - CTR_TaggedIndex( - const int val - ) : - m_val ((val & index_mask) | ((empty_tag << tag_shift) & (~index_mask))) { - } - - CTR_TaggedIndex( - const unsigned int val - ) : - m_val ((val & index_mask) | ((empty_tag << tag_shift) & (~index_mask))) { - } - - CTR_TaggedIndex( - const long int val - ) : - m_val ( ((long int) val & index_mask) - | ( (empty_tag << tag_shift) - & (~index_mask)) ) { - } - - CTR_TaggedIndex( - const long unsigned int val - ) : - m_val ( ((long unsigned int)val & index_mask) - | ( (empty_tag << tag_shift) - & (~index_mask) ) ) { - } - - -#if defined(_WIN64) - CTR_TaggedIndex( - const uint64_t val - ) : - m_val ( ((uint64_t)val & index_mask) - | ( (empty_tag << tag_shift) - & (~index_mask) ) ) { - } -#endif - - CTR_TaggedIndex( - const CTR_TaggedIndex &my_index - ): - m_val(my_index.m_val) - { - } - - bool - operator == ( - const CTR_TaggedIndex& rhs - ) const { - - return ((this->m_val & index_mask) == (rhs.m_val & index_mask)); - } - - operator unsigned int () const { - return m_val & index_mask; - } - - operator unsigned long int () const { - return (unsigned long int)(m_val & index_mask); - } - - operator int () const { - return int(m_val & index_mask); - } - - operator long int () const { - return (long int)(m_val & index_mask); - } - -#if defined(_WIN64) - operator uint64_t () const { - return (uint64_t)(m_val & index_mask); - } -#endif - - bool - IsEmpty( - ) const { - return ((m_val & index_mask) == (empty_index & index_mask)); - } - - - static - CTR_TaggedIndex - Empty( - ) { - return CTR_TaggedIndex(); - } - - void - Invalidate( - ) { - m_val = (empty_tag << tag_shift) | (empty_index & index_mask); - } - - - unsigned int - Tag ( - ) const { - return m_val >> tag_shift; - } - - void - SetTag( - unsigned int tag - ) { - m_val = (m_val & index_mask) | ((tag << tag_shift) & (~index_mask)); - } - - void - EmptyTag( - ) { - m_val = (m_val & index_mask) | ((empty_tag << tag_shift) & (~index_mask)); - } - - bool - IsEmptyTag( - ) const { - return (Tag() == Empty().Tag()); - } - - // functionals - - struct greater : std::binary_function<CTR_TaggedIndex, CTR_TaggedIndex, bool> - { - bool - operator()( - const CTR_TaggedIndex& a, - const CTR_TaggedIndex& b - ) const { - return (int(a) > int(b)); - } - }; - - -private : - CTR_TaggedIndex( - const CTR_TaggedIndex *index - ) {}; - - unsigned int m_val; - - -}; - -#endif - diff --git a/intern/container/CTR_TaggedSetOps.h b/intern/container/CTR_TaggedSetOps.h deleted file mode 100644 index d30081d2d60..00000000000 --- a/intern/container/CTR_TaggedSetOps.h +++ /dev/null @@ -1,301 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file container/CTR_TaggedSetOps.h - * \ingroup ctr - */ - - -#ifndef __CTR_TAGGEDSETOPS_H__ -#define __CTR_TAGGEDSETOPS_H__ - -#include "MEM_NonCopyable.h" -#include <vector> - -/** - * This class contains some utility functions for finding the intersection, - * union, and difference of a collection of stl vector of indices into - * a set of primitives. - * - * These are mainly used as helper functions in the decimation and bsp - * libraries. - * - * This template class assumes that each value of type IndexType encountered - * in the list is a valid index into an array of primitives. This is not - * checked at run-time and is left to the user to insure. Prmitives of - * type ObjectType must have the following public methods to be used by - * this template class: - * - * int - * OpenTag(void) --- return a persistent tag value for the primitive - * - * void - * SetOpenTag(int bla) --- set the persistent tag value for this primitive to bla. - * - * bool - * SelectTag() --- return a persistent boolean tag for this primitive - * - * void - * SetSelectTag(bool bla) --- set the persistent boolean tag for this primitive to bla. - * - * Here persistent means that the tag should be associated with the object for the - * entire lifetime of the primitive. Again none of this stuff is enforced you have - * to make sure that your primitives do the right thing. Often these tags can be - * cunningly stowed away inside some of the spare bits in the primitive. See - * CTR_TaggedIndex for such a class. - * - */ - -template -<class IndexType, class ObjectType> -class CTR_TaggedSetOps : public MEM_NonCopyable { - -public : - - static - void - Intersect( - const std::vector< std::vector<IndexType> > &index_list, - std::vector<ObjectType> &primitives, - std::vector<IndexType> &output, - unsigned int mask, - unsigned int shift - ) { - - // iterate through vectors in index_list - // iterate through individual members of each vector - // mark each obejct that the index points to - - typename std::vector< std::vector<IndexType> >::const_iterator - last_vector = index_list.end(); - typename std::vector< std::vector<IndexType> >::const_iterator - start_vector = index_list.begin(); - - // FIXME some temporary space - - std::vector<IndexType> temp_union; - temp_union.reserve(64); - - int tag_num = 0; - - for (; start_vector != last_vector; ++start_vector) { - - typename std::vector<IndexType>::const_iterator - last_index = start_vector->end(); - typename std::vector<IndexType>::const_iterator - start_index = start_vector->begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - - if (!prim.OpenTag()) { - // compute the union - temp_union.push_back(*start_index); - } - int tag = prim.OpenTag(); - tag = (tag & mask) >> shift; - tag += 1; - prim.SetOpenTag((prim.OpenTag() & ~mask)| ((tag << shift) & mask)); - } - - ++tag_num; - } - - // now iterate through the union and pull out all those with the right tag - - typename std::vector<IndexType>::const_iterator last_index = - temp_union.end(); - typename std::vector<IndexType>::const_iterator start_index = - temp_union.begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - - if (prim.OpenTag() == tag_num) { - //it's part of the intersection! - - output.push_back(*start_index); - // because we're iterating through the union - // it's safe to remove the tag at this point - - prim.SetOpenTag(prim.OpenTag() & ~mask); - } - } - }; - - // note not a strict set intersection! - // if x appears twice in b and is part of the intersection - // it will appear twice in the intersection - - static - void - IntersectPair( - const std::vector<IndexType> &a, - const std::vector<IndexType> &b, - std::vector<ObjectType> &primitives, - std::vector<IndexType> &output - ) { - - typename std::vector<IndexType>::const_iterator last_index = - a.end(); - typename std::vector<IndexType>::const_iterator start_index = - a.begin(); - - for (; start_index != last_index; ++start_index) { - ObjectType & prim = primitives[*start_index]; - prim.SetSelectTag(true); - } - last_index = b.end(); - start_index = b.begin(); - - for (; start_index != last_index; ++start_index) { - ObjectType & prim = primitives[*start_index]; - if (prim.SelectTag()) { - output.push_back(*start_index); - } - } - // deselect - last_index = a.end(); - start_index = a.begin(); - - for (; start_index != last_index; ++start_index) { - ObjectType & prim = primitives[*start_index]; - prim.SetSelectTag(false); - } - }; - - - static - void - Union( - std::vector< std::vector<IndexType> > &index_list, - std::vector<ObjectType> &primitives, - std::vector<IndexType> &output - ) { - - // iterate through vectors in index_list - // iterate through individual members of each vector - // mark each obejct that the index points to - - typename std::vector< std::vector<IndexType> >::const_iterator - last_vector = index_list.end(); - typename std::vector< std::vector<IndexType> >::iterator - start_vector = index_list.begin(); - - for (; start_vector != last_vector; ++start_vector) { - - typename std::vector<IndexType>::const_iterator - last_index = start_vector->end(); - typename std::vector<IndexType>::iterator - start_index = start_vector->begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - - if (!prim.SelectTag()) { - // compute the union - output.push_back(*start_index); - prim.SetSelectTag(true); - } - } - } - - // now iterate through the union and reset the tags - - typename std::vector<IndexType>::const_iterator last_index = - output.end(); - typename std::vector<IndexType>::iterator start_index = - output.begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - prim.SetSelectTag(false); - } - } - - - static - void - Difference( - std::vector< IndexType> &a, - std::vector< IndexType> &b, - std::vector<ObjectType> &primitives, - std::vector< IndexType> &output - ) { - - // iterate through b mark all - // iterate through a and add to output all unmarked - - typename std::vector<IndexType>::const_iterator last_index = - b.end(); - typename std::vector<IndexType>::iterator start_index = - b.begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - prim.SetSelectTag(true); - } - - last_index = a.end(); - start_index = a.begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - if (!prim.SelectTag()) { - output.push_back(*start_index); - } - } - - // clean up the tags - - last_index = b.end(); - start_index = b.begin(); - - for (; start_index != last_index; ++start_index) { - - ObjectType & prim = primitives[*start_index]; - prim.SetSelectTag(false); - } - }; - -private : - - // private constructor - this class is not meant for - // instantiation - - CTR_TaggedSetOps(); - -}; - -#endif - diff --git a/intern/container/CTR_UHeap.h b/intern/container/CTR_UHeap.h deleted file mode 100644 index 8330faa2f54..00000000000 --- a/intern/container/CTR_UHeap.h +++ /dev/null @@ -1,307 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file container/CTR_UHeap.h - * \ingroup ctr - */ - - -/** - - * Copyright (C) 2001 NaN Technologies B.V. - * - * @author Laurence - * @mainpage CTR_UHeap an updatable heap template class (also - * known as an updatable priority queue) - * - * Todo: Make CTR_UHeapable a template class with m_key the - * template parameter, so that arbitrary value types with - * operators (=,>) defined can be used. - * - */ - -#ifndef __CTR_UHEAP_H__ -#define __CTR_UHEAP_H__ - -#include <vector> - -#include "MEM_NonCopyable.h" - -class CTR_UHeapable { - -public: - int & - HeapPos( - ) { - return m_ind; - }; - float & - HeapKey( - ) { - return m_key; - }; - - const - float & - HeapKey( - ) const { - return m_key; - }; - - const - int & - HeapPos( - ) const { - return m_ind; - }; - -private: - - float m_key; - int m_ind; - -protected: - - CTR_UHeapable( - ) : m_key(0), - m_ind(0) - { - }; - - ~CTR_UHeapable( - ) { - }; -}; - -template <class HeapType> -class CTR_UHeap : public MEM_NonCopyable -{ - -public: - - static - CTR_UHeap * - New( - ) { - return new CTR_UHeap(); - } - - void - MakeHeap( - HeapType *base - ) { - int i; - int start = Parent(m_vector.size() - 1); - for (i = start; i >= 0; --i) { - DownHeap(base, i); - } - }; - - void - Insert( - HeapType *base, - int elem - ) { - // add element to vector - m_vector.push_back(elem); - base[elem].HeapPos() = m_vector.size() - 1; - - // push the element up the heap - UpHeap(base, m_vector.size() - 1); - } - - // access to the vector for initial loading of elements - - std::vector<int> & - HeapVector( - ) { - return m_vector; - }; - - - void - Remove( - HeapType *base, - int i - ) { - - // exchange with last element - pop last - // element and move up or down the heap as appropriate - if (m_vector.empty()) { - assert(false); - } - - if (i != int(m_vector.size()) - 1) { - - Swap(base, i, m_vector.size() - 1); - m_vector.pop_back(); - - if (!m_vector.empty()) { - UpHeap(base, i); - DownHeap(base, i); - } - } - else { - m_vector.pop_back(); - } - } - - int - Top( - ) const { - if (m_vector.empty()) return -1; - return m_vector[0]; - } - - - void - SC_Heap( - HeapType *base - ) { - int i; - for (i = 1; i < int(m_vector.size()); i++) { - - CTR_UHeapable *elem = base + m_vector[i]; - CTR_UHeapable *p_elem = base + m_vector[Parent(i)]; - - assert(p_elem->HeapKey() >= elem->HeapKey()); - assert(elem->HeapPos() == i); - } - - }; - - - ~CTR_UHeap( - ) { - }; - - -private: - - CTR_UHeap( - ) { - }; - - - std::vector<int> m_vector; - -private: - void - Swap( - HeapType *base, - int i, - int j - ) { - std::swap(m_vector[i], m_vector[j]); - - CTR_UHeapable *heap_i = base + m_vector[i]; - CTR_UHeapable *heap_j = base + m_vector[j]; - - // Exchange heap positions - heap_i->HeapPos() = i; - heap_j->HeapPos() = j; - } - - int - Parent( - unsigned int i - ) { - return (i - 1) >> 1; - } - int - Left( - int i - ) { - return (i << 1) + 1; - } - - int - Right( - int i - ) { - return (i << 1) + 2; - } - - float - HeapVal( - HeapType *base, - int i - ) { - return base[m_vector[i]].HeapKey(); - } - - void - DownHeap( - HeapType *base, - int i - ) { - int heap_size = m_vector.size(); - - int l = Left(i); - int r = Right(i); - - int largest; - if (l < heap_size && HeapVal(base, l) > HeapVal(base, i)) { - largest = l; - } - else { - largest = i; - } - - if (r < heap_size && HeapVal(base, r) > HeapVal(base, largest)) { - largest = r; - } - - if (largest != i) { - // exchange i and largest - Swap(base, i, largest); - DownHeap(base, largest); - } - } - - void - UpHeap( - HeapType *base, - int i - ) { - - // swap parents untill it's found a place in the heap < it's parent or - // top of heap - - while (i > 0) { - int p = Parent(i); - if (HeapVal(base, i) < HeapVal(base, p)) { - break; - } - Swap(base, p, i); - i = p; - } - } -}; - -#endif - diff --git a/intern/container/intern/CTR_List.cpp b/intern/container/intern/CTR_List.cpp deleted file mode 100644 index c72d3ccf0d8..00000000000 --- a/intern/container/intern/CTR_List.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file container/intern/CTR_List.cpp - * \ingroup ctr - */ - - -#include "CTR_List.h" - - -CTR_Link::CTR_Link() : - m_next(0), - m_prev(0) -{ -} - -CTR_Link::CTR_Link(CTR_Link *next, CTR_Link *prev) : - m_next(next), - m_prev(prev) -{ -} - -CTR_Link * -CTR_Link::getNext() const -{ - return m_next; -} - -CTR_Link * -CTR_Link::getPrev() const -{ - return m_prev; -} - -bool -CTR_Link::isHead() const -{ - return m_prev == 0; -} - -bool -CTR_Link::isTail() const -{ - return m_next == 0; -} - -void -CTR_Link::insertBefore(CTR_Link *link) -{ - m_next = link; - m_prev = link->m_prev; - m_next->m_prev = this; - m_prev->m_next = this; -} - -void -CTR_Link::insertAfter(CTR_Link *link) -{ - m_next = link->m_next; - m_prev = link; - m_next->m_prev = this; - m_prev->m_next = this; -} - -void -CTR_Link::remove() -{ - m_next->m_prev = m_prev; - m_prev->m_next = m_next; -} - - -CTR_List::CTR_List() : - m_head(&m_tail, 0), - m_tail(0, &m_head) -{ -} - -CTR_Link * -CTR_List:: getHead() const -{ - return m_head.getNext(); -} - -CTR_Link * -CTR_List::getTail() const -{ - return m_tail.getPrev(); -} - -void -CTR_List::addHead(CTR_Link *link) -{ - link->insertAfter(&m_head); -} - -void -CTR_List::addTail(CTR_Link *link) -{ - link->insertBefore(&m_tail); -} - |