Started on the move back to a single executable. The backend programs are now a
[ragel.git] / rlgen-cd / splitcodegen.h
blobabba1abdd2781b19aeed53078b360ddc9383ded4
1 /*
2 * Copyright 2006 Adrian Thurston <thurston@cs.queensu.ca>
3 */
5 /* This file is part of Ragel.
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.
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.
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
22 #ifndef _SPLITCODEGEN_H
23 #define _SPLITCODEGEN_H
25 #include "ipgotocodegen.h"
27 class SplitCodeGen : public IpGotoCodeGen
29 public:
30 SplitCodeGen( ostream &out ) : FsmCodeGen(out), IpGotoCodeGen(out) {}
32 bool ptOutLabelUsed;
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();
46 void setLabelsNeeded( RedStateAp *fromState, GenInlineList *inlineList );
47 void setLabelsNeeded( RedStateAp *fromState, RedTransAp *trans );
48 void setLabelsNeeded();
50 int currentPartition;
53 struct CSplitCodeGen
54 : public SplitCodeGen, public CCodeGen
56 CSplitCodeGen( ostream &out ) :
57 FsmCodeGen(out), SplitCodeGen(out), CCodeGen(out) {}
61 * class DIpGotoCodeGen
63 struct DSplitCodeGen
64 : public SplitCodeGen, public DCodeGen
66 DSplitCodeGen( ostream &out ) :
67 FsmCodeGen(out), SplitCodeGen(out), DCodeGen(out) {}
71 #endif /* _SPLITCODEGEN_H */