1 #ifndef INC_TokenStreamRewriteEngine_hpp__
2 #define INC_TokenStreamRewriteEngine_hpp__
25 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
81 static const
char* DEFAULT_PROGRAM_NAME;
82 #ifndef NO_STATIC_CONSTS
88 PROGRAM_INIT_SIZE = 100
94 template <
typename T>
void operator() (
const T& t ) {
103 : index(idx), text(txt)
107 virtual ~RewriteOperation()
119 virtual const char*
type()
const {
120 return "RewriteOperation";
130 void operator () ( RewriteOperation* t ) {
144 : RewriteOperation(index, text)
153 virtual const char*
type()
const {
154 return "InsertBeforeOp";
162 : RewriteOperation(from,text)
171 virtual const char*
type()
const {
184 virtual const char*
type()
const {
196 rollback(DEFAULT_PROGRAM_NAME, instructionIndex);
204 size_t instructionIndex );
207 deleteProgram(DEFAULT_PROGRAM_NAME);
212 rollback(programName, MIN_TOKEN_INDEX);
218 insertAfter(DEFAULT_PROGRAM_NAME, t, text);
222 insertAfter(DEFAULT_PROGRAM_NAME, index, text);
229 insertAfter(programName, t->getIndex(), text);
237 insertBefore(programName,index+1, text);
244 insertBefore(DEFAULT_PROGRAM_NAME, t, text);
248 insertBefore(DEFAULT_PROGRAM_NAME, index, text);
255 insertBefore(programName, t->getIndex(), text);
262 addToSortedRewriteList(programName,
new InsertBeforeOp(index,text));
267 replace(DEFAULT_PROGRAM_NAME, index, index, text);
270 void replace(
size_t from,
size_t to,
273 replace(DEFAULT_PROGRAM_NAME, from, to, text);
279 replace(DEFAULT_PROGRAM_NAME, indexT->getIndex(), indexT->getIndex(), text);
286 replace(DEFAULT_PROGRAM_NAME, from, to, text);
290 size_t from,
size_t to,
293 addToSortedRewriteList(programName,
new ReplaceOp(from, to, text));
307 void remove(
size_t index) {
308 remove(DEFAULT_PROGRAM_NAME, index, index);
311 void remove(
size_t from,
size_t to) {
312 remove(DEFAULT_PROGRAM_NAME, from, to);
316 remove(DEFAULT_PROGRAM_NAME, indexT, indexT);
320 remove(DEFAULT_PROGRAM_NAME, from, to);
324 size_t from,
size_t to)
326 replace(programName,from,to,
"");
332 replace(programName,from,to,
"");
336 discardMask.add(ttype);
345 return tokens.size();
353 size_t start,
size_t end )
const;
356 toStream( out, MIN_TOKEN_INDEX, getTokenStreamSize());
362 toStream( out, programName, MIN_TOKEN_INDEX, getTokenStreamSize());
366 size_t start,
size_t end )
const
368 toStream(out, DEFAULT_PROGRAM_NAME, start, end);
373 size_t firstToken,
size_t lastToken )
const;
376 toDebugStream( out, MIN_TOKEN_INDEX, getTokenStreamSize());
380 size_t start,
size_t end )
const;
383 return getLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME);
391 program_map::const_iterator rewrites = programs.find(programName);
393 if( rewrites == programs.end() )
396 const operation_list& prog = rewrites->second;
399 operation_list::const_iterator last = prog.end();
401 return (*last)->getIndex();
410 addToSortedRewriteList(DEFAULT_PROGRAM_NAME, op);
414 RewriteOperation* op );
435 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE