SUMMARY: CONSTR | METHOD DETAIL: CONSTR | METHOD

Class Thread::Apartment::Common

Known Subclasses:
Thread::Apartment::Server
Thread::Apartment::Client

Provides common marshalling/unmarshalling methods, and common exported constants.

Licensed under the Academic Free License version 2.1, as specified in the License.txt file included in this software package, or at OpenSource.org.

Author:
D. Arnold
Version:
0.50
Since:
2005-12-01

Unless otherwise noted, $self is the object instance variable.

Exported Symbols
TA_SIMPLEXflag indicating a method/closure is simplex (i.e., does not return results)
TA_URGENTflag indicating a method/closure is urgent (i.e., should be posted to the head of the proxied object's TQD)
TA_NO_OBJECTSflag indicating a method does not return objects. Used by Thread::Apartment::Server objects to optimize the marhsalling of returned method results.

Method Summary
marshal(@params)
          Marshall input parameters into a TQD-compatible format
unmarshal($result)
          Unmarshall the contents of the arrayref previsouly marshalled via marshal()

Method Details

marshal

marshal(@params)

Marshall input parameters into a TQD-compatible format. Each parameter is converted to a 2-tuple of a class descriptor string (undef for simple scalar parameters), and the marshalled version of the parameter. Marshalling rules are:

  1. Scalars and threads::shared values are marshalled as is.
  2. non-threads::shared references to scalars, arrays, or hashes, or objects which do not implement Thread::Queue::Queueable are marshalled via Storable
  3. closures are converted to Thread::Apartment::Closure objects.
  4. Thread::Apartment::Server objects are marshalled using their TAC's
  5. Thread::Queue::Queueable objects are marshalled using their onEnqueue()/curse() methods.

NOTE: Passing of GLOBs or other I/O objects is not currently supported; applications are responsible for implementing TQQ to curse() them into their fileno, and redeem() them via an fdopen() operation in the receiving thread.

Parameters:
@params - parameters/results to be marshalled
Returns:
threads::shared arrayref of marshalled parameters

unmarshal

unmarshal($result)

Unmarshall the contents of the arrayref previsouly marshalled via marshal(). input parameters into a TQD-compatible format. Each parameter is retrieved from the 2-tuple (class descriptor, marshalled value).

Unmarshalling rules are:

  1. If the class descriptor is undef, the marshalled value is used as is
  2. if the class descriptor is 'Storable', Storable::thaw() is used to recover the parameter value
  3. if the marshalled value is threads::shared, the object is simply reblessed into the class
  4. all other classes are assumed to be Thread::Queue::Queueable, and the class's redeem() method is called to recover the object.

Parameters:
$result - arrayref of marshalled parameters/results
Returns:
arrayref of unmarshalled parameters

Generated by psichedoc on Mon Mar 27 08:51:36 2006