Beispiel #1
0
 template<class T0,class T1, class T2> BOOST_FORCEINLINE
 result_type eval_at(const T0& a0,const T1& a1,const T2& a2) const
 {
   return l_and( ge( a0, splat<base_t>(a2))
               , lt( a0, splat<base_t>(a2+a1))
               );
 }
Beispiel #2
0
 template<class N> BOOST_FORCEINLINE result_type
 eval(const A0& a0,const A1& a1,const A2& a2, N const&) const
 {
   return l_and( eval(a0,a1,a2, boost::mpl::int_<N::value-1>())
               , eval_at ( boost::fusion::at_c<N::value>(a0)
                         , boost::fusion::at_c<N::value>(a1)
                         , boost::fusion::at_c<N::value>(a2)
                         )
               );
 }
Beispiel #3
0
void emit(int tt, unsigned int tval)
{
  if(tt == UNKNOWN)
    error("Unknown token");
  else if(tt == DONE)
    error("Unexpected end of expression");
  else if(tt == NONE)
    error("No token in expression");
  else if(tt == EOS)
    error("End of string in expression");
  else if(tt == NUM)
    push(tt, tval);
  else if(tt == STRING) {
    if(tval <= 0)
      error("Unrecognized expression");
    else
      push(tt, tval);
  }
  else {
    /* apply operator */
    switch(tt) {
      case 1:  l_orr();      break;
      case 2:  l_and();      break;
      case 3:  b_orr();      break;
      case 4:  b_xor();      break;
      case 5:  b_and();      break;
      case 6:  l_equ();      break;
      case 7:  l_neq();      break;
      case 8:  l_leq();      break;
      case 9:  l_geq();      break;
      case 10: l_ltt();      break;
      case 11: l_gtt();      break;
      case 12: lshift();     break;
      case 13: l_rshift();   break;
      case 14: rshift();     break;
      case 15: plus();       break;
      case 16: minus();      break;
      case 17: multiply();   break;
      case 18: divide();     break;
      case 19: modulo();     break;
      case 20: l_not();      break;
      case 21: b_not();      break;
      case 22: unaryminus(); break;
      case 23: unaryplus();  break;
      default:
        error("Unknown operator");
    }
  }
}