New plugins system
[opsoft.git] / gclib2 / modules / Core / Buf.cxx
blob43deec8320974fa5da193d1942c5fd9132fccf81
1 /*
2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
4 *
5 */
7 #include <string.h>
8 #include <Macroses.h>
9 #include <Buf.h>
11 void buf_free (void * ptr)
13 Buf * b;
14 b = (Buf *) ptr;
15 if (b)
16 delete b;
19 Buf::Buf ()
23 Buf::Buf (int len)
25 char * m_buf;
26 m_buf = CNEW (char, len);
27 init (m_buf, len);
30 Buf::Buf (char * ptr, int len)
32 init (ptr, len);
35 Buf::~Buf ()
37 delete begin;
40 char * Buf::seek (int offset, int whence)
42 switch (whence) {
43 case SEEK_SET:
44 carret = &begin[offset];
45 break;
47 case SEEK_CUR:
48 carret = &carret[offset];
49 break;
51 case SEEK_END:
52 carret = &end[offset];
53 break;
56 check (carret, 1);
57 return carret;
60 int Buf::available ()
62 return end - carret;
65 char * Buf::position ()
67 return carret;
70 Buf * Buf::shift (int count)
72 Buf * b;
73 char * ptr;
75 if (count <= 0)
76 return NULL;
78 b = new Buf (count);
79 memcpy (b->data (), begin, count);
80 carret += count;
82 count = available ();
83 ptr = CNEW (char, count);
84 memcpy (ptr, carret, count);
86 DROP (begin);
87 begin = ptr;
88 end = &ptr[count];
89 carret = begin;
91 return b;
94 int Buf::unshift (Buf * m_buf)
96 int len1;
97 int len2;
98 char * ptr;
99 char * buf;
101 if (! m_buf)
102 return len ();
104 len1 = len ();
105 len2 = m_buf->len ();
106 buf = CNEW (char, len1+len2);
108 ptr = buf;
109 memcpy (ptr,m_buf->data (), len2);
110 ptr += len2;
111 memcpy (ptr, data (), len1);
113 DROP (begin);
114 begin = buf;
115 end = &begin[len1 + len2];
116 carret = begin;
118 return len1 + len2;
121 char * Buf::readString ()
123 char * ptr;
124 char * Ret = 0;
126 ptr = ch (carret, '\0');
127 if (! ptr)
128 return NULL;
129 Ret = strdup (carret);
130 set_pos (++ptr);
132 return Ret;
135 bool Buf::operator == (Buf * m_buf)
137 char * ptr;
138 char * ptr2;
139 int len1;
140 int len2;
142 if (! m_buf)
143 return false;
145 ptr = data ();
146 ptr2 = m_buf->data ();
147 len1 = len ();
148 len2 = m_buf->len ();
150 if (len1 != len2)
151 return false;
153 if (! memcmp (ptr, ptr2, len1))
154 return true;
156 return false;
159 bool Buf::operator != (Buf * m_buf)
161 return !(*this == m_buf);