85 std::vector<DataObject> inputs,
86 std::vector<SimValue*>& outputs,
88 std::string& result) {
91 result =
"wrong number of arguments";
100 for (std::size_t i = 0; i < outputs.size(); ++i) {
101 io_[i] = outputs.at(i);
125 std::string& result) {
127 bool is_int = value.find(
".") == string::npos &&
128 value.find(
'e') == string::npos;
129 bool is_float = !is_int &&
130 (value.find(
"f") != string::npos ||
131 value.find(
"F") != string::npos);
132 bool is_half = value.find(
".") != string::npos &&
133 (value.find(
"h") != string::npos ||
134 value.find(
"H") != string::npos);
137 if (value.size() > 2 && value[0] ==
'0' && value[1] ==
'x') {
139 }
else if (is_int && !is_float) {
141 }
else if (is_float) {
143 }
else if (is_half) {
150 result =
"illegal operand value \"" + value +
"\"";
168 std::vector<DataObject> inputs,
169 std::vector<SimValue*>& outputs,
170 std::string& result) {
172 for (
size_t i = 0; i < inputs.size(); i++) {
175 string value = inputs[i].stringValue();
181 outputs.push_back(sim);
186 outputs.push_back(result);
static SLongWord toLong(const T &source)
static float toFloat(const T &source)
static double toDouble(const T &source)
std::string errorMessage() const
virtual int width() const
virtual ~OperationSimulator()
static OperationSimulator * instance_
Unique instance.
bool initializeOutputs(Operation &op, std::vector< DataObject > inputs, std::vector< SimValue * > &outputs, std::string &result)
static OperationSimulator & instance()
bool simulateTrigger(Operation &op, std::vector< DataObject > inputs, std::vector< SimValue * > &outputs, OperationContext &context, std::string &result)
bool initializeSimValue(std::string value, SimValue *sim, std::string &result)
virtual Operand & output(int index) const
virtual Operand & input(int index) const
virtual bool simulateTrigger(SimValue **, OperationContext &context) const
virtual int numberOfInputs() const
virtual int numberOfOutputs() const