Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/ChargeExchangeMC/include/CexmcAST.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 /*
 27  * =============================================================================
 28  *
 29  *       Filename:  CexmcAST.hh
 30  *
 31  *    Description:  abstract syntax tree for custom filter scripting language
 32  *
 33  *        Version:  1.0
 34  *        Created:  17.07.2010 14:39:37
 35  *       Revision:  none
 36  *       Compiler:  gcc
 37  *
 38  *         Author:  Alexey Radkov (), 
 39  *        Company:  PNPI
 40  *
 41  * =============================================================================
 42  */
 43 
 44 #ifndef CEXMC_AST_HH
 45 #define CEXMC_AST_HH
 46 
 47 #ifdef CEXMC_USE_CUSTOM_FILTER
 48 
 49 #include <vector>
 50 #include <boost/variant/recursive_variant.hpp>
 51 
 52 
 53 namespace  CexmcAST
 54 {
 55     using boost::variant;
 56     using boost::recursive_wrapper;
 57 
 58     enum  OperatorType
 59     {
 60         Uninitialized,
 61         Top,
 62         UMinus,
 63         Not,
 64         Mult,
 65         Div,
 66         Plus,
 67         Minus,
 68         Less,
 69         LessEq,
 70         More,
 71         MoreEq,
 72         Eq,
 73         NotEq,
 74         And,
 75         Or
 76     };
 77 
 78 
 79     struct  Operator
 80     {
 81         Operator( OperatorType  type_ = Uninitialized, int  priority_ = 0,
 82                   bool  hasRLAssoc_ = false ) :
 83             type( type_ ), priority( priority_ ), hasRLAssoc( hasRLAssoc_ )
 84         {}
 85 
 86         OperatorType  type;
 87 
 88         int           priority;
 89 
 90         bool          hasRLAssoc;
 91     };
 92 
 93 
 94     struct  Variable
 95     {
 96         Variable() : index1( 0 ), index2( 0 ), addr( ( const int * ) NULL )
 97         {}
 98 
 99         std::string                             name;
100 
101         int                                     index1;
102 
103         int                                     index2;
104 
105         variant< const int *, const double * >  addr;
106     };
107 
108 
109     struct  Subtree;
110 
111     typedef std::string                    Function;
112 
113     typedef variant< int, double >         Constant;
114 
115     typedef variant< Variable, Constant >  Leaf;
116 
117     typedef recursive_wrapper< Subtree >   Tree;
118 
119     typedef variant< Tree, Leaf >          Node;
120 
121     typedef variant< Operator, Function >  NodeType;
122 
123 
124     struct  Subtree
125     {
126         Subtree() : type( Operator( Uninitialized ) )
127         {}
128 
129         void  Print( int  level = 0 ) const;
130 
131         void  PrintLeaf( const Leaf *  leaf, int  level = 0 ) const;
132 
133         std::vector< Node >  children;
134 
135         NodeType             type;
136 
137         static const int     printIndent = 4;
138     };
139 
140 
141     class  BasicEval
142     {
143         protected:
144             typedef variant< int, double >  ScalarValueType;
145 
146         protected:
147             virtual ~BasicEval();
148 
149         public:
150             bool  operator()( const Subtree &  ast ) const;
151 
152         protected:
153             ScalarValueType          GetScalarValue( const Node &  node ) const;
154 
155             virtual ScalarValueType  GetFunScalarValue( const Subtree &  ast )
156                                                                         const;
157 
158             virtual ScalarValueType  GetVarScalarValue( const Variable &  var )
159                                                                         const;
160 
161             ScalarValueType          GetBasicFunScalarValue(
162                                         const Subtree &  ast, bool &  result )
163                                                                         const;
164     };
165 }
166 
167 #endif
168 
169 #endif
170 
171