Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy > Class Template Reference

#include <MemoryGate.h>

List of all members.

Public Member Functions

 MemoryGate ()
 MemoryGate (unsigned fifoSize)
 ~MemoryGate ()
bool sendBuffer (Buffer buff, unsigned n)
template<typename T>
bool sendObject (T *obj)
template<typename T>
bool sendArray (T *obj)
void signalServer ()
void deallocBuffer (void *buff, unsigned n)
template<typename T>
void deallocObject (T *obj)
template<typename T>
void deallocArray (T *obj)
void disconnect ()
bool isConnected () const
void _respondToServerSeverance ()

Private Types

typedef void * Buffer
typedef Overflow_Template<
MemoryMessage
Overflow
 Raised when an operation could not complete because of no room available in some queue.

Private Member Functions

template<typename T>
void _raiseError (T const &err) const
bool _sendMessage (MemoryMessage const &msg)
bool _sendMessageAndSignal (MemoryMessage const &msg)

Private Attributes

Atomic< bool > _serverConnected
boost::shared_ptr< MessagePort<
MemoryMessage > > 
_memoryOut

Friends

class MemoryDeallocServer

Classes

class  ServerRemover


Detailed Description

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
class ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >

Note:
Remember that all policies should have protected constructors taking NO arguments. Policies which expose public constructors and manipulate policy pointers are not dissallowed, but you better know what you are doing.


Member Typedef Documentation

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
typedef void* ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::Buffer [private]
 

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
typedef Overflow_Template<MemoryMessage> ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::Overflow [private]
 

Raised when an operation could not complete because of no room available in some queue.


Constructor & Destructor Documentation

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::MemoryGate  )  [inline]
 

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::MemoryGate unsigned  fifoSize  )  [inline]
 

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::~MemoryGate  )  [inline]
 


Member Function Documentation

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
template<typename T>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::_raiseError T const &  err  )  const [inline, private]
 

_raiseError Processes an error, and throws it by default. You may specialize this function for std::exception to 'override' the default implementation, and handle errors in a more efficient, or more verbose way.

Parameters:
err The error to raise

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::_respondToServerSeverance  )  [inline]
 

_respondToServerSeverance Reacts to a server shutdown message, by clearing it's input and output fifo's and sending any remaining buffers to _deallocateLateBuffer().

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
bool ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::_sendMessage MemoryMessage const &  msg  )  [inline, private]
 

_sendMessage Sends a message to the server.

Parameters:
msg The message to send
Returns:
True if there was not overflow on send

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
bool ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::_sendMessageAndSignal MemoryMessage const &  msg  )  [inline, private]
 

_sendMessage Sends a message to the server and signals it's semaphore.

Parameters:
msg The message to send
Returns:
True if there was not overflow on send

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
template<typename T>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::deallocArray T *  obj  )  [inline]
 

deallocArray Sends an array of objects to the MemoryDeallocServer to be destroyed.

Note:
Use deallocBuffer when you want to destroy a raw buffer, and do not care about calling the element's destructors.
Parameters:
obj The object array to dealloc
See also:
deallocBuffer()

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::deallocBuffer void *  buff,
unsigned  n
[inline]
 

deallocBuffer Deallocates the buffer 'buff' with n bytes.

Note:
that if you do not know the size of the buffer, you may still dealloc it with a size of 0, it will be put through the user supplied policies, or sent to the MemoryServer. All this is done very quickly (wait free), with the only possible locking being in the user supplied policies.

This may or may not throw an exception upon failure, as error policy is compile time configurable by the user.

Parameters:
buff The buffer to deallocate
n The size of the buffer in bytes
See also:
_raiseError()

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
template<typename T>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::deallocObject T *  obj  )  [inline]
 

deallocObject Sends an object to the MemoryDeallocServer to be destroyed.

Parameters:
obj The object to destroy
See also:
deallocBuffer()

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::disconnect  )  [inline]
 

disconnect Sends a disconnection request to the connected server and returns immediatly. If the request is fulfilled then isConnected() will return false after an indeterminate amount of time. Note that since shared references to the communication ports are used, you can safely delete this gate immediatly after calling disconnect() successfully (please check errors!).

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
bool ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::isConnected  )  const [inline]
 

isConnected

Returns:
True if this gate is connected to a server

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
template<typename T>
bool ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::sendArray T *  obj  )  [inline]
 

sendArray Sends an array of objects to the server to be destroyed.

Parameters:
obj The object array to send
Returns:
True if a server is connected to the gate and a send was attempted

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
bool ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::sendBuffer Buffer  buff,
unsigned  n
[inline]
 

sendBuffer Sends a buffer to the server to be deallocated.

Parameters:
buff The buffer to send
n The size of the buffer, in bytes
Returns:
True if a server is connected to the gate and a send was attempted

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
template<typename T>
bool ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::sendObject T *  obj  )  [inline]
 

sendObject Sends an object to the server to be destroyed.

Parameters:
obj The object to send
Returns:
True if a server is connected to the gate and a send was attempted

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
void ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::signalServer  )  [inline]
 

notifyServer Tickles the servers semaphore, to notify of pending returns. Note that this function does NOT check if this gate is connected to a server.


Friends And Related Function Documentation

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
friend class MemoryDeallocServer [friend]
 


Member Data Documentation

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
boost::shared_ptr<MessagePort<MemoryMessage> > ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::_memoryOut [private]
 

template<class BufferDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_BUFFER_DEALLOC_POLICY, class ObjectDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_OBJECT_DEALLOC_POLICY, class ArrayDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_ARRAY_DEALLOC_POLICY, class LateDeallocPolicy = ARK_MEMORY_GATE_DEFAULT_LATE_DEALLOC_POLICY, class SignalServerPolicy = ARK_MEMORY_GATE_DEFAULT_SIGNAL_SERVER_POLICY>
Atomic<bool> ark::MemoryGate< BufferDeallocPolicy, ObjectDeallocPolicy, ArrayDeallocPolicy, LateDeallocPolicy, SignalServerPolicy >::_serverConnected [private]
 


The documentation for this class was generated from the following file:
Generated on Tue Sep 6 14:54:40 2005 for Arkonnekt Sound by  doxygen 1.4.4