1/* 2 * Copyright 2014, Rene Gollent, rene@gollent.com. 3 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 4 * Distributed under the terms of the MIT License. 5 */ 6#ifndef EXPRESSION_VALUES_H 7#define EXPRESSION_VALUES_H 8 9 10#include <String.h> 11 12#include <Referenceable.h> 13#include <util/OpenHashTable.h> 14#include <Variant.h> 15 16 17class FunctionID; 18class Thread; 19 20 21class ExpressionValues : public BReferenceable { 22public: 23 ExpressionValues(); 24 ExpressionValues(const ExpressionValues& other); 25 // throws std::bad_alloc 26 virtual ~ExpressionValues(); 27 28 status_t Init(); 29 30 bool GetValue(FunctionID* function, 31 Thread* thread, 32 const BString* expression, 33 BVariant& _value) const; 34 inline bool GetValue(FunctionID* function, 35 Thread* thread, 36 const BString& expression, 37 BVariant& _value) const; 38 bool HasValue(FunctionID* function, 39 Thread* thread, 40 const BString* expression) const; 41 inline bool HasValue(FunctionID* function, 42 Thread* thread, 43 const BString& expression) const; 44 status_t SetValue(FunctionID* function, 45 Thread* thread, 46 const BString& expression, 47 const BVariant& value); 48 49private: 50 struct Key; 51 struct ValueEntry; 52 struct ValueEntryHashDefinition; 53 54 typedef BOpenHashTable<ValueEntryHashDefinition> ValueTable; 55 56private: 57 ExpressionValues& operator=(const ExpressionValues& other); 58 59 void _Cleanup(); 60 61private: 62 ValueTable* fValues; 63}; 64 65 66bool 67ExpressionValues::GetValue(FunctionID* function, Thread* thread, 68 const BString& expression, BVariant& _value) const 69{ 70 return GetValue(function, thread, &expression, _value); 71} 72 73 74bool 75ExpressionValues::HasValue(FunctionID* function, Thread* thread, 76 const BString& expression) const 77{ 78 return HasValue(function, thread, &expression); 79} 80 81 82#endif // EXPRESSION_VALUES_H 83