Skip to content

Commit

Permalink
Cleanup and use multimap
Browse files Browse the repository at this point in the history
  • Loading branch information
RobertBColton committed Apr 25, 2014
1 parent 6e6aeae commit b7c9dd5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 29 deletions.
56 changes: 33 additions & 23 deletions CompilerSource/compiler/components/write_object_data.cpp
Expand Up @@ -58,6 +58,7 @@ inline bool iscomment(const string &n) {
}

struct cspair { string c, s; };
typedef map<int, map<int, cspair> > cspairmap;
int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
{
//NEXT FILE ----------------------------------------
Expand Down Expand Up @@ -104,6 +105,7 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
vector<int> parsed(0);
// Hold an iterator for our parent for later usage
po_i parent = parsed_objects.find(i->second->parent);
cspairmap nemap; // Keep track of events that need added to honor et_stacked
// Hold a map of all the
map<int, vector<unsigned> > parent_definitions;
vector<unsigned> parent_defined;
Expand Down Expand Up @@ -245,19 +247,18 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)

// Now we output all the events this object uses
// Defaulted events were already added into this array.
map<int, cspair> nemap; // Keep track of events that need added to honor et_stacked
map<int, cspair> semap; // Keep track of events that need added to honor et_stacked
map<int, cspair> nepairs;
for (unsigned ii = 0; ii < i->second->events.size; ii++) {
// If the parent also wrote this grouped event for instance some input events in the parent and some in the child, then we need to call the super method
bool found = false;
if (setting::inherit_objects) {
for (po_i her = parsed_objects.find(i->second->parent); her != parsed_objects.end(); her = parsed_objects.find(her->second->parent)) {
for (unsigned xx = 0; xx < her->second->events.size; xx++) {
if (her->second->events[xx].mainId == i->second->events[ii].mainId && her->second->events[xx].code != "") {
if (her->second->events[xx].mainId == i->second->events[ii].mainId && her->second->events[xx].id == i->second->events[ii].id && her->second->events[xx].code != "") {
found = true; break;
}
}
if (found) { break; }
if (found) break;
}
}

Expand All @@ -266,24 +267,21 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
//Look up the event name
string evname = event_get_function_name(i->second->events[ii].mainId,i->second->events[ii].id);
if (event_is_instance(i->second->events[ii].mainId,i->second->events[ii].id)) {
if (!found) {
nemap[i->second->events[ii].mainId].c += (event_has_super_check(i->second->events[ii].mainId,i->second->events[ii].id) ?
if (!found || !setting::inherit_objects || parent == parsed_objects.end()) {
nepairs[i->second->events[ii].mainId].s = event_stacked_get_root_name(i->second->events[ii].mainId);
nepairs[i->second->events[ii].mainId].c += event_has_sub_check(i->second->events[ii].mainId, i->second->events[ii].id) ? " if (myevent_" + evname + "_subcheck()) {\n" : "";
nepairs[i->second->events[ii].mainId].c += (event_has_super_check(i->second->events[ii].mainId,i->second->events[ii].id) ?
" if (" + event_get_super_check_condition(i->second->events[ii].mainId,i->second->events[ii].id) + ") myevent_" : " myevent_") + evname + "();\n",
nemap[i->second->events[ii].mainId].s = event_stacked_get_root_name(i->second->events[ii].mainId);
nepairs[i->second->events[ii].mainId].c += event_has_sub_check(i->second->events[ii].mainId, i->second->events[ii].id) ? " }\n" : "";
}

semap[i->second->events[ii].mainId].c += event_has_sub_check(i->second->events[ii].mainId, i->second->events[ii].id) ? " if (myevent_" + evname + "_subcheck()) {\n" : "";
semap[i->second->events[ii].mainId].c += (event_has_super_check(i->second->events[ii].mainId,i->second->events[ii].id) ?
" if (" + event_get_super_check_condition(i->second->events[ii].mainId,i->second->events[ii].id) + ") myevent_" : " myevent_") + evname + "();\n",
semap[i->second->events[ii].mainId].c += event_has_sub_check(i->second->events[ii].mainId, i->second->events[ii].id) ? " }\n" : "";
semap[i->second->events[ii].mainId].s = event_stacked_get_root_name(i->second->events[ii].mainId);
}
wto << " variant myevent_" << evname << "();\n ";
if (event_has_sub_check(i->second->events[ii].mainId, i->second->events[ii].id)) {
wto << " inline bool myevent_" << evname << "_subcheck();\n ";
}
}
}
nemap[i->second->id] = nepairs;

/* Event Perform Code */
wto << "\n //Event Perform Code\n variant myevents_perf(int type, int numb)\n {\n";
Expand Down Expand Up @@ -311,15 +309,26 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
wto << "\n //Locals to instances of this object\n ";

wto << "\n \n // Grouped event bases\n ";
if (semap.size())

if (nemap.size())
{
for (map<int,cspair>::iterator it = semap.begin(); it != semap.end(); it++) {
for (map<int, cspair>::iterator it = nepairs.begin(); it != nepairs.end(); it++) {
wto << " void myevent_" << it->second.s << "()\n {\n";
wto << it->second.c << " }\n ";
wto << it->second.c << "\n";

for (po_i her = parsed_objects.find(i->second->parent); her != parsed_objects.end(); her = parsed_objects.find(her->second->parent)) {
cspairmap::iterator tt = nemap.find(her->second->id);
if (tt == nemap.end()) continue;
map<int, cspair>::iterator et = tt->second.find(it->first);
if (et == tt->second.end()) continue;
wto << et->second.c << "\n";

}
wto << " }\n ";
}

}


/**** Now we write the callable unlinker. Its job is to disconnect the instance for destroy.
* @ * This is an important component that tracks multiple pieces of the instance. These pieces
*//// are created for efficiency. See the instance system documentation for full details.
Expand Down Expand Up @@ -347,8 +356,8 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
wto << " enigma::inst_iter *ENOBJ_ITER_myevent_" << event_get_function_name(i->second->events[ii].mainId,i->second->events[ii].id) << ";\n";
}
}
for (map<int,cspair>::iterator it = nemap.begin(); it != nemap.end(); it++) // The stacked ones should have their root exported
wto << " enigma::inst_iter *ENOBJ_ITER_myevent_" << it->second.s << ";\n";
for (map<int, cspair>::iterator it = nepairs.begin(); it != nepairs.end(); it++) // The stacked ones should have their root exported
wto << " enigma::inst_iter *ENOBJ_ITER_myevent_" << it->second.s << ";\n";

//This is the actual call to remove the current instance from all linked records before destroying it.
wto << "\n void unlink()\n {\n";
Expand All @@ -373,7 +382,8 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
wto << " enigma::event_" << evname << "->unlink(ENOBJ_ITER_myevent_" << evname << ");\n";
}
}
for (map<int,cspair>::iterator it = nemap.begin(); it != nemap.end(); it++) // The stacked ones should have their root exported

for (map<int, cspair>::iterator it = nepairs.begin(); it != nepairs.end(); it++) // The stacked ones should have their root exported
wto << " enigma::event_" << it->second.s << "->unlink(ENOBJ_ITER_myevent_" << it->second.s << ");\n";
wto << " }\n ";

Expand Down Expand Up @@ -443,8 +453,8 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
}
}
}
for (map<int,cspair>::iterator it = nemap.begin(); it != nemap.end(); it++)
wto << " ENOBJ_ITER_myevent_" << it->second.s << " = enigma::event_" << it->second.s << "->add_inst(this);\n";
for (map<int, cspair>::iterator it = nepairs.begin(); it != nepairs.end(); it++) // The stacked ones should have their root exported
wto << " ENOBJ_ITER_myevent_" << it->second.s << " = enigma::event_" << it->second.s << "->add_inst(this);\n";

wto << " }\n";

Expand All @@ -470,7 +480,7 @@ int lang_CPP::compile_writeObjectData(EnigmaStruct* es, parsed_object* global)
wto << " delete ENOBJ_ITER_myevent_" << event_get_function_name(i->second->events[ii].mainId,i->second->events[ii].id) << ";\n";
}
}
for (map<int,cspair>::iterator it = nemap.begin(); it != nemap.end(); it++) // The stacked ones should have their root exported
for (map<int, cspair>::iterator it = nepairs.begin(); it != nepairs.end(); it++) // The stacked ones should have their root exported
wto << " delete ENOBJ_ITER_myevent_" << it->second.s << ";\n";
wto << " }\n";

Expand Down
12 changes: 6 additions & 6 deletions ENIGMAsystem/SHELL/Universal_System/roomsystem.cpp
Expand Up @@ -65,13 +65,13 @@ var current_caption = "";
int background_color = 0xFFFFFF;
int background_showcolor=1;

var background_visible(false, 8), background_foreground(0, 8), background_index(0, 8), background_x(0, 8), background_y(0, 8), background_htiled(0, 8),
background_vtiled(0, 8), background_hspeed(0, 8), background_vspeed(0, 8), background_alpha(0, 8), background_coloring(0, 8), background_width(0, 8), background_height(0, 8), background_xscale(0, 8), background_yscale(0, 8);
var background_visible, background_foreground, background_index, background_x, background_y, background_htiled,
background_vtiled, background_hspeed, background_vspeed,background_alpha,background_coloring,background_width,background_height,background_xscale,background_yscale;

int view_current = 0;
int view_enabled = 0;
rvt view_hborder(0, 8), view_hport(0, 8), view_hspeed(0, 8), view_hview(0, 8), view_object(0, 8), view_vborder(0, 8),
view_visible(false, 8), view_vspeed(0, 8), view_wport(0, 8), view_wview(0, 8), view_xport(0, 8), view_xview(0, 8), view_yport(0, 8), view_yview(0, 8), view_angle(0, 8);
rvt view_hborder, view_hport, view_hspeed, view_hview, view_object, view_vborder,
view_visible, view_vspeed, view_wport, view_wview, view_xport, view_xview, view_yport, view_yview,view_angle;

}

Expand Down Expand Up @@ -108,7 +108,7 @@ namespace enigma
}

//Backgrounds start
for (int i=0;i<8;i++)
for (unsigned i=0;i<8;i++)
{
background_visible[i] = backs[i].visible;
background_foreground[i] = backs[i].foreground;
Expand All @@ -135,7 +135,7 @@ namespace enigma

view_enabled = views_enabled;

for (int i=0;i<8;i++)
for (unsigned i=0;i<8;i++)
{
view_xview[i] = views[i].area_x; view_yview[i] = views[i].area_y; view_wview[i] = views[i].area_w; view_hview[i] = views[i].area_h;
view_xport[i] = views[i].port_x; view_yport[i] = views[i].port_y; view_wport[i] = views[i].port_w; view_hport[i] = views[i].port_h;
Expand Down

0 comments on commit b7c9dd5

Please sign in to comment.