1 /* 2 * Copyright 2006 Adrian Thurston <thurston@complang.org> 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 _SPLITCODEGEN_H 23 #define _SPLITCODEGEN_H 24 25 #include "csipgoto.h" 26 27 class CSharpSplitCodeGen : public CSharpIpGotoCodeGen 28 { 29 public: CSharpSplitCodeGen(ostream & out)30 CSharpSplitCodeGen( ostream &out ) : CSharpFsmCodeGen(out), CSharpIpGotoCodeGen(out) {} 31 32 bool ptOutLabelUsed; 33 34 std::ostream &PART_MAP(); 35 std::ostream &EXIT_STATES( int partition ); 36 std::ostream &PART_TRANS( int partition ); 37 std::ostream &TRANS_GOTO( RedTransAp *trans, int level ); 38 void GOTO_HEADER( RedStateAp *state, bool stateInPartition ); 39 std::ostream &STATE_GOTOS( int partition ); 40 std::ostream &PARTITION( int partition ); 41 std::ostream &ALL_PARTITIONS(); 42 void writeData(); 43 void writeExec(); 44 void writeParts(); 45 46 void setLabelsNeeded( RedStateAp *fromState, GenInlineList *inlineList ); 47 void setLabelsNeeded( RedStateAp *fromState, RedTransAp *trans ); 48 void setLabelsNeeded(); 49 50 int currentPartition; 51 }; 52 53 #endif 54