ACE  6.1.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
ACE_Token_Collection Class Reference

Allows atomic token group operations AND provides a ACE_Token manager interface. More...

#include <Token_Collection.h>

Inheritance diagram for ACE_Token_Collection:
Inheritance graph
[legend]
Collaboration diagram for ACE_Token_Collection:
Collaboration graph
[legend]

Public Member Functions

 ACE_Token_Collection (bool debug=false, const ACE_TCHAR *name=0)
 
int insert (ACE_Token_Proxy &token)
 
int extract (const ACE_TCHAR *token_name, ACE_Token_Proxy *&proxy)
 
ACE_Token_Proxyis_member (const ACE_TCHAR *token_name)
 Returns the proxy if true. 0 otherwise.
 
int is_member (const ACE_Token_Proxy &token)
 
virtual int acquire (int notify=0, void(*sleep_hook)(void *)=0, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int acquire (const ACE_TCHAR *token_name, int notify=0, void(*sleep_hook)(void *)=0, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int tryacquire (void(*sleep_hook)(void *)=0)
 Try to acquire all tokens in collection.
 
virtual int tryacquire (const ACE_TCHAR *token_name, void(*sleep_hook)(void *)=0)
 Try to acquire token_name.
 
virtual int renew (int requeue_position=0, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int renew (const ACE_TCHAR *token_name, int requeue_position=0, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int release (ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int release (const ACE_TCHAR *token_name, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
 ~ACE_Token_Collection (void)
 
void dump (void) const
 Dump the state of the class.
 
virtual const ACE_TCHARname (void) const
 
- Public Member Functions inherited from ACE_Token_Proxy
 ACE_Token_Proxy (void)
 Construction.
 
virtual ~ACE_Token_Proxy (void)
 Destructor.
 
virtual int open (const ACE_TCHAR *name, int ignore_deadlock=0, int debug=0)
 
virtual int remove (ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 Calls remove on the token.
 
virtual int acquire_read (int notify=0, void(*sleep_hook)(void *)=0, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int acquire_write (int notify=0, void(*sleep_hook)(void *)=0, ACE_Synch_Options &options=ACE_Synch_Options::defaults)
 
virtual int tryacquire_read (void(*sleep_hook)(void *)=0)
 
virtual int tryacquire_write (void(*sleep_hook)(void *)=0)
 
virtual const ACE_TCHARclient_id (void) const
 
virtual void client_id (const ACE_TCHAR *client_id)
 
virtual void sleep_hook (void)
 
virtual void token_acquired (ACE_TPQ_Entry *)
 
virtual const ACE_TCHARowner_id (void)
 The client id of the current token holder.
 
void dump (void) const
 Dump the state of the class.
 
virtual int type (void) const
 

Protected Types

typedef ACE_Token_Name TOKEN_NAME
 
typedef ACE_Map_Manager
< TOKEN_NAME, ACE_Token_Proxy
*, ACE_Null_Mutex
COLLECTION
 COLLECTION maintains a mapping from token names to ACE_Tokens*.
 

Protected Member Functions

virtual ACE_Token_Proxyclone (void) const
 Return a dynamically allocated clone of the derived class.
 
virtual ACE_Tokenscreate_token (const ACE_TCHAR *name)
 
- Protected Member Functions inherited from ACE_Token_Proxy
 ACE_Token_Proxy (const ACE_Token_Proxy &)
 Duplication.
 
int handle_options (ACE_Synch_Options &options, ACE_TOKEN_CONST::COND_VAR &cv)
 Handles cond_var waits.
 

Protected Attributes

COLLECTION collection_
 COLLECTION maintains a mapping from token names to ACE_Tokens*.
 
bool debug_
 Whether to print out debug messages or not.
 
ACE_TCHAR name_ [ACE_MAXTOKENNAMELEN]
 Name of the collection.
 
- Protected Attributes inherited from ACE_Token_Proxy
int ignore_deadlock_
 If this is set, we ignore deadlock.
 
int debug_
 Print a bunch of debug messages.
 
ACE_Tokenstoken_
 
ACE_TSS_TPQ_Entry waiter_
 Waiter info used for asynchronous transactions.
 

Detailed Description

Allows atomic token group operations AND provides a ACE_Token manager interface.

There are two types of operations offered by ACE_Token_Collection. The first is atomic operations on collections of Token_Proxies. In this respect, the ACE_Token_Collection can be thought of as a single token consisting of multiple Token_Proxies. The second role of the ACE_Token_Collection is as a ACE_Token manager. ACE_Token_Collection allows individual operations on single members of a collection of Token_Proxies. This provides a single access point for operations on multiple tokens.

Bug:
Although ACE_Token_Collection inherits from ACE_Token_Proxy, it can not be including in a collection. This is because <clone> returns zero for now.

Member Typedef Documentation

COLLECTION maintains a mapping from token names to ACE_Tokens*.

Constructor & Destructor Documentation

ACE_Token_Collection::ACE_Token_Collection ( bool  debug = false,
const ACE_TCHAR name = 0 
)

debug print out verbose debugging messages. name will give a name to the collection. Collections don't really need names, but are sometimes useful for debugging.

ACE_Token_Collection::~ACE_Token_Collection ( void  )

Member Function Documentation

int ACE_Token_Collection::acquire ( int  notify = 0,
void(*)(void *)  sleep_hook = 0,
ACE_Synch_Options options = ACE_Synch_Options::defaults 
)
virtual

Acquire "atomically" all resources in the collection. This is only successfull if all tokens in the collection could be acquired. options contains the blocking semantics, timeout value, etc. Returns: 0 on success, -1 on failure with errno == problem. If and error or deadlock occurs for one of the tokens, all the tokens will be released and the method will return -1. Note that returning on detection of deadlock prevents livelock between competing collections. If a collection returns after detecting deadlock, it is the application's responsibility to not to blindly loop on the collection::acquire operation. In other words, once the collection reports deadlock, it is out of our hands.

Reimplemented from ACE_Token_Proxy.

int ACE_Token_Collection::acquire ( const ACE_TCHAR token_name,
int  notify = 0,
void(*)(void *)  sleep_hook = 0,
ACE_Synch_Options options = ACE_Synch_Options::defaults 
)
virtual

Acquire the token corresponding to token_name. The other parameters are passed to <token>::acquire.

ACE_Token_Proxy * ACE_Token_Collection::clone ( void  ) const
protectedvirtual

Return a dynamically allocated clone of the derived class.

Implements ACE_Token_Proxy.

ACE_Tokens * ACE_Token_Collection::create_token ( const ACE_TCHAR name)
protectedvirtual

Make the correct type of ACE_Tokens. This is called by the Token Manager.

Implements ACE_Token_Proxy.

void ACE_Token_Collection::dump ( void  ) const

Dump the state of the class.

int ACE_Token_Collection::extract ( const ACE_TCHAR token_name,
ACE_Token_Proxy *&  proxy 
)

Removes the ACE_Token matching the given token_name from the collection. On success, extract returns 0. On failure (token_name was not in the collection,) extract returns -1. On success, the state of the token found is copied into proxy. The returned ACE_Token_Proxy* must be deleted by the user.

int ACE_Token_Collection::insert ( ACE_Token_Proxy token)

Insert a Token into the collection. All ACE_Token type operations performed on the collection will also be performed on the new_proxy until it is removed. Note that no operations performed prior to the insertion will be performed. Returns: 0 on success, -1 on failure with errno == problem. If a token proxy already exists in the collection with the same name, the insertion will fail. Also, <token> is copied. Note that during the copy, client_id's are not inherited. The client ID of the thread using the collection will be used. Client ID's can be changed explicity on each proxy using is_member.

ACE_Token_Proxy * ACE_Token_Collection::is_member ( const ACE_TCHAR token_name)

Returns the proxy if true. 0 otherwise.

int ACE_Token_Collection::is_member ( const ACE_Token_Proxy token)

Is the specified token in the collection? 1, yes. 0, no.

const ACE_TCHAR * ACE_Token_Collection::name ( void  ) const
inlinevirtual

Return the name of the collection. Not very functionally important, but sometimes a useful debugging tool.

Reimplemented from ACE_Token_Proxy.

int ACE_Token_Collection::release ( ACE_Synch_Options options = ACE_Synch_Options::defaults)
virtual

Releases "atomically" all resources in the collection. This is only successfull if all tokens in the collection could be released. options contains the blocking semantics, timeout value, etc. Returns: 0 on success, -1 on failure with errno == problem.

Reimplemented from ACE_Token_Proxy.

int ACE_Token_Collection::release ( const ACE_TCHAR token_name,
ACE_Synch_Options options = ACE_Synch_Options::defaults 
)
virtual

Release the token corresponding to <token_name>. The other parameters are passed to <token>::release.

int ACE_Token_Collection::renew ( int  requeue_position = 0,
ACE_Synch_Options options = ACE_Synch_Options::defaults 
)
virtual

Renews "atomically" all resources in the collection. This is only successfull if all tokens in the collection could be renewed. options contains the blocking semantics, timeout value, etc. Returns: 0 on success, -1 on failure with errno == problem.

Reimplemented from ACE_Token_Proxy.

int ACE_Token_Collection::renew ( const ACE_TCHAR token_name,
int  requeue_position = 0,
ACE_Synch_Options options = ACE_Synch_Options::defaults 
)
virtual

Renew the token corresponding to token_name. The other parameters are passed to <token>::renew.

int ACE_Token_Collection::tryacquire ( void(*)(void *)  sleep_hook = 0)
virtual

Try to acquire all tokens in collection.

Reimplemented from ACE_Token_Proxy.

int ACE_Token_Collection::tryacquire ( const ACE_TCHAR token_name,
void(*)(void *)  sleep_hook = 0 
)
virtual

Try to acquire token_name.

Member Data Documentation

COLLECTION ACE_Token_Collection::collection_
protected

COLLECTION maintains a mapping from token names to ACE_Tokens*.

bool ACE_Token_Collection::debug_
protected

Whether to print out debug messages or not.

ACE_TCHAR ACE_Token_Collection::name_[ACE_MAXTOKENNAMELEN]
protected

Name of the collection.


The documentation for this class was generated from the following files: