]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/CodeTools/Source/Pccts/h/BufFileInput.cpp
More renames for Tool Packages
[mirror_edk2.git] / Tools / CodeTools / Source / Pccts / h / BufFileInput.cpp
CommitLineData
878ddf1f 1// FILE: BufFileInput.cpp\r
2// AUTHOR: Alexey Demakov (AVD) demakov@kazbek.ispras.ru\r
3// CREATION: 26-JAN-1998\r
4// DESCRIPTION: File Input Stream with lookahead for Scanner.\r
5// See file BufFileInput.h for details\r
6\r
7// Change History:\r
8//\r
9// 22-Jun-1998 assert.h -> PCCTS_ASSERT_H\r
10// string.h -> PCCTS_STRING_H\r
11//\r
12// 28-May-1998 Add virtual destructor to release buffer.\r
13//\r
14// Add dummy definition for ANTLRTokenType\r
15// to allow compilation without knowing\r
16// token type codes.\r
17//\r
18// Manfred Kogler (km@cast.uni-linz.ac.at)\r
19// (1.33MR14)\r
20//\r
21// 20-Jul-1998 MR14a - Reorder initialization list for ctor.\r
22//\r
23\r
24enum ANTLRTokenType {TER_HATES_CPP=0, SO_DO_OTHERS=9999 };\r
25\r
26#include "pcctscfg.h"\r
27#include "pccts_assert.h"\r
28#include "pccts_string.h"\r
29\r
30PCCTS_NAMESPACE_STD\r
31\r
32#include "BufFileInput.h"\r
33\r
34BufFileInput::BufFileInput( FILE *f, int buf_size )\r
35: input( f ),\r
36 buf( new int[buf_size] ),\r
37 size( buf_size ),\r
38 start( 0 ),\r
39 len( 0 )\r
40{\r
41}\r
42\r
43BufFileInput::~BufFileInput()\r
44{\r
45 delete [] buf;\r
46}\r
47\r
48int BufFileInput::nextChar( void )\r
49{\r
50 if( len > 0 )\r
51 {\r
52 // get char from buffer\r
53 int c = buf[start];\r
54\r
55 if( c != EOF )\r
56 {\r
57 start++; start %= size;\r
58 len--;\r
59 }\r
60 return c;\r
61 } else {\r
62 // get char from file\r
63 int c = getc( input );\r
64\r
65 if( c == EOF )\r
66 {\r
67 // if EOF - put it in the buffer as indicator\r
68 buf[start] = EOF;\r
69 len++;\r
70 }\r
71 return c;\r
72 }\r
73}\r
74\r
75int BufFileInput::lookahead( char* s )\r
76{\r
77 int l = strlen( s );\r
78\r
79 assert( 0 < l && l <= size );\r
80\r
81 while( len < l )\r
82 {\r
83 int c = getc( input );\r
84\r
85 buf[ (start+len) % size ] = c;\r
86\r
87 len++;\r
88\r
89 if( c == EOF ) return 0;\r
90 }\r
91\r
92 for( int i = 0; i < l; i++ )\r
93 {\r
94 if( s[i] != buf[ (start+i) % size ] ) return 0;\r
95 }\r
96 return 1;\r
97}\r
98\r
99// End of file BufFileInput.cpp\r
100\r