PorygonLang/src/UserData/UserData.hpp

94 lines
3.4 KiB
C++
Raw Normal View History

#include <utility>
2019-06-14 12:59:38 +00:00
#ifndef PORYGONLANG_USERDATA_HPP
#define PORYGONLANG_USERDATA_HPP
#include <utility>
#include <unordered_map>
#include "UserDataField.hpp"
#include "UserDataOperation.hpp"
2019-06-14 12:59:38 +00:00
namespace Porygon::UserData {
class UserData {
std::unordered_map<uint32_t, UserDataField *> _fields;
// Binary operations
UserDataBinaryOperation* _addition = nullptr;
UserDataBinaryOperation* _subtraction = nullptr;
UserDataBinaryOperation* _multiplication = nullptr;
UserDataBinaryOperation* _division = nullptr;
UserDataBinaryOperation* _equality = nullptr;
UserDataBinaryOperation* _inequality = nullptr;
UserDataBinaryOperation* _lessThen = nullptr;
UserDataBinaryOperation* _lessThenEqual = nullptr;
UserDataBinaryOperation* _greaterThen = nullptr;
UserDataBinaryOperation* _greaterThenEqual = nullptr;
UserDataBinaryOperation* _logicalAnd = nullptr;
UserDataBinaryOperation* _logicalOr = nullptr;
UserDataBinaryOperation* _concatenation = nullptr;
public:
explicit UserData(std::unordered_map<uint32_t, UserDataField *> fields)
: _fields(std::move(fields))
{
}
~UserData(){
for (auto f: _fields){
delete f.second;
}
delete _addition;
delete _subtraction;
delete _multiplication;
delete _division;
delete _equality;
delete _inequality;
delete _lessThen;
delete _lessThenEqual;
delete _greaterThen;
delete _greaterThenEqual;
delete _logicalAnd;
delete _logicalOr;
delete _concatenation;
}
bool ContainsField(uint32_t fieldId) const{
return _fields.find(fieldId) != _fields.end();
}
UserDataField *GetField(uint32_t fieldId) const {
return _fields.at(fieldId);
}
void CreateField(uint32_t fieldId, UserDataField *field) {
_fields.insert({fieldId, field});
}
int32_t GetFieldCount() const{
return _fields.size();
}
UserDataBinaryOperation* GetBinaryOperation(Binder::BoundBinaryOperation op){
switch (op){
case Binder::BoundBinaryOperation::Addition: return _addition;
case Binder::BoundBinaryOperation::Subtraction: return _subtraction;
case Binder::BoundBinaryOperation::Multiplication: return _multiplication;
case Binder::BoundBinaryOperation::Division: return _division;
case Binder::BoundBinaryOperation::Equality: return _equality;
case Binder::BoundBinaryOperation::Inequality: return _inequality;
case Binder::BoundBinaryOperation::LessThan: return _lessThen;
case Binder::BoundBinaryOperation::LessThanEquals: return _lessThenEqual;
case Binder::BoundBinaryOperation::GreaterThan: return _greaterThen;
case Binder::BoundBinaryOperation::GreaterThanEquals: return _greaterThenEqual;
case Binder::BoundBinaryOperation::LogicalAnd: return _logicalAnd;
case Binder::BoundBinaryOperation::LogicalOr: return _logicalOr;
case Binder::BoundBinaryOperation::Concatenation: return _concatenation;
}
}
};
}
2019-06-14 12:59:38 +00:00
#endif //PORYGONLANG_USERDATA_HPP