00001
00002 #ifndef ANAPHE_COMPILED_EXPRESSION_MANAGER
00003 #define ANAPHE_COMPILED_EXPRESSION_MANAGER 1
00004
00005 #include "IFilterExpressionBase.h"
00006 #include "IEvaluatorExpressionBase.h"
00007 #include <memory>
00008 #include <map>
00009 #include <set>
00010
00011 namespace Anaphe {
00012 namespace AIDA_Tuple_native {
00013 class ExpressionParser;
00014 class SymbolManager;
00015
00016 class CompiledExpressionManager {
00017 public:
00019 CompiledExpressionManager();
00021 ~CompiledExpressionManager();
00022
00024 std::auto_ptr<IFilterExpressionBase> createFilterExpression( const std::string& expression,
00025 const std::map<std::string, std::string>& variableTypes,
00026 std::set<std::string>& variablesUsed );
00027
00029 std::auto_ptr<IEvaluatorExpressionBase> createEvaluatorExpression( const std::string& expression,
00030 const std::map<std::string, std::string>& variableTypes,
00031 std::set<std::string>& variablesUsed );
00032
00034 static const int defaultCacheSizeForFilterObjects = 100;
00035 static const int defaultCacheSizeForEvaluatorObjects = 100;
00036
00038 int cacheSizeForFilterObjects();
00039 int cacheSizeForEvaluatorObjects();
00040 void setCacheSizeForFilterObjects( int cacheSize );
00041 void setCacheSizeForEvaluatorObjects( int cacheSize );
00042
00043 private:
00044 int m_cacheSizeForFilterObjects;
00045 int m_cacheSizeForEvaluatorObjects;
00046 SymbolManager* m_symbolManager;
00047 ExpressionParser* m_expressionParser;
00048
00049 std::map<std::string, IFilterExpressionBaseFactory*> m_filterFactories;
00050 std::map<std::string, int> m_filterFactoryUsage;
00051 std::map<std::string, std::set<std::string> > m_filterFactoryVariables;
00052 std::map<std::string, IEvaluatorExpressionBaseFactory*> m_evaluatorFactories;
00053 std::map<std::string, int> m_evaluatorFactoryUsage;
00054 std::map<std::string, std::set<std::string> > m_evaluatorFactoryVariables;
00055 };
00056
00057 }
00058 }
00059
00060 #endif