namespace R2C2 {
+struct BlockAllocator::BlockMatch
+{
+ const Block █
+
+ BlockMatch(const Block &b): block(b) { }
+
+ bool operator()(const BlockIter &bi) const { return &*bi==█ }
+};
+
+
BlockAllocator::BlockAllocator(Train &t):
train(t),
cur_blocks_end(blocks.end()),
const BlockIter &BlockAllocator::iter_for(const Block &block) const
{
- BlockList::const_iterator i = find_block(blocks.begin(), blocks.end(), block);
+ BlockList::const_iterator i = find_if(blocks.begin(), blocks.end(), IterBlockMatch(block));
if(i==blocks.end())
throw key_error(&block);
return *i;
bool BlockAllocator::has_block(const Block &block) const
{
- return find_block(blocks.begin(), blocks.end(), block)!=blocks.end();
+ return find_if(blocks.begin(), blocks.end(), IterBlockMatch(block))!=blocks.end();
}
bool BlockAllocator::is_block_current(const Block &block) const
{
- return find_block(blocks.begin(), cur_blocks_end, block)!=cur_blocks_end;
-}
-
-BlockAllocator::BlockList::const_iterator BlockAllocator::find_block(const BlockList::const_iterator &begin, const BlockList::const_iterator &end, const Block &block) const
-{
- BlockList::const_iterator i;
- for(i=begin; (i!=end && &**i!=&block); ++i) ;
- return i;
+ return find_if(blocks.begin(), cur_blocks_end, IterBlockMatch(block))!=cur_blocks_end;
}
void BlockAllocator::reserve_more()
};
private:
+ struct BlockMatch;
+
typedef std::list<BlockIter> BlockList;
Train &train;
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 &);