00001
00002
00003 #ifndef EXPR_H
00004 #define EXPR_H
00005
00006 #include "CliArgList.h"
00007 #include "AData.h"
00008
00009 #include "Serializable.h"
00010
00011
00018 class Expr: public Serializable {
00019 public:
00021 virtual void eval(CliArgList *loop_vars, AData *return_value)=0;
00023 CliArgList *substitute_vars(CliArgList *loop_vars, CliArgList *args);
00025 AData *substitute_variable(CliArgList *loop_vars, AData *var);
00029 AData *substitute_arrayelement(CliArgList *loop_vars, AData *var);
00030
00031
00032 protected:
00033 Expr() {}
00034 private:
00035 friend class boost::serialization::access;
00036 template<class Archive>
00037 void serialize(Archive & ar, const unsigned int version) {
00038 this->pre_serialize(ar, version);
00039 try {
00040 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable);
00041 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00042 }
00043 this->post_serialize(ar, version);
00044 }
00045
00046 };
00047
00048 #if BOOST_VERSION <= 103500
00049 BOOST_IS_ABSTRACT(Expr);
00050 #else
00051 BOOST_SERIALIZATION_ASSUME_ABSTRACT(Expr);
00052 #endif
00053
00054 BIE_CLASS_EXPORT_KEY(Expr)
00055 #endif