From 48273f3182ac2bdc5cb6edb88c6e8abaa8c2606b Mon Sep 17 00:00:00 2001 From: pjain Date: Mon, 10 Mar 1997 21:31:01 +0000 Subject: Java version of ACE_Module --- java/src/Module.java | 253 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 java/src/Module.java (limited to 'java/src') diff --git a/java/src/Module.java b/java/src/Module.java new file mode 100644 index 00000000000..d3ecae2c67c --- /dev/null +++ b/java/src/Module.java @@ -0,0 +1,253 @@ +/************************************************* + * + * = PACKAGE + * ACE.ASX + * + * = FILENAME + * Module.java + * + *@author Prashant Jain + * + *************************************************/ +package ACE.ASX; + +import ACE.OS.*; + +/** + *
+ *

SYNOPSIS

+ *
+ * Provides an abstraction for managing a bi-directional flow of + * messages. + *
+ * + *

DESCRIPTION

+ *
+ * This is based on the Module concept in System V Streams, + * which contains a pair of Tasks, one for handling upstream + * processing, one for handling downstream processing. + *
+ */ +public class Module +{ + // = Initialization and termination methods. + + /** + * Create an empty Module. + */ + public Module () + { + // Do nothing... + this.name (""); + } + + /* + * Create an initialized module. + *@param modName identity of the module. + *@param writerQ writer task of the module. + *@param readerQ reader task of the module. + *@param flags Module flags + */ + public Module (String modName, + Task writerQ, + Task readerQ, + Object flags) + { + this.open (modName, writerQ, readerQ, flags); + } + + /* + * Create an initialized module. + *@param modName identity of the module. + *@param writerQ writer task of the module. + *@param readerQ reader task of the module. + *@param flags Module flags + */ + public void open (String modName, + Task writerQ, + Task readerQ, + Object arg) + { + this.name (modName); + this.arg_ = arg; + + if (writerQ == null) + writerQ = new ThruTask (); + if (readerQ == null) + readerQ = new ThruTask (); + + this.reader (readerQ); + this.writer (writerQ); + + // Setup back pointers. + readerQ.module (this); + writerQ.module (this); + } + + + /* + * Set the writer task. + *@param q the writer task + */ + public void writer (Task q) + { + this.qPair_[1] = q; + if (q != null) + q.flags (ACE.CLR_BITS (q.flags (), TaskFlags.ACE_READER)); + } + + /* + * Set the reader task. + *@param q the reader task + */ + public void reader (Task q) + { + this.qPair_[0] = q; + if (q != null) + q.flags (ACE.SET_BITS (q.flags (), TaskFlags.ACE_READER)); + } + + /* + * Link this Module on top of Module. + *@param m the module to link this on top of. + */ + public void link (Module m) + { + this.next (m); + this.writer ().next (m.writer ()); + m.reader ().next (this.reader ()); + } + + /* + * Set and get pointer to sibling Task in Module. + *@param orig the task to get the sibling for + *@return the sibling of the task + */ + public Task sibling (Task orig) + { + if (this.qPair_[0] == orig) + return this.qPair_[1]; + else if (this.qPair_[1] == orig) + return this.qPair_[0]; + else + return null; + } + + /* + * Close down the module and its tasks. + *@param flags Module flags + *@return 0 on success, -1 on failure + */ + public int close (long flags) + { + Task readerQ = this.reader (); + Task writerQ = this.writer (); + int result = 0; + + if (readerQ != null) + { + if (readerQ.close (flags) == -1) + result = -1; + readerQ.flush (flags); + readerQ.next (null); + } + + if (writerQ != null) + { + if (writerQ.close (flags) == -1) + result = -1; + writerQ.flush (flags); + writerQ.next (null); + } + + return result; + } + + /* + * Get the argument passed to tasks. + *@return the argument passed to tasks. + */ + public Object arg () + { + return this.arg_; + } + + /* + * Set the argument to be passed to tasks. + *@param a the argument to be passed to tasks. + */ + public void arg (Object a) + { + this.arg_ = a; + } + + /* + * Get the name of the module. + *@return the name of the module. + */ + public String name () + { + return this.name_; + } + + /* + * Set the name of the module. + *@param n the name of the module. + */ + public void name (String n) + { + this.name_ = n; + } + + /* + * Get the writer task of the module. + *@return the writer task of the module. + */ + public Task writer () + { + return this.qPair_[1]; + } + + /* + * Get the reader task of the module. + *@return the reader task of the module. + */ + public Task reader () + { + return this.qPair_[0]; + } + + /* + * Get the next pointer to the module above in the stream. + *@return the next pointer to the module above in the stream. + */ + public Module next () + { + return this.next_; + } + + /* + * Set the next pointer to the module above in the stream. + *@param m the next pointer to the module above in the stream. + */ + public void next (Module m) + { + this.next_ = m; + } + + private Task qPair_[] = new Task[2]; + // Pair of Tasks that form the "read-side" and "write-side" of the + // ACE_Module partitioning. + + private String name_ = null; + // Name of the ACE_Module. + + private Module next_; + // Next ACE_Module in the stack. + + private Object arg_; + // Argument passed through to the reader and writer task when they + // are opened. + +} + -- cgit v1.2.1