13 template<
class Input,
class Output,
class Medium>
29 std::list<Medium const*> pipe_;
30 std::list<MediumInfo* > info_;
34 Myself(Myself
const& b): pipe_(b.pipe_), info_(b.info_) {
35 for (std::list<MediumInfo*>::iterator
36 it = info_.begin(); it != info_.end(); ++it) {
41 std::list<MediumInfo* >::iterator it = info_.begin();
42 std::list<Medium const*>::iterator ip = pipe_.begin();
43 for ( ; it != info_.end(); ++it, ++ip) {
44 if ((*it).counter_ <= 0 && (*it).autoDel_ ==
true) {
50 bool frontAdd(Medium
const* ptr,
bool auto_delete) {
51 pipe_.push_front(ptr);
52 info_.push_front(
new MediumInfo(auto_delete));
56 bool backAdd(Medium
const* ptr,
bool auto_delete) {
58 info_.push_back(
new MediumInfo(auto_delete));
63 if (pipe_.empty())
return false;
64 info_.front().counter_ -= 1;
65 if (info_.front().autoDel_ && info_.front().counter_ <= 0) {
73 if (pipe_.empty())
return false;
74 info_.back().counter_ -= 1;
75 if (info_.back().autoDel_ && info_.back().counter_ <= 0) {
83 Self<Myself>
const self;
128 std::list<Medium const*>
const&
pipe()
const {
145 virtual Output
goThrough(Input
const& in)
const = 0;
173 virtual bool frontAdd(Medium
const* ptr,
bool auto_delete) {
174 return self()->
frontAdd(ptr, auto_delete);
183 virtual bool backAdd(Medium
const* ptr,
bool auto_delete) {
184 return self()->
backAdd(ptr, auto_delete);
209 return self->pipe_.size();
216 return (
size() == 0);
222 virtual Medium
const*
first()
const {
223 return self->pipe_.front().pointer_;
229 virtual Medium
const*
last()
const {
230 return self->pipe_.end().pointer_;
236 #endif // Pipeline_H__