Small progress. Have to continue here..
This commit is contained in:
parent
223de7f190
commit
fc2744d7fa
@ -22,7 +22,7 @@ public:
|
||||
m_source_file = source_file;
|
||||
}
|
||||
|
||||
int analyze();
|
||||
virtual int analyze() = 0;
|
||||
|
||||
const std::string &get_src_file()
|
||||
{
|
||||
|
@ -11,8 +11,7 @@ class TprFrontend : public TempLangFrontend {
|
||||
private:
|
||||
public:
|
||||
TprFrontend(const std::string &source_file);
|
||||
|
||||
int analyze();
|
||||
int analyze() override;
|
||||
|
||||
};
|
||||
|
||||
|
47
tprcc/include/tpr/tpr-types.hpp
Normal file
47
tprcc/include/tpr/tpr-types.hpp
Normal file
@ -0,0 +1,47 @@
|
||||
#ifndef _TPR_TYPES_HPP_
|
||||
#define _TPR_TYPES_HPP_
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace tpr {
|
||||
|
||||
enum class CommandType {
|
||||
pid_conf,
|
||||
temp_set,
|
||||
wait_temp,
|
||||
wait_time,
|
||||
temp_ramp,
|
||||
beep,
|
||||
temp_off,
|
||||
clear_flags,
|
||||
digio_conf,
|
||||
digio_set,
|
||||
digio_wait,
|
||||
};
|
||||
|
||||
struct CommandSpec {
|
||||
CommandType type;
|
||||
std::vector<bool> param_is_whole_num;
|
||||
};
|
||||
|
||||
class TprCommand {
|
||||
private:
|
||||
static const CommandSpec m_specs[11];
|
||||
|
||||
CommandType m_type;
|
||||
std::vector<float> m_parameters;
|
||||
bool is_whole_number(float num) const;
|
||||
|
||||
public:
|
||||
TprCommand(CommandType type);
|
||||
TprCommand(CommandType type, const std::vector<float> ¶ms);
|
||||
TprCommand(CommandType type, const std::vector<float> &¶ms);
|
||||
|
||||
|
||||
bool check_command(bool print_status) const;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif /* _TPR_TYPES_HPP_ */
|
71
tprcc/src/tpr/tpr-types.cpp
Normal file
71
tprcc/src/tpr/tpr-types.cpp
Normal file
@ -0,0 +1,71 @@
|
||||
#include <cstdlib>
|
||||
#include <tpr/tpr-types.hpp>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
namespace tpr {
|
||||
|
||||
const CommandSpec TprCommand::m_specs[11] = {
|
||||
{.type = CommandType::beep, .param_is_whole_num = std::vector<bool>{true}},
|
||||
{.type = CommandType::clear_flags, .param_is_whole_num = std::vector<bool>{}},
|
||||
{.type = CommandType::digio_conf, .param_is_whole_num = std::vector<bool>{true, true}},
|
||||
{.type = CommandType::digio_set, .param_is_whole_num = std::vector<bool>{true, true}},
|
||||
{.type = CommandType::digio_wait, .param_is_whole_num = std::vector<bool>{true, true}},
|
||||
{.type = CommandType::wait_temp, .param_is_whole_num = std::vector<bool>{false}},
|
||||
{.type = CommandType::wait_time, .param_is_whole_num = std::vector<bool>{false}},
|
||||
{.type = CommandType::temp_off, .param_is_whole_num = std::vector<bool>{}},
|
||||
{.type = CommandType::temp_ramp, .param_is_whole_num = std::vector<bool>{true, true}},
|
||||
{.type = CommandType::pid_conf, .param_is_whole_num = std::vector<bool>{false, false, false, false, false, false}},
|
||||
{.type = CommandType::temp_set, .param_is_whole_num = std::vector<bool>{false}}
|
||||
};
|
||||
|
||||
TprCommand::TprCommand(CommandType type)
|
||||
{
|
||||
m_type = type;
|
||||
}
|
||||
|
||||
TprCommand::TprCommand(CommandType type, const std::vector<float> ¶ms) : TprCommand(type)
|
||||
{
|
||||
m_parameters = params;
|
||||
}
|
||||
|
||||
TprCommand::TprCommand(CommandType type, const std::vector<float> &¶ms) : TprCommand(type)
|
||||
{
|
||||
m_parameters = std::move(params);
|
||||
}
|
||||
|
||||
bool TprCommand::is_whole_number(float num) const
|
||||
{
|
||||
if (floor(num) == num)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool TprCommand::check_command(bool print_status) const
|
||||
{
|
||||
for (unsigned int i = 0; i < 11; i++) {
|
||||
if (m_specs[i].type == m_type) {
|
||||
/* Check size of param vector. This is just to be safe and should never fail */
|
||||
if (m_parameters.size() != m_specs[i].param_is_whole_num.size()) {
|
||||
std::cerr << "[ERR] Parameter count mismatch in command. This is a compiler bug!" << std::endl;
|
||||
std::abort();
|
||||
}
|
||||
|
||||
for (unsigned int param_idx = 0; i < m_parameters.size(); i++) {
|
||||
if (is_whole_number(m_parameters[param_idx]) ^ m_specs[i].param_is_whole_num[param_idx]) {
|
||||
if (print_status) {
|
||||
std::cerr << "[WARN]" // TODO:::: Continue here!!
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user