]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/buffer.h
textctrl impl
[wxWidgets.git] / include / wx / buffer.h
index 864bb64eb74a74d49476de7e4fa7b3530a2a202a..574d0df0734f10abf23767c93be21b1d7fc48935 100644 (file)
@@ -56,12 +56,8 @@ struct UntypedBufferData
     bool m_owned;
 };
 
-// this has to be defined inside the DLL (and not e.g. as a static variable
-// inside an inline function) as otherwise MSVC gives link errors when the
-// functions are effectively inlined (i.e. in non-debug build)
-//
 // NB: this is defined in string.cpp and not the (non-existent) buffer.cpp
-extern WXDLLIMPEXP_DATA_BASE(UntypedBufferData * const) untypedNullDataPtr;
+WXDLLIMPEXP_BASE UntypedBufferData * GetUntypedNullData();
 
 } // namespace wxPrivate
 
@@ -186,7 +182,7 @@ protected:
     // placeholder for NULL string, to simplify this code
     static Data *GetNullData()
     {
-        return static_cast<Data *>(wxPrivate::untypedNullDataPtr);
+        return static_cast<Data *>(wxPrivate::GetUntypedNullData());
     }
 
     void IncRef()
@@ -363,7 +359,6 @@ public:
     wxCharBuffer(const wxCStrData& cstr);
 };
 
-#if wxUSE_WCHAR_T
 WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxScopedCharTypeBuffer<wchar_t> )
 WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<wchar_t> )
 
@@ -383,7 +378,6 @@ public:
 
     wxWCharBuffer(const wxCStrData& cstr);
 };
-#endif // wxUSE_WCHAR_T
 
 // wxCharTypeBuffer<T> implicitly convertible to T*
 template <typename T>
@@ -474,6 +468,21 @@ private:
             delete this;
     }
 
+    void *release()
+    {
+        if ( m_data == NULL )
+            return NULL;
+
+        wxASSERT_MSG( m_ref == 1, "can't release shared buffer" );
+
+        void *p = m_data;
+        m_data = NULL;
+        m_len =
+        m_size = 0;
+
+        return p;
+    }
+
 
     // the buffer containing the data
     void  *m_data;
@@ -576,6 +585,13 @@ public:
 
     operator const char *() const { return (const char*)GetData(); }
 
+    // gives up ownership of data, returns the pointer; after this call,
+    // data isn't freed by the buffer and its content is resent to empty
+    void *release()
+    {
+        return m_bufdata->release();
+    }
+
 private:
     wxMemoryBufferData*  m_bufdata;
 };