99c4e82d49c861d712d3382075b30635ad0533d1
[external/ragel.git] / common / buffer.h
1 /*
2  *  Copyright 2003 Adrian Thurston <thurston@cs.queensu.ca>
3  */
4
5 /*  This file is part of Ragel.
6  *
7  *  Ragel is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  * 
12  *  Ragel is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  * 
17  *  You should have received a copy of the GNU General Public License
18  *  along with Ragel; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
20  */
21
22 #ifndef _BUFFER_H
23 #define _BUFFER_H
24
25 #define BUFFER_INITIAL_SIZE 4096
26
27 /* An automatically grown buffer for collecting tokens. Always reuses space;
28  * never down resizes. */
29 struct Buffer
30 {
31         Buffer()
32         {
33                 data = (char*) malloc( BUFFER_INITIAL_SIZE );
34                 allocated = BUFFER_INITIAL_SIZE;
35                 length = 0;
36         }
37         ~Buffer() { free(data); }
38
39         void append( char p )
40         {
41                 if ( length == allocated ) {
42                         allocated *= 2;
43                         data = (char*) realloc( data, allocated );
44                 }
45                 data[length++] = p;
46         }
47                 
48         void clear() { length = 0; }
49
50         char *data;
51         int allocated;
52         int length;
53 };
54
55 #endif /* _BUFFER_H */