|
From: <ob...@us...> - 2011-12-12 00:07:14
|
Revision: 1226
http://scstudio.svn.sourceforge.net/scstudio/?rev=1226&view=rev
Author: obouda
Date: 2011-12-12 00:07:07 +0000 (Mon, 12 Dec 2011)
Log Message:
-----------
Z120 export canonization:
- time data canonized
Modified Paths:
--------------
trunk/src/data/Z120/string_list_printer.h
trunk/src/data/Z120/z120_save.cpp
trunk/tests/z120_test/z120_time26.mpr.result
trunk/tests/z120_test/z120_time27.mpr.result
trunk/tests/z120_test/z120_time28.mpr.result
trunk/tests/z120_test/z120_time29.mpr.result
trunk/tests/z120_test/z120_time30.mpr.result
trunk/tests/z120_test/z120_time31.mpr.result
Removed Paths:
-------------
trunk/tests/z120_test/z120_time26.mpr.result1
trunk/tests/z120_test/z120_time27.mpr.result1
trunk/tests/z120_test/z120_time28.mpr.result1
trunk/tests/z120_test/z120_time29.mpr.result1
trunk/tests/z120_test/z120_time30.mpr.result1
trunk/tests/z120_test/z120_time31.mpr.result1
Modified: trunk/src/data/Z120/string_list_printer.h
===================================================================
--- trunk/src/data/Z120/string_list_printer.h 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/src/data/Z120/string_list_printer.h 2011-12-12 00:07:07 UTC (rev 1226)
@@ -164,18 +164,18 @@
: m_head(head), m_item_separator(item_separator), m_tail(tail)
{}
- //! gets a string which will be printed before all the items, but only if there really are some items
+ //! returns a string which will be printed before all the items, but only if there really are some items
ItemType get_head() const {
return m_head;
}
- //! gets a string which will be printed between every two items
+ //! returns a string which will be printed between every two items
ItemType get_item_separator() const
{
return m_item_separator;
}
- //! gets a string which will be printed after all the items, but only if there really were some items
+ //! returns a string which will be printed after all the items, but only if there really were some items
ItemType get_tail() const
{
return m_tail;
@@ -212,6 +212,30 @@
}
/**
+ * \brief returns the number of items in the printer (not counting a possible uncommitted item)
+ */
+ int size() const
+ {
+ return m_items.size();
+ }
+
+ /**
+ * \brief checks whether the printer is empty, i.e. there have not been any items added yet
+ */
+ bool empty() const
+ {
+ return m_items.empty();
+ }
+
+ /**
+ * \brief removes all committed items from the printer (any uncommitted item is untouched, though)
+ */
+ void clear()
+ {
+ m_items.clear();
+ }
+
+ /**
* \brief adds a single item to the string list, under a given key (or "" key if not specified)
* provides a fluent interface
*/
Modified: trunk/src/data/Z120/z120_save.cpp
===================================================================
--- trunk/src/data/Z120/z120_save.cpp 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/src/data/Z120/z120_save.cpp 2011-12-12 00:07:07 UTC (rev 1226)
@@ -394,48 +394,52 @@
{
const std::list< MscTimeInterval<double> > constraints = abs->get_interval_set().get_set();
+ // NOTE: using the output ordering just for sure, in real, just one interval is present
+ BasicStringListPrinter<double> printer;
+
for(std::list< MscTimeInterval<double> >::const_iterator it = constraints.begin();
it != constraints.end(); it++)
{
if(it->get_begin_value() != it->get_end_value())
{
if (it->get_begin_closed())
- stream << "@[";
+ printer << "@[";
else
- stream << "@(";
+ printer << "@(";
- stream << it->get_begin() << "," << it->get_end();
+ printer << it->get_begin() << "," << it->get_end();
if (it->get_end_closed())
- stream << "]";
+ printer << "]";
else
- stream << ")";
+ printer << ")";
}
else
- stream << "[@" << it->get_begin() << "]";
+ printer << "[@" << it->get_begin() << "]";
+
+ printer.commit_item(it->get_begin().get_value());
}
+
+ printer.print(stream);
}
void Z120::print_time_relations(std::ostream& stream, PtrIDMap<EventPtr>& event_id_map,
const EventPtr& event)
{
- size_t printed = 0;
+ BasicStringListPrinter<long> printer("time", ",", ";\n");
const TimeRelationEventPtrList& relations = event->get_time_relations();
- const AbsoluteTimePtrList absolut_times = event->get_absolut_times();
- // process all absolut time constraints
- for(AbsoluteTimePtrList::const_iterator apos = absolut_times.begin();
- apos != absolut_times.end(); apos++)
+ const AbsoluteTimePtrList absolute_times = event->get_absolut_times();
+ // process all absolute time constraints
+ for(AbsoluteTimePtrList::const_iterator apos = absolute_times.begin();
+ apos != absolute_times.end(); apos++)
{
- if(!printed++)
- stream << "time ";
- else
- stream << ", ";
+ print_element_attributes(printer.get_current_stream(), *apos);
- print_element_attributes(stream, *apos);
-
- //do not used the print function of MscTimeInterval due to [@3]
- print_absolute_time(stream, *apos);
+ // NOTE: not using the MscTimeInterval.to_string() due to constraints like [@3]
+ printer << " ";
+ print_absolute_time(printer.get_current_stream(), *apos);
+ printer.commit_item(-1);
}
// process all time relations
@@ -447,24 +451,20 @@
if((*rpos)->get_event_a() != event)
continue;
- // is it a first item being printed?
- if(!printed++)
- stream << "time";
- else
- stream << ",";
+ print_element_attributes(printer.get_current_stream(), *rpos);
- print_element_attributes(stream, *rpos);
+ long event_id = event_id_map.get_id((*rpos)->get_event_b());
+ printer << " e" << event_id;
- stream << " e" << event_id_map.get_id((*rpos)->get_event_b());
-
if((*rpos)->is_directed())
- stream << " origin";
+ printer << " origin";
- stream << " " << (*rpos)->get_label();
+ printer << " " << (*rpos)->get_label();
+
+ printer.commit_item(event_id);
}
- if(printed)
- stream << ";" << std::endl;
+ printer.print(stream);
}
int Z120::save_bmsc(std::ostream& stream, const BMscPtr& bmsc)
@@ -590,7 +590,7 @@
void Z120::print_time_relations1(std::ostream& stream,
const ReferenceNodePtr& reference_node, TimeRelationRefNodePtrSet relations)
{
- size_t printed = 0;
+ StringListPrinter printer(" time", ",", ";\n");
// process all time relations
for(TimeRelationRefNodePtrSet::const_iterator rpos = relations.begin();
@@ -600,26 +600,20 @@
if((*rpos)->get_ref_node_a() != (*rpos)->get_ref_node_b())
continue;
- // is it a first item being printed?
- if(!printed++)
- stream << " time";
- else
- stream << ",";
+ print_element_attributes(printer.get_current_stream(), *rpos);
- print_element_attributes(stream, *rpos);
-
- stream << " " << (*rpos)->get_label();
+ printer << " " << (*rpos)->get_label();
+ printer.commit_item((*rpos)->get_label());
}
- if(printed)
- stream << ";" << std::endl;
+ printer.print(stream);
}
void Z120::print_time_relations2(std::ostream& stream,
PtrIDMap<HMscNodePtr>& node_id_map, const std::string& title,
const ReferenceNodePtr& reference_node, TimeRelationRefNodePtrSet relations)
{
- size_t printed = 0;
+ BasicStringListPrinter<std::pair<long,bool> > printer(" " + title, ",", ";\n");
// process all time relations
for(TimeRelationRefNodePtrSet::const_iterator rpos = relations.begin();
@@ -633,32 +627,29 @@
if((*rpos)->get_ref_node_a() != reference_node)
continue;
- // is it a first item being printed?
- if(!printed++)
- stream << " " << title;
- else
- stream << ",";
+ print_element_attributes(printer.get_current_stream(), *rpos);
- print_element_attributes(stream, *rpos);
-
if((*rpos)->get_ref_node_b() == NULL)
throw std::invalid_argument("Disconnected time constraint.");
if((*rpos)->is_bottom_node_b())
- stream << " bottom";
+ printer << " bottom";
else
- stream << " top";
+ printer << " top";
- stream << " L" << node_id_map.get_id((*rpos)->get_ref_node_b());
+ const long node_id = node_id_map.get_id((*rpos)->get_ref_node_b());
+ printer << " L" << node_id;
if((*rpos)->is_directed())
- stream << " origin";
+ printer << " origin";
- stream << " " << (*rpos)->get_label();
+ printer << " " << (*rpos)->get_label();
+
+ // order by node id, "top" earlier than "bottom"
+ printer.commit_item(std::make_pair<long,bool>(node_id, !(*rpos)->is_bottom_node_b()));
}
- if(printed)
- stream << ";" << std::endl;
+ printer.print(stream);
}
int Z120::save_hmsc(std::ostream& stream, const HMscPtr& hmsc)
@@ -762,7 +753,7 @@
}
// output canonization: output the list of nodes in the lexicographic order
- BasicStringListPrinter<int> succ_printer(" connect", ",");
+ BasicStringListPrinter<long> succ_printer(" connect", ",");
for(NodeRelationPtrVector::const_iterator spos = predecessor_node->get_successors().begin();
spos != predecessor_node->get_successors().end(); spos++)
@@ -772,8 +763,9 @@
print_element_attributes(succ_printer.get_current_stream(), *spos);
HMscNode *successor_node = dynamic_cast<HMscNode*>(successor);
- succ_printer << " L" << node_id_map.get_id(successor_node);
- succ_printer.commit_item(node_id_map.get_id(successor_node));
+ const long node_id = node_id_map.get_id(successor_node);
+ succ_printer << " L" << node_id;
+ succ_printer.commit_item(node_id);
// add successors of this node to the stack
// note: std::list<>::push_back doesn't invalidate iterators
Modified: trunk/tests/z120_test/z120_time26.mpr.result
===================================================================
--- trunk/tests/z120_test/z120_time26.mpr.result 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time26.mpr.result 2011-12-12 00:07:07 UTC (rev 1226)
@@ -26,7 +26,7 @@
concurrent;
label e2;
in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
+time e3 [4], e4 [12];
label e3;
in NAME,1 from P1;
endconcurrent;
Deleted: trunk/tests/z120_test/z120_time26.mpr.result1
===================================================================
--- trunk/tests/z120_test/z120_time26.mpr.result1 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time26.mpr.result1 2011-12-12 00:07:07 UTC (rev 1226)
@@ -1,36 +0,0 @@
-Warning 32: Unexpected (top L1 origin) at time definition: L2
-OK: z120_time26 is correct, should be correct
-
-mscdocument z120_time26;
-msc Main;
-initial connect L0;
-L0: connect L1, L2;
-L1: reference Subprocess connect L3;
-L2: reference Subprocess time [3,4], [1,2);
- top bottom L1 origin (1,10);
- connect L1;
-L3: final;
-endmsc;
-msc Subprocess;
-inst P1;
-inst P2;
-P1: instance;
-out NAME,0 to P2;
-label e0;
-out NAME,1 to P2;
-time e1 [7];
-label e1;
-in NAME,2 from P2;
-endinstance;
-P2: instance;
-concurrent;
-label e2;
-in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
-label e3;
-in NAME,1 from P1;
-endconcurrent;
-label e4;
-out NAME,2 to P1;
-endinstance;
-endmsc;
Modified: trunk/tests/z120_test/z120_time27.mpr.result
===================================================================
--- trunk/tests/z120_test/z120_time27.mpr.result 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time27.mpr.result 2011-12-12 00:07:07 UTC (rev 1226)
@@ -26,7 +26,7 @@
concurrent;
label e2;
in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
+time e3 [4], e4 [12];
label e3;
in NAME,1 from P1;
endconcurrent;
Deleted: trunk/tests/z120_test/z120_time27.mpr.result1
===================================================================
--- trunk/tests/z120_test/z120_time27.mpr.result1 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time27.mpr.result1 2011-12-12 00:07:07 UTC (rev 1226)
@@ -1,36 +0,0 @@
-Warning 32: Unexpected (bottom L1 origin) at time definition: L2
-OK: z120_time27 is correct, should be correct
-
-mscdocument z120_time27;
-msc Main;
-initial connect L0;
-L0: connect L1, L2;
-L1: reference Subprocess connect L3;
-L2: reference Subprocess time [3,4], [1,2);
- top bottom L1 origin (1,10);
- connect L1;
-L3: final;
-endmsc;
-msc Subprocess;
-inst P1;
-inst P2;
-P1: instance;
-out NAME,0 to P2;
-label e0;
-out NAME,1 to P2;
-time e1 [7];
-label e1;
-in NAME,2 from P2;
-endinstance;
-P2: instance;
-concurrent;
-label e2;
-in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
-label e3;
-in NAME,1 from P1;
-endconcurrent;
-label e4;
-out NAME,2 to P1;
-endinstance;
-endmsc;
Modified: trunk/tests/z120_test/z120_time28.mpr.result
===================================================================
--- trunk/tests/z120_test/z120_time28.mpr.result 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time28.mpr.result 2011-12-12 00:07:07 UTC (rev 1226)
@@ -26,7 +26,7 @@
concurrent;
label e2;
in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
+time e3 [4], e4 [12];
label e3;
in NAME,1 from P1;
endconcurrent;
Deleted: trunk/tests/z120_test/z120_time28.mpr.result1
===================================================================
--- trunk/tests/z120_test/z120_time28.mpr.result1 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time28.mpr.result1 2011-12-12 00:07:07 UTC (rev 1226)
@@ -1,36 +0,0 @@
-Warning 32: Unexpected (top L1) at time definition: L2
-OK: z120_time28 is correct, should be correct
-
-mscdocument z120_time28;
-msc Main;
-initial connect L0;
-L0: connect L1, L2;
-L1: reference Subprocess connect L3;
-L2: reference Subprocess time [3,4], [1,2);
- top bottom L1 origin (1,10);
- connect L1;
-L3: final;
-endmsc;
-msc Subprocess;
-inst P1;
-inst P2;
-P1: instance;
-out NAME,0 to P2;
-label e0;
-out NAME,1 to P2;
-time e1 [7];
-label e1;
-in NAME,2 from P2;
-endinstance;
-P2: instance;
-concurrent;
-label e2;
-in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
-label e3;
-in NAME,1 from P1;
-endconcurrent;
-label e4;
-out NAME,2 to P1;
-endinstance;
-endmsc;
Modified: trunk/tests/z120_test/z120_time29.mpr.result
===================================================================
--- trunk/tests/z120_test/z120_time29.mpr.result 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time29.mpr.result 2011-12-12 00:07:07 UTC (rev 1226)
@@ -26,7 +26,7 @@
concurrent;
label e2;
in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
+time e3 [4], e4 [12];
label e3;
in NAME,1 from P1;
endconcurrent;
Deleted: trunk/tests/z120_test/z120_time29.mpr.result1
===================================================================
--- trunk/tests/z120_test/z120_time29.mpr.result1 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time29.mpr.result1 2011-12-12 00:07:07 UTC (rev 1226)
@@ -1,36 +0,0 @@
-Warning 32: Unexpected (bottom L1) at time definition: L2
-OK: z120_time29 is correct, should be correct
-
-mscdocument z120_time29;
-msc Main;
-initial connect L0;
-L0: connect L1, L2;
-L1: reference Subprocess connect L3;
-L2: reference Subprocess time [3,4], [1,2);
- top bottom L1 origin (1,10);
- connect L1;
-L3: final;
-endmsc;
-msc Subprocess;
-inst P1;
-inst P2;
-P1: instance;
-out NAME,0 to P2;
-label e0;
-out NAME,1 to P2;
-time e1 [7];
-label e1;
-in NAME,2 from P2;
-endinstance;
-P2: instance;
-concurrent;
-label e2;
-in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
-label e3;
-in NAME,1 from P1;
-endconcurrent;
-label e4;
-out NAME,2 to P1;
-endinstance;
-endmsc;
Modified: trunk/tests/z120_test/z120_time30.mpr.result
===================================================================
--- trunk/tests/z120_test/z120_time30.mpr.result 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time30.mpr.result 2011-12-12 00:07:07 UTC (rev 1226)
@@ -26,7 +26,7 @@
concurrent;
label e2;
in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
+time e3 [4], e4 [12];
label e3;
in NAME,1 from P1;
endconcurrent;
Deleted: trunk/tests/z120_test/z120_time30.mpr.result1
===================================================================
--- trunk/tests/z120_test/z120_time30.mpr.result1 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time30.mpr.result1 2011-12-12 00:07:07 UTC (rev 1226)
@@ -1,36 +0,0 @@
-Warning 32: Unexpected (L1 origin) at time definition: L2
-OK: z120_time30 is correct, should be correct
-
-mscdocument z120_time30;
-msc Main;
-initial connect L0;
-L0: connect L1, L2;
-L1: reference Subprocess connect L3;
-L2: reference Subprocess time [3,4], [1,2);
- top bottom L1 origin (1,10);
- connect L1;
-L3: final;
-endmsc;
-msc Subprocess;
-inst P1;
-inst P2;
-P1: instance;
-out NAME,0 to P2;
-label e0;
-out NAME,1 to P2;
-time e1 [7];
-label e1;
-in NAME,2 from P2;
-endinstance;
-P2: instance;
-concurrent;
-label e2;
-in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
-label e3;
-in NAME,1 from P1;
-endconcurrent;
-label e4;
-out NAME,2 to P1;
-endinstance;
-endmsc;
Modified: trunk/tests/z120_test/z120_time31.mpr.result
===================================================================
--- trunk/tests/z120_test/z120_time31.mpr.result 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time31.mpr.result 2011-12-12 00:07:07 UTC (rev 1226)
@@ -26,7 +26,7 @@
concurrent;
label e2;
in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
+time e3 [4], e4 [12];
label e3;
in NAME,1 from P1;
endconcurrent;
Deleted: trunk/tests/z120_test/z120_time31.mpr.result1
===================================================================
--- trunk/tests/z120_test/z120_time31.mpr.result1 2011-12-11 21:37:01 UTC (rev 1225)
+++ trunk/tests/z120_test/z120_time31.mpr.result1 2011-12-12 00:07:07 UTC (rev 1226)
@@ -1,36 +0,0 @@
-Warning 32: Unexpected (L1) at time definition: L2
-OK: z120_time31 is correct, should be correct
-
-mscdocument z120_time31;
-msc Main;
-initial connect L0;
-L0: connect L1, L2;
-L1: reference Subprocess connect L3;
-L2: reference Subprocess time [3,4], [1,2);
- top bottom L1 origin (1,10);
- connect L1;
-L3: final;
-endmsc;
-msc Subprocess;
-inst P1;
-inst P2;
-P1: instance;
-out NAME,0 to P2;
-label e0;
-out NAME,1 to P2;
-time e1 [7];
-label e1;
-in NAME,2 from P2;
-endinstance;
-P2: instance;
-concurrent;
-label e2;
-in NAME,0 from P1 before e3;
-time e4 [12], e3 [4];
-label e3;
-in NAME,1 from P1;
-endconcurrent;
-label e4;
-out NAME,2 to P1;
-endinstance;
-endmsc;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|