void Event::List::sort() { std::stable_sort(_events.begin(), _events.end(), [](std::unique_ptr<Event> const & a, std::unique_ptr<Event> const & b) { return Event::comp(a.get(), b.get()); }); updateIdList(); }
void Event::List::removeAt(int index) { updateIdList(); _events.erase(_events.begin() + index); _ids.erase(_ids.begin() + index); }
/** * @brief イベントに割り振る ID を取得する * @param next * @return */ int _getNextId( int next ){ updateIdList(); int max = -1; for( int i = 0; i < _ids.size(); i++ ){ max = ::max( max, _ids[i] ); } return max + 1 + next; }
/** * @brief イベントを追加する * @param item 追加するオブジェクト * @param internal_id 追加するオブジェクトに割り振るイベント ID */ void _addCor( const VSQ_NS::Event &item, int internalId ){ updateIdList(); Event *add = new Event(); *add = item; add->id = internalId; _events.push_back( add ); _ids.push_back( internalId ); }
int Event::List::_getNextId(int next) { updateIdList(); int max = -1; auto max_element = std::max_element(_ids.begin(), _ids.end()); if (max_element != _ids.end()) { max = *max_element; } return max + 1 + next; }
void Event::List::_addCor(Event const& item, int internalId) { updateIdList(); auto add = std::unique_ptr<Event>(new Event); *add = item; add->id = internalId; _events.push_back(std::move(add)); _ids.push_back(internalId); }
/** * @brief イベントを削除する * @param index 削除するイベントのインデックス(最初のインデックスは0) */ void removeAt( int index ){ updateIdList(); { std::vector<VSQ_NS::Event *>::iterator i = _events.begin(); std::advance( i, index ); Event *item = *i; delete item; _events.erase( i ); } { std::vector<int>::iterator i = _ids.begin(); std::advance( i, index ); _ids.erase( i ); } }
/** * @brief リスト内のイベントを順に返す反復子を取得する * @return 反復子 */ ListIterator iterator(){ updateIdList(); return ListIterator( this ); }
/** * @brief イベントを並べ替える */ void sort(){ qsort( _events.data(), _events.size(), sizeof( VSQ_NS::Event * ), Event::comp ); updateIdList(); }
Event::ListIterator Event::List::iterator() { updateIdList(); return ListIterator(this); }