Skip to content

Commit

Permalink
Strengthen non empty gurantees with unsigned integer types
Browse files Browse the repository at this point in the history
  • Loading branch information
thorulf4 committed Aug 9, 2023
1 parent 5d58754 commit 90553e5
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 32 deletions.
17 changes: 10 additions & 7 deletions include/utap/document.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,11 +202,11 @@ struct instance_line_t; // to be defined later
/** Common members among LSC elements */
struct LSC_element_t
{
int nr{-1}; /**< Placement in input file */
uint32_t nr; /**< Placement in input file */
int location{-1};
bool is_in_prechart{false};
explicit LSC_element_t(uint32_t nr): nr{nr} {}
int get_nr() const { return nr; }
bool empty() const { return nr == -1; }
};

/** Information about a message. Messages have a source (src) and a
Expand All @@ -218,6 +218,7 @@ struct message_t : LSC_element_t
instance_line_t* src{nullptr}; /**< Pointer to source instance line */
instance_line_t* dst{nullptr}; /**< Pointer to destination instance line */
expression_t label; /**< The label */
explicit message_t(uint32_t nr): LSC_element_t{nr} {}
};
/** Information about a condition. Conditions have an anchor instance lines.
* The label is stored as an expression.
Expand All @@ -227,6 +228,7 @@ struct condition_t : LSC_element_t
std::vector<instance_line_t*> anchors{}; /**< Pointer to anchor instance lines */
expression_t label; /**< The label */
bool isHot{false};
explicit condition_t(uint32_t nr): LSC_element_t{nr} {}
};

/** Information about an update. Update have an anchor instance line.
Expand All @@ -236,11 +238,12 @@ struct update_t : LSC_element_t
{
instance_line_t* anchor{nullptr}; /**< Pointer to anchor instance line */
expression_t label; /**< The label */
explicit update_t(uint32_t nr): LSC_element_t{nr} {}
};

struct simregion_t : stringify_t<simregion_t>
{
int nr{};
uint32_t nr{};
message_t* message{nullptr}; /** May be empty */
condition_t* condition{nullptr}; /** May be empty */
update_t* update{nullptr}; /** May be empty */
Expand All @@ -252,9 +255,9 @@ struct simregion_t : stringify_t<simregion_t>
bool has_message() const { return message != nullptr; }
bool has_condition() const { return condition != nullptr; }
bool has_update() const { return update != nullptr; }
void set_message(std::deque<message_t>& messages, int nr);
void set_condition(std::deque<condition_t>& conditions, int nr);
void set_update(std::deque<update_t>& updates, int nr);
void set_message(std::deque<message_t>& messages, uint32_t nr);
void set_condition(std::deque<condition_t>& conditions, uint32_t nr);
void set_update(std::deque<update_t>& updates, uint32_t nr);
};

struct compare_simregion
Expand Down Expand Up @@ -339,7 +342,7 @@ struct instance_t
*/
struct instance_line_t : public instance_t
{
int32_t instance_nr; /**< InstanceLine number in template */
uint32_t instance_nr; /**< InstanceLine number in template */
std::vector<simregion_t> getSimregions(const std::vector<simregion_t>& simregions);
void add_parameters(instance_t& inst, frame_t params, const std::vector<expression_t>& arguments);
};
Expand Down
38 changes: 13 additions & 25 deletions src/document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -340,37 +340,34 @@ instance_line_t& template_t::add_instance_line()
message_t& template_t::add_message(symbol_t src, symbol_t dst, int loc, bool pch)
{
int32_t nr = messages.empty() ? 0 : messages.back().nr + 1;
auto& message = messages.emplace_back();
auto& message = messages.emplace_back(nr);
message.src = static_cast<instance_line_t*>(src.get_data());
message.dst = static_cast<instance_line_t*>(dst.get_data());
message.location = loc;
message.is_in_prechart = pch;
message.nr = nr;
return message;
}

update_t& template_t::add_update(symbol_t anchor, int loc, bool pch)
{
int32_t nr = updates.empty() ? 0 : updates.back().nr + 1;
auto& update = updates.emplace_back();
auto& update = updates.emplace_back(nr);
update.anchor = static_cast<instance_line_t*>(anchor.get_data());
update.location = loc;
update.is_in_prechart = pch;
update.nr = nr;
return update;
}

condition_t& template_t::add_condition(vector<symbol_t> anchors, int loc, bool pch, bool isHot)
{
int32_t nr = conditions.empty() ? 0 : conditions.back().nr + 1;
auto& condition = conditions.emplace_back();
auto& condition = conditions.emplace_back(nr);

for (auto& anchor : anchors) {
condition.anchors.push_back(static_cast<instance_line_t*>(anchor.get_data())); // TODO
}
condition.location = loc;
condition.is_in_prechart = pch;
condition.nr = nr;
condition.isHot = isHot;
return condition;
}
Expand Down Expand Up @@ -532,7 +529,6 @@ bool template_t::get_update(instance_line_t& instance, int y, update_t*& simUpda
*/
bool template_t::get_update(vector<instance_line_t*>& instances, int y, update_t*& simUpdate)
{
update_t update;
for (auto& instance : instances) {
if (get_update(*instance, y, simUpdate))
return true;
Expand Down Expand Up @@ -563,24 +559,22 @@ vector<simregion_t> instance_line_t::getSimregions(const vector<simregion_t>& si
// get the simregions anchored to this instance
for (const auto& reg : simregions) {
const message_t* m = reg.message;
if (!m->empty() && (m->src->instance_nr == this->instance_nr || m->dst->instance_nr == this->instance_nr)) {
if ((m->src->instance_nr == this->instance_nr || m->dst->instance_nr == this->instance_nr)) {
i_simregions.push_back(reg);
continue;
}

const update_t* u = reg.update;
if (!u->empty() && u->anchor->instance_nr == this->instance_nr) {
if (u->anchor->instance_nr == this->instance_nr) {
i_simregions.push_back(reg);
continue;
}

const condition_t* c = reg.condition;
if (!c->empty()) {
for (auto* instance : c->anchors) {
if (instance->instance_nr == this->instance_nr) {
i_simregions.push_back(reg);
break;
}
for (auto* instance : c->anchors) {
if (instance->instance_nr == this->instance_nr) {
i_simregions.push_back(reg);
break;
}
}
}
Expand Down Expand Up @@ -619,10 +613,8 @@ bool simregion_t::is_in_prechart() const
return false; // should not happen
}

void simregion_t::set_message(std::deque<message_t>& messages, int nr)
void simregion_t::set_message(std::deque<message_t>& messages, uint32_t nr)
{
assert(nr != -1);

for (auto& message : messages) {
if (message.nr == nr) {
this->message = &message;
Expand All @@ -631,10 +623,8 @@ void simregion_t::set_message(std::deque<message_t>& messages, int nr)
}
}

void simregion_t::set_condition(std::deque<condition_t>& conditions, int nr)
void simregion_t::set_condition(std::deque<condition_t>& conditions, uint32_t nr)
{
assert(nr != -1);

for (auto& condition : conditions) {
if (condition.nr == nr) {
this->condition = &condition;
Expand All @@ -643,10 +633,8 @@ void simregion_t::set_condition(std::deque<condition_t>& conditions, int nr)
}
}

void simregion_t::set_update(std::deque<update_t>& updates, int nr)
void simregion_t::set_update(std::deque<update_t>& updates, uint32_t nr)
{
assert(nr != -1);

for (auto& update : updates) {
if (update.nr == nr) {
this->update = &update;
Expand Down Expand Up @@ -681,7 +669,7 @@ std::ostream& simregion_t::print(std::ostream& os) const
return os << ")";
}

inline auto find_simregion_by_nr(int nr)
inline auto find_simregion_by_nr(uint32_t nr)
{
return [nr](const simregion_t& reg) { return reg.nr == nr; };
}
Expand Down

0 comments on commit 90553e5

Please sign in to comment.