]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/vector.h
OS X savvy implementation
[wxWidgets.git] / include / wx / vector.h
index 55d1b5c0155f753a59c9afce34ff28355731fd85..2034a9eaa8bcfaaeda7e355aa3a553d1c715d610 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     30.07.2001
 // Copyright:   (c) 2001 Lindsay Mathieson <lindsay@mathieson.org>
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_VECTOR_H_
 
 #include "wx/defs.h"
 
-class wxVectorBase
+class WXDLLIMPEXP_BASE wxVectorBase
 {
+public:
+    typedef size_t size_type;
 private:
-    int m_allocsize;
-    int m_size,
-        m_capacity;
+    size_type m_allocsize;
+    size_type m_size,
+              m_capacity;
     void **m_objects;
 
 protected:
-    bool Alloc(int sz)
+    bool Alloc(size_type sz)
     {
         // work in multiples of m_allocsize;
         sz = (sz / m_allocsize + 1) * m_allocsize;
@@ -44,7 +46,7 @@ protected:
     // untyped copy constructor of elements - must be overriden
     virtual void *Copy(const void *) const = 0;
 
-    const void *GetItem(int idx) const
+    const void *GetItem(size_type idx) const
     {
         wxASSERT(idx >= 0 && idx < m_size);
         return m_objects[idx];
@@ -57,15 +59,15 @@ protected:
         m_size++;
     };
 
-    void RemoveAt(int idx)
+    void RemoveAt(size_type idx)
     {
         wxASSERT(idx >= 0 && idx < m_size);
         Free(m_objects[idx]);
         if (idx < m_size - 1)
             memcpy(
-                m_objects + idx * sizeof(void *),
-                m_objects + (idx + 1) * sizeof(void *),
-                m_size - idx - 1);
+                m_objects + idx,
+                m_objects + idx + 1,
+                ( m_size - idx - 1 ) * sizeof(void*) );
         m_size--;
     };
 
@@ -75,7 +77,7 @@ protected:
         if (! Alloc(vb.size()))
             return false;
 
-        for (int i = 0; i < vb.size(); i++)
+        for (size_type i = 0; i < vb.size(); i++)
         {
             void *o = vb.Copy(vb.GetItem(i));
             if (! o)
@@ -87,17 +89,19 @@ protected:
     };
 
 public:
-    wxVectorBase() : m_objects(0), m_allocsize(16), m_size(0), m_capacity(0) {}
+    wxVectorBase() : m_allocsize(16), m_size(0), m_capacity(0), m_objects(0) {}
+    virtual ~wxVectorBase() {} // calm down GCC
+
     void clear()
     {
-        for (int i = 0; i < size(); i++)
+        for (size_type i = 0; i < size(); i++)
             Free(m_objects[i]);
         free(m_objects);
         m_objects = 0;
         m_size = m_capacity = 0;
     };
 
-    void reserve(int n)
+    void reserve(size_type n)
     {
         if ( !Alloc(n) )
         {
@@ -105,14 +109,14 @@ public:
         }
     };
 
-    int size() const
+    size_type size() const
     {
         return m_size;
     }
 
-    int capacity() const
+    size_type capacity() const
     {
-        return m_size;
+        return m_capacity;
     };
 
     bool empty() const
@@ -122,8 +126,7 @@ public:
 
     wxVectorBase& operator = (const wxVectorBase& vb)
     {
-        bool rc = copy(vb);
-        wxASSERT(rc);
+        wxCHECK(copy(vb), *this);
         return *this;
     }
 };
@@ -142,42 +145,40 @@ public:\
     cls() {}\
     cls(const cls& c)\
     {\
-        bool rc = copy(c);\
-        wxASSERT(rc);\
+        wxCHECK2(copy(c), return);\
     }\
     ~cls()\
     {\
         clear();\
     }
 
-#define WX_DECLARE_VECTOR(obj, cls)\
-class cls : public wxVectorBase\
+#define _WX_DECLARE_VECTOR(obj, cls, exp)\
+class exp cls : public wxVectorBase\
 {\
-    WX_DECLARE_STL_VECTORBASE(obj, cls);\
+    WX_DECLARE_VECTORBASE(obj, cls);\
 public:\
     void push_back(const obj& o)\
     {\
-        bool rc = Alloc(size() + 1);\
-        wxASSERT(rc);\
+        wxCHECK2(Alloc(size() + 1), return);\
         Append(new obj(o));\
     };\
     void pop_back()\
     {\
         RemoveAt(size() - 1);\
     };\
-    const obj& at(int idx) const\
+    const obj& at(size_type idx) const\
     {\
         return *(obj *) GetItem(idx);\
     };\
-    obj& at(int idx)\
+    obj& at(size_type idx)\
     {\
         return *(obj *) GetItem(idx);\
     };\
-    const obj& operator[](int idx) const\
+    const obj& operator[](size_type idx) const\
     {\
         return at(idx);\
     };\
-    obj& operator[](int idx)\
+    obj& operator[](size_type idx)\
     {\
         return at(idx);\
     };\
@@ -197,12 +198,15 @@ public:\
     {\
         return at(size() - 1);\
     };\
-    int erase(int idx)\
+    size_type erase(size_type idx)\
     {\
         RemoveAt(idx);\
         return idx;\
     };\
 }
 
+#define WX_DECLARE_VECTOR(obj, cls) \
+  _WX_DECLARE_VECTOR(obj, cls, WXDLLEXPORT)
+
 #endif // _WX_VECTOR_H_