]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/wxPython/modules/lseditor/wxstlvec.h
lots'o' wxpython modules files
[wxWidgets.git] / utils / wxPython / modules / lseditor / wxstlvec.h
diff --git a/utils/wxPython/modules/lseditor/wxstlvec.h b/utils/wxPython/modules/lseditor/wxstlvec.h
new file mode 100644 (file)
index 0000000..bc6fe50
--- /dev/null
@@ -0,0 +1,857 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        No names yet.
+// Purpose:     Contrib. demo
+// Author:      Aleksandras Gluchovas
+// Modified by:
+// Created:     27/09/98
+// RCS-ID:      $Id$
+// Copyright:   (c) Aleskandars Gluchovas
+// Licence:    wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef __WXSTLVEC_G__
+#define __WXSTLVEC_G__
+
+#include <memory.h>
+#include <string.h>  // imports memmove()
+#include <stddef.h>
+#include <sys/types.h>
+#include <limits.h>
+#include <new>
+
+// the below macro used internally (see actual interface after this macro)
+
+#define __DEFINE_STL_VECTOR_DEEP( vectorClass, Type ) class vectorClass {\
+\
+public:\
+       typedef Type              value_type;\
+       typedef value_type*           iterator;\
+       typedef const value_type* const_iterator;\
+       typedef iterator                  pointer;\
+       typedef const iterator    const_pointer;\
+       typedef value_type&       reference;\
+       typedef const value_type& const_reference;\
+       typedef size_t            size_type;\
+       typedef ptrdiff_t         difference_type;\
+\
+       typedef iterator       OutputIterator;\
+       typedef const_iterator InputIterator;\
+\
+protected:\
+\
+       inline void PlacementCopy( const_iterator first, const_iterator last, iterator result )\
+       {\
+               while ( first != last ) \
+                       new (result++) value_type(*first++);\
+       }\
+\
+       inline void ConstructObjects( iterator first, iterator last, const value_type& pattern )\
+       {\
+               while( first != last ) \
+                       new (first++) value_type(pattern);\
+       }\
+\
+       inline void CopyObjects( iterator first, iterator last, iterator result )\
+       {\
+               while( first != last ) \
+                       *result++ = *first++;\
+       }\
+\
+       inline void CopyObjectsBack( iterator first, iterator last, iterator result )\
+       {\
+               result += difference_type(last,first);\
+\
+               while( first != last ) \
+                       *(--result) = *(--last);\
+       }\
+\
+public:\
+\
+       class reverse_iterator \
+       {\
+               friend class vectorClass;\
+               friend class const_reverse_iterator;\
+\
+       public:\
+               iterator mpPos;\
+\
+       public:\
+\
+               reverse_iterator() {}\
+\
+               reverse_iterator ( iterator pPos )\
+               {\
+                       mpPos = pPos;\
+               }\
+       \
+               int operator==( const reverse_iterator& rhs ) const { return (mpPos == rhs.mpPos); }\
+               int operator!=( const reverse_iterator& rhs ) const { return (mpPos != rhs.mpPos); }\
+\
+               inline reverse_iterator( const reverse_iterator& other )\
+               {\
+                       mpPos = other.mpPos;\
+               }\
+\
+               inline const reverse_iterator& operator--() \
+               {\
+                       --mpPos;\
+                       return *this;\
+               }\
+\
+               inline reverse_iterator operator--(int)\
+               {\
+                       reverse_iterator tmp = *this;\
+                       --mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const reverse_iterator & operator++() \
+               {\
+                       ++mpPos;\
+                       return *this;\
+               }\
+\
+               inline reverse_iterator  operator++(int)\
+               {\
+                       reverse_iterator tmp = *this;\
+                       ++mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const_reference operator*() const { return *mpPos; }\
+       };\
+\
+\
+       class const_reverse_iterator \
+       {\
+       protected:\
+               iterator mpPos;\
+       public:\
+\
+               const_reverse_iterator() {}\
+\
+               const_reverse_iterator( const iterator pPos )\
+               {\
+                       mpPos = pPos;\
+               }\
+       \
+               int operator==( const const_reverse_iterator& rhs ) const { return (mpPos == rhs.mpPos); }\
+               int operator!=( const const_reverse_iterator& rhs ) const { return (mpPos != rhs.mpPos); }\
+\
+               inline const_reverse_iterator( const reverse_iterator& other )\
+               {\
+                       mpPos = other.mpPos;\
+               }\
+\
+               inline const const_reverse_iterator& operator--() \
+               {\
+                       --mpPos;\
+                       return *this;\
+               }\
+\
+               inline const_reverse_iterator operator--(int)\
+               {\
+                       const_reverse_iterator tmp = *this;\
+                       --mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const const_reverse_iterator & operator++() \
+               {\
+                       ++mpPos;\
+                       return *this;\
+               }\
+\
+               inline const_reverse_iterator operator++(int)\
+               {\
+                       const_reverse_iterator tmp = *this;\
+                       ++mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const_reference operator*() const { return *mpPos; }\
+       };\
+\
+protected:\
+       \
+       pointer mpStart;\
+       pointer mpEnd;\
+       pointer mpEndOfBuf;\
+\
+protected:\
+\
+       inline void quick_sort(int low, int hi) \
+       {\
+               int pivot_index;\
+               int left, right;\
+\
+               pivot_index = ( !(mpStart[low] < mpStart[low+1])) ? low : (low+1);\
+               value_type pivot_value = mpStart[pivot_index];\
+\
+               left = low; right = hi;\
+               do \
+               {\
+                       while ((left <= hi) && (mpStart[left] < pivot_value)) left++;\
+\
+                   while ((right >= low) && (pivot_value < mpStart[right])) right--;\
+\
+                       if (left <= right) \
+                       {\
+                               value_type tmp = mpStart[left];\
+                               mpStart[left] = mpStart[right];\
+                               mpStart[right] = tmp;\
+\
+                               left++;\
+                               right--;\
+                       }\
+    \
+               } while (left <= right);\
+               if (low < right) quick_sort(low, right);\
+               if (left < hi) quick_sort(left, hi);\
+       }\
+\
+       inline void DestructRange( iterator first, iterator last )\
+       {\
+               typedef value_type value_type_local;\
+\
+               while ( first != last ) \
+               {\
+                       first->value_type_local::~value_type_local();\
+                       ++first;\
+               }\
+       }\
+\
+       inline iterator DoInsert(iterator position, const value_type& x)\
+       {\
+               if ( mpEnd < mpEndOfBuf )\
+               {\
+                       new (mpEnd) value_type(*(mpEnd-1) );\
+           \
+                       CopyObjectsBack( position, mpEnd, position + 1 );\
+           \
+                       *position = x;\
+           \
+                       ++mpEnd;\
+           \
+                       return position;\
+               }\
+           \
+               size_type minBufLen = WXSTL_VECTOR_MIN_BUF_SIZE/sizeof(value_type);\
+           \
+               size_type doubledSize = size()*2;\
+           \
+               size_type newLen = ( doubledSize < minBufLen ) ? minBufLen : doubledSize;\
+           \
+               iterator pNewStart = (iterator)( new char[newLen*sizeof(value_type)] );\
+           \
+               PlacementCopy( mpStart, position, pNewStart );\
+           \
+               iterator atPosition = pNewStart + difference_type( position - mpStart );\
+           \
+               new (atPosition) value_type(x);\
+           \
+               iterator newPos = atPosition;\
+           \
+               ++atPosition;\
+           \
+               if ( mpStart ) \
+               {\
+                       PlacementCopy( position, mpEnd, atPosition );\
+                       DestructRange( mpStart, mpEnd );\
+                       delete [](char*)mpStart;\
+               }\
+           \
+               mpEnd = atPosition + difference_type( mpEnd - position );\
+           \
+               mpStart    = pNewStart;\
+               mpEndOfBuf = pNewStart + newLen;\
+           \
+               return newPos;\
+       }\
+\
+public:\
+\
+       inline vectorClass() : mpStart(0), \
+                                                  mpEnd(0),\
+                                                  mpEndOfBuf(0)\
+       {}\
+\
+       inline vectorClass( const_iterator first, const_iterator last )\
+               : mpStart(0),\
+                 mpEnd(0),\
+                 mpEndOfBuf(0)\
+               \
+               { while( first != last ) push_back( *first++ ); }\
+\
+       inline vectorClass( size_type n, const value_type& value = value_type() )\
+               : mpStart(0),\
+                 mpEnd(0),\
+                 mpEndOfBuf(0)\
+               \
+               { for( size_type i = 0; i != n; ++i ) push_back( value ); }\
+\
+       inline int operator==( const vectorClass& other )\
+       {\
+               size_type sz = size();\
+\
+               if ( sz != other.size() ) return 0;\
+\
+               for( size_type i = 0; i != sz; ++i )\
+\
+                       if ( !( (*this)[i] == other[i] ) ) return 0;\
+\
+               return 1;\
+\
+       }\
+\
+       inline const vectorClass& operator=( const vectorClass& other )\
+       {\
+               if (mpStart) \
+               {\
+                       DestructRange( begin(), end() );\
+                       delete [](char*)mpStart; \
+               }\
+\
+               size_t newLen = difference_type( other.mpEndOfBuf - other.mpStart );\
+\
+               mpStart = (iterator)( new char[newLen*sizeof(value_type)] );\
+\
+               PlacementCopy( other.begin(), other.end(), mpStart );\
+\
+               mpEnd = mpStart + other.size();\
+\
+               mpEndOfBuf = mpStart + newLen;\
+\
+               return *this;\
+       }\
+\
+       inline vectorClass( const vectorClass& other )\
+               : mpStart(0),\
+                 mpEnd(0),\
+                 mpEndOfBuf(0)\
+       {\
+               this->operator=( other );\
+       }\
+\
+       inline ~vectorClass() \
+       { \
+               if (mpStart) \
+               {\
+                       DestructRange( begin(), end() );\
+                       delete [](char*)mpStart; \
+               }\
+       }\
+\
+       inline iterator begin() { return mpStart; }\
+\
+       inline const_iterator begin() const { return mpStart; }\
+\
+       inline iterator end() { return mpEnd; }\
+\
+       inline const_iterator end() const { return mpEnd; }\
+\
+       inline size_type size() const { return (size_type)difference_type(mpEnd-mpStart); }\
+\
+       inline size_type max_size() const { return UINT_MAX/sizeof(value_type); }\
+\
+       inline size_type capacity() const \
+                       { return difference_type(mpEndOfBuf-mpStart)/sizeof(value_type); }\
+\
+       inline int empty() const { return mpStart == mpEnd; }\
+\
+       inline reference operator[](size_type n) { return *(mpStart+n); }\
+\
+       inline const_reference operator[](size_type n) const { return *(mpStart+n); }\
+\
+       inline reference front() { return (*mpStart); }\
+       \
+       inline const_reference front() const { return (*mpStart); }\
+\
+       inline reference back() { return (*(mpEnd-1)); }\
+\
+       inline const_reference back() const { return (*(mpEnd-1)); }\
+\
+       inline void reserve(size_type n) {}\
+\
+       inline void push_back(const value_type& x)\
+       {\
+               if ( mpEnd != mpEndOfBuf ) \
+               {\
+                       new (mpEnd) value_type(x);\
+                       ++mpEnd;\
+               }\
+               else\
+                       DoInsert( mpEnd, x );\
+       }\
+\
+       inline iterator insert(iterator position, const value_type& x = value_type())\
+       {\
+               if ( position == mpEnd && mpEnd != mpEndOfBuf )\
+               {\
+                       new (mpEnd) value_type(x);\
+                       ++mpEnd;\
+                       return (mpEnd-1);\
+               }\
+               else return DoInsert( position, x );\
+       }\
+\
+       inline void pop_back()\
+       {\
+               DestructRange( mpEnd-1, mpEnd );\
+\
+               --mpEnd;\
+       }\
+\
+       inline void erase(iterator first, iterator last)\
+       {\
+               if ( last == mpEnd )\
+               {\
+                       DestructRange( first, last );\
+                       mpEnd = first;\
+                       return;\
+               }\
+           \
+               CopyObjects( last, last + difference_type( mpEnd - last ), first );\
+           \
+               iterator newEnd = mpEnd - difference_type( last - first );\
+               DestructRange( newEnd, mpEnd );\
+           \
+               mpEnd = newEnd;\
+       }\
+\
+       inline void erase( iterator position )\
+       {\
+               erase( position, position + 1 );\
+       }\
+\
+       inline void sort()\
+       {\
+               if ( size() < 2 ) return;\
+               quick_sort( 0, size()-1 );\
+       }\
+}
+
+/////////////////////////////// shallow-copy container ///////////////////////
+
+#define __DEFINE_STL_VECTOR_SHALLOW( vectorClass, Type ) class vectorClass {\
+\
+public:\
+       typedef Type              value_type;\
+       typedef value_type*           iterator;\
+       typedef const value_type* const_iterator;\
+       typedef iterator                  pointer;\
+       typedef const iterator    const_pointer;\
+       typedef value_type&       reference;\
+       typedef const value_type& const_reference;\
+       typedef size_t            size_type;\
+       typedef ptrdiff_t         difference_type;\
+\
+       typedef iterator       OutputIterator;\
+       typedef const_iterator InputIterator;\
+\
+protected:\
+\
+       inline void PlacementCopy( const_iterator first, const_iterator last, iterator result )\
+       {\
+               memcpy(result, first, int(difference_type(last-first)*sizeof(value_type)) );\
+       }\
+\
+       inline void ConstructObjects( iterator first, iterator last, const value_type& pattern )\
+       {\
+                       if ( sizeof(pattern) == 1 )\
+                       \
+                               memset( first, int(difference_type(last-first)/sizeof(value_type)), \
+                                       int(*((char*)&pattern)) );\
+                       else\
+                               while( first != last ) \
+                                       *first++ = pattern;\
+       }\
+\
+       inline void CopyObjects( iterator first, iterator last, iterator result )\
+       {\
+               memcpy(result, first, int(difference_type(last-first)*sizeof(value_type)) );\
+       }\
+\
+       inline void CopyObjectsBack( iterator first, iterator last, iterator result )\
+       {\
+               memmove(result, first, int(difference_type(last-first)*sizeof(value_type)) );\
+       }\
+\
+public:\
+\
+       class reverse_iterator \
+       {\
+               friend class vectorClass;\
+               friend class const_reverse_iterator;\
+\
+       public:\
+               iterator mpPos;\
+\
+       public:\
+\
+               reverse_iterator() {}\
+\
+               reverse_iterator ( iterator pPos )\
+               {\
+                       mpPos = pPos;\
+               }\
+       \
+               int operator==( const reverse_iterator& rhs ) const { return (mpPos == rhs.mpPos); }\
+               int operator!=( const reverse_iterator& rhs ) const { return (mpPos != rhs.mpPos); }\
+\
+               inline reverse_iterator( const reverse_iterator& other )\
+               {\
+                       mpPos = other.mpPos;\
+               }\
+\
+               inline const reverse_iterator& operator--() \
+               {\
+                       --mpPos;\
+                       return *this;\
+               }\
+\
+               inline reverse_iterator operator--(int)\
+               {\
+                       reverse_iterator tmp = *this;\
+                       --mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const reverse_iterator & operator++() \
+               {\
+                       ++mpPos;\
+                       return *this;\
+               }\
+\
+               inline reverse_iterator  operator++(int)\
+               {\
+                       reverse_iterator tmp = *this;\
+                       ++mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const_reference operator*() const { return *mpPos; }\
+       };\
+\
+\
+       class const_reverse_iterator \
+       {\
+       protected:\
+               iterator mpPos;\
+       public:\
+\
+               const_reverse_iterator() {}\
+\
+               const_reverse_iterator( const iterator pPos )\
+               {\
+                       mpPos = pPos;\
+               }\
+       \
+               int operator==( const const_reverse_iterator& rhs ) const { return (mpPos == rhs.mpPos); }\
+               int operator!=( const const_reverse_iterator& rhs ) const { return (mpPos != rhs.mpPos); }\
+\
+               inline const_reverse_iterator( const reverse_iterator& other )\
+               {\
+                       mpPos = other.mpPos;\
+               }\
+\
+               inline const const_reverse_iterator& operator--() \
+               {\
+                       --mpPos;\
+                       return *this;\
+               }\
+\
+               inline const_reverse_iterator operator--(int)\
+               {\
+                       const_reverse_iterator tmp = *this;\
+                       --mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const const_reverse_iterator & operator++() \
+               {\
+                       ++mpPos;\
+                       return *this;\
+               }\
+\
+               inline const_reverse_iterator operator++(int)\
+               {\
+                       const_reverse_iterator tmp = *this;\
+                       ++mpPos;\
+                       return tmp;\
+               }\
+\
+               inline const_reference operator*() const { return *mpPos; }\
+       };\
+\
+protected:\
+       \
+       pointer mpStart;\
+       pointer mpEnd;\
+       pointer mpEndOfBuf;\
+\
+protected:\
+\
+       inline void quick_sort(int low, int hi) \
+       {\
+               int pivot_index;\
+               int left, right;\
+\
+               pivot_index = ( !(mpStart[low] < mpStart[low+1])) ? low : (low+1);\
+               value_type pivot_value = mpStart[pivot_index];\
+\
+               left = low; right = hi;\
+               do \
+               {\
+                       while ((left <= hi) && (mpStart[left] < pivot_value)) left++;\
+\
+                   while ((right >= low) && (pivot_value < mpStart[right])) right--;\
+\
+                       if (left <= right) \
+                       {\
+                               value_type tmp = mpStart[left];\
+                               mpStart[left] = mpStart[right];\
+                               mpStart[right] = tmp;\
+\
+                               left++;\
+                               right--;\
+                       }\
+    \
+               } while (left <= right);\
+               if (low < right) quick_sort(low, right);\
+               if (left < hi) quick_sort(left, hi);\
+       }\
+\
+       inline void DestructRange( iterator first, iterator last )\
+       {\
+       }\
+\
+       inline iterator DoInsert(iterator position, const value_type& x)\
+       {\
+               if ( mpEnd < mpEndOfBuf )\
+               {\
+                       new (mpEnd) value_type(*(mpEnd-1) );\
+           \
+                       CopyObjectsBack( position, mpEnd, position + 1 );\
+           \
+                       *position = x;\
+           \
+                       ++mpEnd;\
+           \
+                       return position;\
+               }\
+           \
+               size_type minBufLen = WXSTL_VECTOR_MIN_BUF_SIZE/sizeof(value_type);\
+           \
+               size_type doubledSize = size()*2;\
+           \
+               size_type newLen = ( doubledSize < minBufLen ) ? minBufLen : doubledSize;\
+           \
+               iterator pNewStart = (iterator)( new char[newLen*sizeof(value_type)] );\
+           \
+               PlacementCopy( mpStart, position, pNewStart );\
+           \
+               iterator atPosition = pNewStart + difference_type( position - mpStart );\
+           \
+               new (atPosition) value_type(x);\
+           \
+               iterator newPos = atPosition;\
+           \
+               ++atPosition;\
+           \
+               if ( mpStart ) \
+               {\
+                       PlacementCopy( position, mpEnd, atPosition );\
+                       DestructRange( mpStart, mpEnd );\
+                       delete [](char*)mpStart;\
+               }\
+           \
+               mpEnd = atPosition + difference_type( mpEnd - position );\
+           \
+               mpStart    = pNewStart;\
+               mpEndOfBuf = pNewStart + newLen;\
+           \
+               return newPos;\
+       }\
+\
+public:\
+\
+       inline vectorClass() : mpStart(0), \
+                                                  mpEnd(0),\
+                                                  mpEndOfBuf(0)\
+       {}\
+\
+       inline vectorClass( const_iterator first, const_iterator last )\
+               : mpStart(0),\
+                 mpEnd(0),\
+                 mpEndOfBuf(0)\
+               \
+               { while( first != last ) push_back( *first++ ); }\
+\
+       inline vectorClass( size_type n, const value_type& value = value_type() )\
+               : mpStart(0),\
+                 mpEnd(0),\
+                 mpEndOfBuf(0)\
+               \
+               { for( size_type i = 0; i != n; ++i ) push_back( value ); }\
+\
+       inline int operator==( const vectorClass& other )\
+       {\
+               size_type sz = size();\
+\
+               if ( sz != other.size() ) return 0;\
+\
+               for( size_type i = 0; i != sz; ++i )\
+\
+                       if ( !( (*this)[i] == other[i] ) ) return 0;\
+\
+               return 1;\
+\
+       }\
+\
+       inline const vectorClass& operator=( const vectorClass& other )\
+       {\
+               if (mpStart) \
+               {\
+                       DestructRange( begin(), end() );\
+                       delete [](char*)mpStart; \
+               }\
+\
+               size_t newLen = difference_type( other.mpEndOfBuf - other.mpStart );\
+\
+               mpStart = (iterator)( new char[newLen*sizeof(value_type)] );\
+\
+               PlacementCopy( other.begin(), other.end(), mpStart );\
+\
+               mpEnd = mpStart + other.size();\
+\
+               mpEndOfBuf = mpStart + newLen;\
+\
+               return *this;\
+       }\
+\
+       inline vectorClass( const vectorClass& other )\
+               : mpStart(0),\
+                 mpEnd(0),\
+                 mpEndOfBuf(0)\
+       {\
+               this->operator=( other );\
+       }\
+\
+       inline ~vectorClass() \
+       { \
+               if (mpStart) \
+               {\
+                       DestructRange( begin(), end() );\
+                       delete [](char*)mpStart; \
+               }\
+       }\
+\
+       inline iterator begin() { return mpStart; }\
+\
+       inline const_iterator begin() const { return mpStart; }\
+\
+       inline iterator end() { return mpEnd; }\
+\
+       inline const_iterator end() const { return mpEnd; }\
+\
+       inline size_type size() const { return (size_type)difference_type(mpEnd-mpStart); }\
+\
+       inline size_type max_size() const { return UINT_MAX/sizeof(value_type); }\
+\
+       inline size_type capacity() const \
+                       { return difference_type(mpEndOfBuf-mpStart)/sizeof(value_type); }\
+\
+       inline int empty() const { return mpStart == mpEnd; }\
+\
+       inline reference operator[](size_type n) { return *(mpStart+n); }\
+\
+       inline const_reference operator[](size_type n) const { return *(mpStart+n); }\
+\
+       inline reference front() { return (*mpStart); }\
+       \
+       inline const_reference front() const { return (*mpStart); }\
+\
+       inline reference back() { return (*(mpEnd-1)); }\
+\
+       inline const_reference back() const { return (*(mpEnd-1)); }\
+\
+       inline void reserve(size_type n) {}\
+\
+       inline void push_back(const value_type& x)\
+       {\
+               if ( mpEnd != mpEndOfBuf ) \
+               {\
+                       new (mpEnd) value_type(x);\
+                       ++mpEnd;\
+               }\
+               else\
+                       DoInsert( mpEnd, x );\
+       }\
+\
+       inline iterator insert(iterator position, const value_type& x = value_type())\
+       {\
+               if ( position == mpEnd && mpEnd != mpEndOfBuf )\
+               {\
+                       new (mpEnd) value_type(x);\
+                       ++mpEnd;\
+                       return (mpEnd-1);\
+               }\
+               else return DoInsert( position, x );\
+       }\
+\
+       inline void pop_back()\
+       {\
+               DestructRange( mpEnd-1, mpEnd );\
+\
+               --mpEnd;\
+       }\
+\
+       inline void erase(iterator first, iterator last)\
+       {\
+               if ( last == mpEnd )\
+               {\
+                       DestructRange( first, last );\
+                       mpEnd = first;\
+                       return;\
+               }\
+           \
+               CopyObjects( last, last + difference_type( mpEnd - last ), first );\
+           \
+               iterator newEnd = mpEnd - difference_type( last - first );\
+               DestructRange( newEnd, mpEnd );\
+           \
+               mpEnd = newEnd;\
+       }\
+\
+       inline void erase( iterator position )\
+       {\
+               erase( position, position + 1 );\
+       }\
+\
+       inline void sort()\
+       {\
+               if ( size() < 2 ) return;\
+               quick_sort( 0, size()-1 );\
+       }\
+}
+
+
+
+// redefine below symbol to change the default allocation unit of vector content buffer
+#define WXSTL_VECTOR_MIN_BUF_SIZE 64
+
+// defines vector class, where objects are copied
+// using "deep-copy" sematics (i.e. by calling their copy constructors)
+
+#define WXSTL_VECTOR(ELEMENT_CLASS) \
+__DEFINE_STL_VECTOR_DEEP(_WXSTL_VECTOR_##ELEMENT_CLASS, ELEMENT_CLASS)
+
+// defines vector class, where objects are copied
+// using "shallow-copy" sematics (i.e. instead of calling
+// their constructors, memcpy() and memmove() are used to copy their raw data)
+
+
+#define WXSTL_VECTOR_SHALLOW_COPY(ELEMENT_CLASS) __DEFINE_STL_VECTOR_SHALLOW(_WXSTL_VECTORSC_##ELEMENT_CLASS, ELEMENT_CLASS)
+
+#endif