diff options
author | Tom Stellard <tstellar@gmail.com> | 2011-01-04 19:39:08 -0800 |
---|---|---|
committer | Tom Stellard <tstellar@gmail.com> | 2011-01-04 19:39:08 -0800 |
commit | e5ab0c159565b9f012ff00f3b5471b02bd7ee4eb (patch) | |
tree | cfba8b9db1c7233557801a3e69e5744744d06df6 | |
parent | c8365d7ec42498b1eeab9ea0ded84fda7b22fe76 (diff) |
Add sat_instruction
-rw-r--r-- | evaluator.cpp | 23 | ||||
-rw-r--r-- | evaluator.h | 8 | ||||
-rw-r--r-- | instruction.cpp | 4 | ||||
-rw-r--r-- | instruction.h | 5 |
4 files changed, 40 insertions, 0 deletions
diff --git a/evaluator.cpp b/evaluator.cpp index 2741d84..c61b116 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -144,3 +144,26 @@ sub_evaluator::evaluate( } return new float_value(l->m_value - r->m_value); } + +sat_evaluator::sat_evaluator() : + evaluator("SAT") + { } + +value * +sat_evaluator::evaluate( + float_value * l, + float_value * r) +{ + float val; + if (!l || !l->m_has_value) { + return default_evaluate(l, r); + } + val = l->m_value; + if (val < 0.0f) { + val = 0.0f; + } + if (val > 1.0f) { + val = 1.0f; + } + return new float_value(val); +} diff --git a/evaluator.h b/evaluator.h index 2b3f682..cd90765 100644 --- a/evaluator.h +++ b/evaluator.h @@ -64,4 +64,12 @@ public: float_value * l, float_value * r); }; + +class sat_evaluator : public evaluator { +public: + sat_evaluator(); + value * evaluate( + float_value * l, + float_value * r); +}; #endif //EVALUATOR_H_ diff --git a/instruction.cpp b/instruction.cpp index 52dc8ba..5787c21 100644 --- a/instruction.cpp +++ b/instruction.cpp @@ -123,3 +123,7 @@ abs_instruction::abs_instruction(std::vector<register_address> dst) : sub_instruction::sub_instruction(std::vector<register_address> dst) : instruction("SUB", new sub_evaluator(), dst, 2) { } + +sat_instruction::sat_instruction(std::vector<register_address> dst) : + instruction("SAT", new sat_evaluator(), dst, 1) + { } diff --git a/instruction.h b/instruction.h index 13bf4de..cded5ca 100644 --- a/instruction.h +++ b/instruction.h @@ -73,4 +73,9 @@ public: sub_instruction(std::vector<register_address> dst); }; +class sat_instruction : public instruction { +public: + sat_instruction(std::vector<register_address> dst); +}; + #endif //INSTRUCTION_H_ |