54 lines
1.1 KiB
C++
54 lines
1.1 KiB
C++
#ifndef DOMAIN_FUNCTION_VALIDATOR_H
|
|
#define DOMAIN_FUNCTION_VALIDATOR_H
|
|
|
|
#include<functional>
|
|
#include<vector>
|
|
|
|
#include "value.h"
|
|
|
|
namespace domain {
|
|
|
|
class FunctionValidator {
|
|
private:
|
|
std::string name;
|
|
std::vector<Value::ValueType> signature;
|
|
|
|
protected:
|
|
FunctionValidator(std::string name, std::vector<Value::ValueType> signature) {
|
|
this->name = name;
|
|
this->signature = signature;
|
|
}
|
|
|
|
public:
|
|
|
|
std::string getName() {
|
|
return name;
|
|
}
|
|
|
|
std::vector<Value::ValueType> getSignature() {
|
|
return signature;
|
|
}
|
|
|
|
bool validateSignature(std::vector<Value> signature) {
|
|
if(this->signature.size() != signature.size()) {
|
|
return false;
|
|
}
|
|
|
|
for(int i=0; i<this->signature.size(); i++) {
|
|
if(this->signature[i] != signature[i].getType()) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
virtual bool validate(std::vector<Value> values) = 0;
|
|
virtual void clear() = 0;
|
|
};
|
|
|
|
std::vector<FunctionValidator*> getSupportedValidators();
|
|
|
|
} // namespace domain
|
|
|
|
#endif // DOMAIN_FUNCTION_VALIDATOR_H
|