summaryrefslogtreecommitdiff
path: root/ptformat.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ptformat.cc')
-rw-r--r--ptformat.cc36
1 files changed, 36 insertions, 0 deletions
diff --git a/ptformat.cc b/ptformat.cc
index ca7f74d..17aaa38 100644
--- a/ptformat.cc
+++ b/ptformat.cc
@@ -1066,6 +1066,42 @@ PTFFormat::parserest(void) {
tr++;
}
}
+
+ if (_tracks.begin() == _tracks.end())
+ return found;
+
+ /* Sort track entries by index */
+ std::sort(_tracks.begin(), _tracks.end());
+
+ /* Renumber track entries to be gapless */
+ for (std::vector<track_t>::iterator tr = _tracks.begin() + 1;
+ tr != _tracks.end(); tr++) {
+ while ((*tr).index == (*(tr-1)).index) {
+ tr++;
+ if (tr == _tracks.end()) {
+ break;
+ }
+ }
+ if (tr == _tracks.end()) {
+ break;
+ }
+ int diffn = (*tr).index - (*(tr-1)).index - 1;
+ if (diffn) {
+ for (std::vector<track_t>::iterator rest = tr;
+ rest != _tracks.end(); rest++) {
+ (*rest).index -= diffn;
+ }
+ }
+ }
+
+ /* Renumber track entries to be zero based */
+ int first = _tracks[0].index;
+ if (first > 0) {
+ for (std::vector<track_t>::iterator tr = _tracks.begin();
+ tr != _tracks.end(); tr++) {
+ (*tr).index -= first;
+ }
+ }
return found;
}