19 #ifndef INCLUDE_RCF_TOKEN_HPP
20 #define INCLUDE_RCF_TOKEN_HPP
25 #include <boost/noncopyable.hpp>
27 #include <RCF/Export.hpp>
28 #include <RCF/Config.hpp>
29 #include <RCF/ThreadLibrary.hpp>
30 #include <RCF/TypeTraits.hpp>
40 class RCF_EXPORT Token
46 friend bool operator<(
const Token &lhs,
const Token &rhs);
47 friend bool operator==(
const Token &lhs,
const Token &rhs);
48 friend bool operator!=(
const Token &lhs,
const Token &rhs);
50 #ifdef RCF_USE_SF_SERIALIZATION
52 void serialize(SF::Archive &ar);
56 #ifdef RCF_USE_BOOST_SERIALIZATION
58 template<
typename Archive>
59 void serialize(Archive &ar,
const unsigned int)
61 ar & boost::serialization::make_nvp(
"Id", mId);
66 friend RCF_EXPORT std::ostream &operator<<(std::ostream &os,
const Token &token);
72 class TokenFactory : boost::noncopyable
75 TokenFactory(
int tokenCount);
77 bool requestToken(Token &token);
78 void returnToken(
const Token &token);
79 const std::vector<Token> & getTokenSpace();
80 std::size_t getAvailableTokenCount();
81 bool isAvailable(
const Token & token);
84 std::vector<Token> mTokenSpace;
85 std::vector<Token> mAvailableTokens;
86 ReadWriteMutex mMutex;
91 #endif // ! INCLUDE_RCF_TOKEN_HPP