ACE
6.1.0
|
Allows atomic token group operations AND provides a ACE_Token manager interface. More...
#include <Token_Collection.h>
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_Proxy * | is_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_TCHAR * | name (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_Proxy * | clone (void) const |
Return a dynamically allocated clone of the derived class. | |
virtual ACE_Tokens * | create_token (const ACE_TCHAR *name) |
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. |
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.
typedef ACE_Map_Manager<TOKEN_NAME, ACE_Token_Proxy *, ACE_Null_Mutex> ACE_Token_Collection::COLLECTION [protected] |
COLLECTION maintains a mapping from token names to ACE_Tokens*.
typedef ACE_Token_Name ACE_Token_Collection::TOKEN_NAME [protected] |
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 | ) |
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 [protected, virtual] |
Return a dynamically allocated clone of the derived class.
Implements ACE_Token_Proxy.
ACE_Tokens * ACE_Token_Collection::create_token | ( | const ACE_TCHAR * | name | ) | [protected, virtual] |
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.
Reimplemented from ACE_Token_Proxy.
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 [inline, virtual] |
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.
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.
Reimplemented from ACE_Token_Proxy.
ACE_TCHAR ACE_Token_Collection::name_[ACE_MAXTOKENNAMELEN] [protected] |
Name of the collection.