Thread::Apartment::Common

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_SIMPLEX` | flag indicating a method/closure is simplex (i.e., does not return results)
`TA_URGENT` | flag indicating a method/closure is urgent (i.e., should be posted to the head of the proxied object's TQD)
`TA_NO_OBJECTS` | flag 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