diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1997-11-20 06:35:45 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1997-11-20 06:35:45 +0000 |
commit | 2adc0096e10f1e1cc8fbc31da01f0b64a0f09762 (patch) | |
tree | dc454744bd52aac5e7e4862711e8302c1bedf513 | |
parent | 09e5d2ffc3b0bdb1cb3354a5c9ade669110fde87 (diff) | |
download | ATCD-2adc0096e10f1e1cc8fbc31da01f0b64a0f09762.tar.gz |
Made the pipeline a doubly linked list of components, so that it cah
be operated as push-driven or pull-driven pipelines.
-rw-r--r-- | apps/JAWS/server/Pipeline.cpp | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/apps/JAWS/server/Pipeline.cpp b/apps/JAWS/server/Pipeline.cpp index 9448912bf29..c3494d54055 100644 --- a/apps/JAWS/server/Pipeline.cpp +++ b/apps/JAWS/server/Pipeline.cpp @@ -8,7 +8,7 @@ JAWS_Protocol_Pipeline::JAWS_Protocol_Pipeline (void) JAWS_Protocol_Pipeline::JAWS_Protocol_Pipeline (JAWS_Protocol_Pipeline *pp) { - this->pipeline (pp); + this->insert (pp); } JAWS_Protocol_Pipeline::~JAWS_Protocol_Pipeline (void) @@ -20,11 +20,25 @@ JAWS_Protocol_Pipeline::pull (ACE_Message_Block &mb) { int result = 0; - if (this->pipeline () != 0) - result = this->pipeline ()->pull (mb); + if (this->prev_pipe () != 0) + result = this->prev_pipe ()->pull (mb); if (result == 0) - result = this->hook (mb); + result = this->pull_hook (mb); + + return result; +} + +int +JAWS_Protocol_Pipeline::push (ACE_Message_Block &mb) +{ + int result = 0; + + if (result == 0) + result = this->push_hook (mb); + + if (this->next_pipe () != 0) + result = this->next_pipe ()->push (mb); return result; } @@ -47,8 +61,9 @@ JAWS_Protocol_Pipeline::insert (JAWS_Protocol_Pipeline *pp) if (pp == 0) return; - pp->append (this->pipeline ()); - this->pipeline (pp); + if (this->prev_pipe () != 0) + this->prev_pipe ()->append (pp); + pp->append (this); } void @@ -58,24 +73,34 @@ JAWS_Protocol_Pipeline::append (JAWS_Protocol_Pipeline *pp) return; JAWS_Protocol_Pipeline *p; - for (p = this; p->pipeline () != 0; p = p->pipeline ()) + for (p = this; p->next_pipe () != 0; p = p->next_pipe ()) ; - p->pipeline (pp); + p->next_pipe (pp); + pp->prev_pipe (p); } JAWS_Protocol_Pipeline * -JAWS_Protocol_Pipeline::pipeline (JAWS_Protocol_Pipeline *) +JAWS_Protocol_Pipeline::prev_pipe (JAWS_Protocol_Pipeline *) +{ + return 0; +} + +JAWS_Protocol_Pipeline * +JAWS_Protocol_Pipeline::next_pipe (JAWS_Protocol_Pipeline *) { return 0; } JAWS_Protocol_Filter::JAWS_Protocol_Filter (void) - : pipeline_ (0) + : prev_pipe_ (0), + next_pipe_ (0) { } JAWS_Protocol_Filter::JAWS_Protocol_Filter (JAWS_Protocol_Pipeline *pp) - : pipeline_ (pp) + : prev_pipe_ (0), + next_pipe_ (0), + JAWS_Protocol_Pipeline (pp) { } @@ -90,10 +115,19 @@ JAWS_Protocol_Filter::add (JAWS_Protocol_Pipeline *component) } JAWS_Protocol_Pipeline * -JAWS_Protocol_Filter::pipeline (JAWS_Protocol_Pipeline *pp) +JAWS_Protocol_Filter::prev_pipe (JAWS_Protocol_Pipeline *pp) +{ + if (pp != 0) + this->prev_pipe_ = pp; + + return this->prev_pipe_; +} + +JAWS_Protocol_Pipeline * +JAWS_Protocol_Filter::next_pipe (JAWS_Protocol_Pipeline *pp) { if (pp != 0) - this->pipeline_ = pp; + this->next_pipe_ = pp; - return this->pipeline_; + return this->next_pipe_; } |