1 #include <msp/strings/format.h>
2 #include <msp/strings/regex.h>
13 Zone::Zone(Layout &l):
25 void Zone::set_name(const string &n)
27 Regex r_name("(.+) ([^ ]+) ([1-9][0-9]*)");
28 RegMatch m = r_name.match(n);
30 throw invalid_argument("Zone::set_name");
32 set_name(m[1].str, m[2].str, lexical_cast<unsigned>(m[3].str));
35 void Zone::set_name(const string &g, const string &q, unsigned n)
44 void Zone::update_name()
46 string full_name = group;
47 if(!qualifier.empty())
50 full_name += qualifier;
53 full_name += format(" %d", number);
54 TrackChain::set_name(full_name);
57 void Zone::save(list<DataFile::Statement> &st) const
59 st.push_back((DataFile::Statement("group"), group));
60 if(!qualifier.empty())
61 st.push_back((DataFile::Statement("qualifier"), qualifier));
63 st.push_back((DataFile::Statement("number"), number));
65 unsigned last_block = 0;
66 TrackIter iter = ends[0].reverse();
67 while(iter && tracks.count(iter.track()))
69 unsigned block_id = iter->get_block().get_id();
70 if(block_id!=last_block)
72 st.push_back((DataFile::Statement("block"), block_id));
73 last_block = block_id;
76 iter = next_iter(iter);
80 DataFile::Statement Zone::save_reference() const
82 return (DataFile::Statement("zone"), group, number);
86 Zone::Loader::Loader(Zone &z):
87 DataFile::ObjectLoader<Zone>(z)
89 add("block", &Loader::block);
90 add("group", &Zone::group);
91 add("number", &Zone::number);
92 add("qualifier", &Zone::qualifier);
95 void Zone::Loader::finish()
100 void Zone::Loader::block(unsigned b)
102 Block &blk = obj.layout.get_block(b);
103 obj.add_tracks(blk.get_tracks());