MuseScore/libmscore/segmentlist.h

83 lines
2.7 KiB
C
Raw Normal View History

2012-05-26 14:26:10 +02:00
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#ifndef __SEGMENTLIST_H__
#define __SEGMENTLIST_H__
2017-03-08 13:12:26 +01:00
#include "segment.h"
2013-05-13 18:49:17 +02:00
namespace Ms {
2014-06-01 20:24:29 +02:00
2017-03-08 13:12:26 +01:00
class Segment;
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
// SegmentList
//---------------------------------------------------------
class SegmentList {
Segment* _first; ///< First item of segment list
Segment* _last; ///< Last item of segment list
int _size; ///< Number of items in segment list
public:
SegmentList() { clear(); }
void clear() { _first = _last = 0; _size = 0; }
#ifndef NDEBUG
void check();
#else
void check() {}
#endif
SegmentList clone() const;
int size() const { return _size; }
Segment* first() const { return _first; }
2017-03-08 13:12:26 +01:00
Segment* first(SegmentType) const;
Segment* first(ElementFlag) const;
2012-05-26 14:26:10 +02:00
Segment* last() const { return _last; }
Segment* firstCRSegment() const;
void remove(Segment*);
void push_back(Segment*);
void push_front(Segment*);
2016-05-02 13:41:41 +02:00
void insert(Segment* e, Segment* el); // insert e before el
2016-02-08 15:10:03 +01:00
class iterator {
Segment* p;
public:
iterator(Segment* s) { p = s; }
iterator operator++() { iterator i(p); p = p->next(); return i; }
bool operator !=(const iterator& i) const { return p != i.p; }
Segment& operator*() { return *p; }
};
class const_iterator {
const Segment* p;
public:
const_iterator(const Segment* s) { p = s; }
const_iterator operator++() { const_iterator i(p); p = p->next(); return i; }
bool operator !=(const const_iterator& i) const { return p != i.p; }
const Segment& operator*() const { return *p; }
};
iterator begin() { return _first; }
iterator end() { return 0; }
const_iterator begin() const { return _first; }
const_iterator end() const { return 0; }
2012-05-26 14:26:10 +02:00
};
2016-02-08 15:10:03 +01:00
// Segment* begin(SegmentList& l) { return l.first(); }
// Segment* end(SegmentList&) { return 0; }
2013-05-13 18:49:17 +02:00
} // namespace Ms
2012-05-26 14:26:10 +02:00
#endif