summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1997-11-20 06:35:45 +0000
committerjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1997-11-20 06:35:45 +0000
commit2adc0096e10f1e1cc8fbc31da01f0b64a0f09762 (patch)
treedc454744bd52aac5e7e4862711e8302c1bedf513
parent09e5d2ffc3b0bdb1cb3354a5c9ade669110fde87 (diff)
downloadATCD-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.cpp62
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_;
}