public:
BlockAllocator(Train &);
- void start_from(Block &, unsigned);
+ void start_from(const BlockIter &);
void clear();
bool empty() const { return blocks.empty(); }
void stop_at(const Block *);
const BlockIter &first() const;
const BlockIter &last() const;
const BlockIter &last_current() const;
+ const BlockIter &iter_for(const Block &) const;
- int get_entry_to_block(const Block &) const;
+ bool has_block(const Block &) const;
+ bool is_block_current(const Block &) const;
+private:
+ BlockList::const_iterator find_block(const BlockList::const_iterator &, const BlockList::const_iterator &, const Block &) const;
+public:
void reserve_more();
+private:
+ bool reserve_block(const BlockIter &);
+public:
void release_until(const Block &);
bool release_from(const Block &);
void release_noncurrent();
private:
- void release_blocks(const BlockList::iterator &, const BlockList::iterator &);
+ void release_blocks_begin(const BlockList::iterator &);
+ void release_blocks_end(const BlockList::iterator &);
+ void release_block(const BlockList::iterator &);
public:
void reverse();