source: to-imperative/branches/alternative_call_macros/samples/select.cc @ 475

Last change on this file since 475 was 475, checked in by orlov, 18 years ago
  • Branch: alternative_call_macros. Another example.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.8 KB
Line 
1#include <rf_core.hh>
2#include <refal/StdIO.hh>
3
4namespace refal
5{
6
7using namespace rfrt;
8
9namespace select
10{
11
12RF_DECL (Main);
13
14RF_DECL (MkArg);
15
16RF_DECL (Select);
17
18RF_DECL (OneOf);
19
20}
21
22
23namespace select
24{
25
26RF_FUNC (Main, (), (RF_RES _v_res1))
27  Expr _v_MkArg1;
28  RF_CALL_NOFAIL (MkArg, ("1234567890a"), (_v_MkArg1));
29  Expr _v_ePrefixes;
30  _v_ePrefixes = _v_MkArg1;
31  RF_CALL_NOFAIL (StdIO::PrintLN, (_v_ePrefixes), ());
32  Expr _v_Select1;
33  RF_CALL_NOFAIL (Select, (empty, _v_ePrefixes), (_v_Select1));
34  Expr _v_eXs_m_or_m_sFail;
35  _v_eXs_m_or_m_sFail = _v_Select1;
36  RF_CALL_NOFAIL (StdIO::PrintLN, (_v_eXs_m_or_m_sFail), ());
37  _v_res1 = empty;
38  return true;
39RF_END
40
41RF_FUNC (MkArg, (RF_ARG _v_eString), (RF_RES _v_res1))
42  {
43    {
44      int _v_leneString_m__m_;
45      _v_leneString_m__m_ = (((int) _v_eString.get_len ()) - (1));
46      if (((_v_leneString_m__m_) >= (((1) * (0)))) && !((_v_leneString_m__m_) % (1)))
47      {
48        if (_v_eString.symbol_at (((_v_leneString_m__m_) / (1))))
49        {
50          Expr _v_eString_m__m_ (_v_eString, 0, ((_v_leneString_m__m_) / (1)));
51          Expr _v_s_e__e_tmp_m_selectrf_m_18_m_19 (_v_eString, ((_v_leneString_m__m_) / (1)), 1);
52          Expr _v_MkArg1;
53          RF_CALL_NOFAIL (MkArg, (_v_eString_m__m_), (_v_MkArg1));
54          _v_res1 = _v_eString () + _v_MkArg1;
55          return true;
56        }
57      }
58      goto LBranch1;
59    }
60  LBranch1: {}
61    {
62      if ((((int) _v_eString.get_len ()) == (0)))
63      {
64        _v_res1 = empty;
65        return true;
66      }
67      goto LBranch2;
68    }
69  LBranch2: {}
70    error ("Unexpected fail");
71  }
72LBlock1: {}
73  return true;
74RF_END
75
76RF_FUNC (Select, (RF_ARG _v_eXs, _v_eSets), (RF_RES _v_res1))
77  {
78    {
79      if ((((int) _v_eSets.get_len ()) == (0)))
80      {
81        _v_res1 = _v_eXs ();
82        return true;
83      }
84      goto LBranch1;
85    }
86  LBranch1: {}
87    {
88      int _v_leneSets_m__m_;
89      _v_leneSets_m__m_ = (((int) _v_eSets.get_len ()) - (1));
90      if (((_v_leneSets_m__m_) >= (((1) * (0)))) && !((_v_leneSets_m__m_) % (1)))
91      {
92        if (!_v_eSets.symbol_at (0))
93        {
94          Expr _v_lderefeSets1 (_v_eSets, 0);
95          int _v_leneSet;
96          _v_leneSet = (((int) _v_lderefeSets1.get_len ()) - (0));
97          if (((_v_leneSet) >= (((1) * (0)))) && !((_v_leneSet) % (1)))
98          {
99            int _v_mine_e__e_tmp_m_selectrf_m_27_m_17;
100            _v_mine_e__e_tmp_m_selectrf_m_27_m_17 = pxx_max (0, ((((((_v_leneSet) / (1))) - (1 + ((((((_v_leneSet) / (1))) - (1 + 0))) / (1))))) / (1)));
101            if (((_v_mine_e__e_tmp_m_selectrf_m_27_m_17) <= (((((((_v_leneSet) / (1))) - (1 + 0))) / (1)))))
102            {
103              int _v_mine_e__e_tmp_m_selectrf_m_27_m_22;
104              _v_mine_e__e_tmp_m_selectrf_m_27_m_22 = pxx_max (0, ((((((_v_leneSet) / (1))) - (1 + ((((((_v_leneSet) / (1))) - (1 + 0))) / (1))))) / (1)));
105              if (((_v_mine_e__e_tmp_m_selectrf_m_27_m_22) <= (((((((_v_leneSet) / (1))) - (1 + 0))) / (1)))))
106              {
107                Expr _v_eSet (_v_lderefeSets1, 0, ((_v_leneSet) / (1)));
108                lsplit (_v_eSet, _v_mine_e__e_tmp_m_selectrf_m_27_m_17, _v_e_e__e_tmp_m_selectrf_m_27_m_17, _v_lspliteSet1);
109                {
110                  for ( ; ; iter(_v_eSet)++)
111                  {
112                    int _v_lene_e__e_tmp_m_selectrf_m_27_m_22;
113                    _v_lene_e__e_tmp_m_selectrf_m_27_m_22 = (((int) _v_lspliteSet1.get_len ()) - (1));
114                    if (((_v_lene_e__e_tmp_m_selectrf_m_27_m_22) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_27_m_22) % (1)))
115                    {
116                      if (_v_lspliteSet1.symbol_at (0))
117                      {
118                        Expr _v_eSets_m__m_ (_v_eSets, 1, ((_v_leneSets_m__m_) / (1)));
119                        Expr _v_sX (_v_lspliteSet1, 0, 1);
120                        Expr _v_e_e__e_tmp_m_selectrf_m_27_m_22 (_v_lspliteSet1, 1, ((_v_lene_e__e_tmp_m_selectrf_m_27_m_22) / (1)));
121                        Expr _v_OneOf1;
122                        RF_CALL_NOFAIL (OneOf, (_v_eXs, _v_sX), (_v_OneOf1));
123                        if (((1) == (1)))
124                        {
125                          if (_v_OneOf1.symbol_at (0))
126                          {
127                            Expr _v_constwordF ("F");
128                            if (Expr::flat_eq (_v_constwordF, 0, _v_OneOf1, 0, 1))
129                            {
130                              Expr _v_Select1;
131                              RF_CALL_NOFAIL (Select, (_v_eXs + _v_sX, _v_eSets_m__m_), (_v_Select1));
132                              if ((((int) _v_Select1.get_len ()) == (1)))
133                              {
134                                if (!_v_Select1.symbol_at (0))
135                                {
136                                  Expr _v_lderefSelect11 (_v_Select1, 0);
137                                  int _v_leneXs_m_;
138                                  _v_leneXs_m_ = (((int) _v_lderefSelect11.get_len ()) - (0));
139                                  if (((_v_leneXs_m_) >= (((1) * (0)))) && !((_v_leneXs_m_) % (1)))
140                                  {
141                                    Expr _v_eXs_m_ (_v_lderefSelect11, 0, ((_v_leneXs_m_) / (1)));
142                                    _v_res1 = _v_eXs_m_ ();
143                                    return true;
144                                  }
145                                }
146                              }
147                              goto LForCont1;
148                            }
149                          }
150                        }
151                        goto LForCont1;
152                      }
153                      goto LForCont1;
154                    }
155                    goto LForBreak1;
156                LForCont1: {}
157                  }
158                }
159              LForBreak1: {}
160              }
161            }
162          }
163        }
164      }
165      goto LBranch2;
166    }
167  LBranch2: {}
168    {
169      int _v_lene_e__e_tmp_m_selectrf_m_31_m_6;
170      _v_lene_e__e_tmp_m_selectrf_m_31_m_6 = (((int) _v_eSets.get_len ()) - (0));
171      if (((_v_lene_e__e_tmp_m_selectrf_m_31_m_6) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_31_m_6) % (1)))
172      {
173        Expr _v_e_e__e_tmp_m_selectrf_m_31_m_6 (_v_eSets, 0, ((_v_lene_e__e_tmp_m_selectrf_m_31_m_6) / (1)));
174        Expr _v_constchars_p_ ("+");
175        _v_res1 = _v_constchars_p_;
176        return true;
177      }
178      goto LBranch3;
179    }
180  LBranch3: {}
181    error ("Unexpected fail");
182  }
183LBlock1: {}
184  return true;
185RF_END
186
187RF_FUNC (OneOf, (RF_ARG _v_eXs, _v_sX), (RF_RES _v_res1))
188  {
189    {
190      int _v_mine_e__e_tmp_m_selectrf_m_36_m_6;
191      _v_mine_e__e_tmp_m_selectrf_m_36_m_6 = pxx_max (0, (((((int) _v_eXs.get_len ()) - (1 + (((((int) _v_eXs.get_len ()) - (1 + 0))) / (1))))) / (1)));
192      if (((_v_mine_e__e_tmp_m_selectrf_m_36_m_6) <= ((((((int) _v_eXs.get_len ()) - (1 + 0))) / (1)))))
193      {
194        int _v_mine_e__e_tmp_m_selectrf_m_36_m_11;
195        _v_mine_e__e_tmp_m_selectrf_m_36_m_11 = pxx_max (0, (((((int) _v_eXs.get_len ()) - (1 + (((((int) _v_eXs.get_len ()) - (1 + 0))) / (1))))) / (1)));
196        if (((_v_mine_e__e_tmp_m_selectrf_m_36_m_11) <= ((((((int) _v_eXs.get_len ()) - (1 + 0))) / (1)))))
197        {
198          lsplit (_v_eXs, _v_mine_e__e_tmp_m_selectrf_m_36_m_6, _v_e_e__e_tmp_m_selectrf_m_36_m_6, _v_lspliteXs1);
199          {
200            for ( ; ; iter(_v_eXs)++)
201            {
202              int _v_lene_e__e_tmp_m_selectrf_m_36_m_11;
203              _v_lene_e__e_tmp_m_selectrf_m_36_m_11 = (((int) _v_lspliteXs1.get_len ()) - (1));
204              if (((_v_lene_e__e_tmp_m_selectrf_m_36_m_11) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_36_m_11) % (1)))
205              {
206                if (_v_lspliteXs1.symbol_at (0))
207                {
208                  if (Expr::flat_eq (_v_sX, 0, _v_lspliteXs1, 0, 1))
209                  {
210                    Expr _v_e_e__e_tmp_m_selectrf_m_36_m_11 (_v_lspliteXs1, 1, ((_v_lene_e__e_tmp_m_selectrf_m_36_m_11) / (1)));
211                    Expr _v_constwordT ("T");
212                    _v_res1 = _v_constwordT;
213                    return true;
214                  }
215                }
216                goto LForCont1;
217              }
218              goto LForBreak1;
219          LForCont1: {}
220            }
221          }
222        LForBreak1: {}
223        }
224      }
225      goto LBranch1;
226    }
227  LBranch1: {}
228    {
229      int _v_lene_e__e_tmp_m_selectrf_m_38_m_6;
230      _v_lene_e__e_tmp_m_selectrf_m_38_m_6 = (((int) _v_eXs.get_len ()) - (0));
231      if (((_v_lene_e__e_tmp_m_selectrf_m_38_m_6) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_38_m_6) % (1)))
232      {
233        Expr _v_e_e__e_tmp_m_selectrf_m_38_m_6 (_v_eXs, 0, ((_v_lene_e__e_tmp_m_selectrf_m_38_m_6) / (1)));
234        Expr _v_constwordF ("F");
235        _v_res1 = _v_constwordF;
236        return true;
237      }
238      goto LBranch2;
239    }
240  LBranch2: {}
241    error ("Unexpected fail");
242  }
243LBlock1: {}
244  return true;
245RF_END
246
247}
248
249rfrt::Entry rf_entry (select::Main);
250
251}
Note: See TracBrowser for help on using the repository browser.