Fixed wxPostScript printing problem (used wrong constructor, and the right
[wxWidgets.git] / include / wx / buffer.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: buffer.h
3 // Purpose: auto buffer classes: buffers which automatically free memory
4 // Author: Vadim Zeitlin
5 // Modified by:
6 // Created: 12.04.99
7 // RCS-ID: $Id$
8 // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
9 // Licence: wxWindows license
10 ///////////////////////////////////////////////////////////////////////////////
11
12 // these classes are for private use only for now, they're not documented
13
14 #ifndef _WX_BUFFER_H
15 #define _WX_BUFFER_H
16
17 #include "wx/wxchar.h"
18 #include <string.h> // strdup
19
20 // wchar.h isn't available on my system (Linux, g++ 2.7.2). JACS.
21 #ifdef __LINUX__
22 #include <wcstr.h>
23 #else
24 #include <wchar.h> // wchar_t
25 #endif
26
27 // ----------------------------------------------------------------------------
28 // Special classes for (wide) character strings: they use malloc/free instead
29 // of new/delete
30 // ----------------------------------------------------------------------------
31
32 class wxCharBuffer
33 {
34 public:
35 wxCharBuffer(const char *str)
36 {
37 wxASSERT_MSG( str, _T("NULL string in wxCharBuffer") );
38
39 m_str = str ? strdup(str) : (char *)NULL;
40 }
41 wxCharBuffer(size_t len)
42 {
43 m_str = (char *)malloc(len+1);
44 m_str[len] = '\0';
45 }
46 // no need to check for NULL, free() does it
47 ~wxCharBuffer() { free(m_str); }
48
49 wxCharBuffer(const wxCharBuffer& src)
50 {
51 m_str = src.m_str;
52 // no reference count yet...
53 ((wxCharBuffer*)&src)->m_str = (char *)NULL;
54 }
55 wxCharBuffer& operator=(const wxCharBuffer& src)
56 {
57 m_str = src.m_str;
58 // no reference count yet...
59 ((wxCharBuffer*)&src)->m_str = (char *)NULL;
60 return *this;
61 }
62
63 operator const char *() const { return m_str; }
64
65 private:
66 char *m_str;
67 };
68
69 class wxWCharBuffer
70 {
71 public:
72 wxWCharBuffer(const wchar_t *wcs)
73 {
74 wxASSERT_MSG( wcs, _T("NULL string in wxWCharBuffer") );
75
76 if (wcs) {
77 size_t siz = (wcslen(wcs)+1)*sizeof(wchar_t);
78 m_wcs = (wchar_t *)malloc(siz);
79 memcpy(m_wcs, wcs, siz);
80 }
81 else m_wcs = (wchar_t *)NULL;
82 }
83 wxWCharBuffer(size_t len)
84 {
85 m_wcs = (wchar_t *)malloc((len+1)*sizeof(wchar_t));
86 m_wcs[len] = L'\0';
87 }
88
89 // no need to check for NULL, free() does it
90 ~wxWCharBuffer() { free(m_wcs); }
91
92 wxWCharBuffer(const wxWCharBuffer& src)
93 {
94 m_wcs = src.m_wcs;
95 // no reference count yet...
96 ((wxWCharBuffer*)&src)->m_wcs = (wchar_t *)NULL;
97 }
98 wxWCharBuffer& operator=(const wxWCharBuffer& src)
99 {
100 m_wcs = src.m_wcs;
101 // no reference count yet...
102 ((wxWCharBuffer*)&src)->m_wcs = (wchar_t *)NULL;
103 return *this;
104 }
105
106 operator const wchar_t *() const { return m_wcs; }
107
108 private:
109 wchar_t *m_wcs;
110 };
111
112 #if wxUSE_UNICODE
113 #define wxMB2WXbuf wxWCharBuffer
114 #define wxWX2MBbuf wxCharBuffer
115 #define wxWC2WXbuf wxChar*
116 #define wxWX2WCbuf wxChar*
117 #else
118 #define wxMB2WXbuf wxChar*
119 #define wxWX2MBbuf wxChar*
120 #define wxWC2WXbuf wxCharBuffer
121 #define wxWX2WCbuf wxWCharBuffer
122 #endif
123
124 // ----------------------------------------------------------------------------
125 // template class for any kind of data
126 // ----------------------------------------------------------------------------
127
128 // TODO
129
130 #endif // _WX_BUFFER_H