9 #ifndef anna_timex_Context_hpp 10 #define anna_timex_Context_hpp 66 Guard guard(a_mutex,
"timex::Context::open");
67 transaction_iterator ii = a_transactions.find(tid);
69 if(ii != a_transactions.end()) {
70 std::string msg(transaction(ii)->
asString());
71 msg +=
" | Already in progress";
76 std::string msg(
"timex::Context::createTransaction returned NULL | ClassType: ");
87 std::pair <transaction_iterator, bool> rr = a_transactions.insert(value_type(tid, result));
99 std::string msg(
"timex::Context::open | ");
114 Guard guard(a_mutex,
"timex::Context::find");
115 transaction_iterator ii = a_transactions.find(tid);
116 Transaction* result = (ii != a_transactions.end()) ? transaction(ii) : NULL;
120 std::string msg(
"Transaction: ");
122 msg +=
" | Tid not found";
125 std::string msg(
"Transaction: ");
127 msg +=
" | Tid not found";
142 if(transaction == NULL)
145 const void* context = transaction->
getContext();
147 if(context == NULL) {
148 std::string msg(
"timex::Context::getIdentifier | ");
150 msg +=
" | Can not work with NULL context";
163 if(transaction == NULL)
167 std::string msg(
"timex::Context::close | ");
173 a_timeController.
cancel(transaction);
188 result->
createAttribute(
"AvgSize", (a_counter == 0) ? 0 : a_accSize / a_counter);
204 if(transaction == NULL)
222 a_timeController(timeController),
224 a_counter = a_accDelay = a_accSize = 0;
259 typedef typename std::map <Tid, Transaction*> transaction_container;
260 typedef typename transaction_container::iterator transaction_iterator;
261 typedef typename transaction_container::value_type value_type;
264 transaction_container a_transactions;
267 unsigned int a_counter;
268 unsigned int a_accDelay;
269 unsigned int a_accSize;
275 Guard guard(a_mutex,
"timex::Context::release");
278 const int size = a_transactions.size();
281 if(++ a_counter == 0 || (a_accDelay + delay) < a_accDelay || (a_accSize + size) < a_accSize) {
289 if(a_transactions.erase(tid) == 0) {
290 std::string msg(
"Transaction: ");
292 msg +=
" | Tid can not be erased from map";
298 a_accSize += a_transactions.size();
301 static Transaction* transaction(transaction_iterator ii) {
return ii->second; }
virtual Transaction * createTransaction(const int classType)=0
Definition: Exception.hpp:26
#define anna_ptrnumber_cast(pointer)
Definition: defines.hpp:118
Definition: Millisecond.hpp:24
xml::Attribute * createAttribute(const char *name, const char *value, const Namespace *_namespace=NULL)
Definition: Exception.hpp:26
static void information(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:316
void setId(const Id id)
Definition: TimeEvent.hpp:69
Definition: Transaction.hpp:34
virtual std::string asString() const
Definition: Transaction.hpp:84
_v
Definition: Exception.hpp:26
Node * createChild(const char *name)
Transaction * open(const Tid &tid, const int classType=0) noexcept(false)
Definition: Context.hpp:62
#define LOGINFORMATION(a)
Definition: defines.hpp:62
Millisecond getDelay() const
Definition: Meter.hpp:98
void setContext(void *context)
Definition: Transaction.hpp:78
static std::string asString(const int number)
void setObserver(TimeEventObserver *observer)
Definition: TimeEvent.hpp:85
void cancel(TimeEvent *timeEvent) noexcept(false)
static void warning(const std::string &text, const char *fromFile, const int fromLine)
Definition: Logger.hpp:338
virtual void releaseTransaction(Transaction *transaction)=0
void activate(TimeEvent *timeEvent) noexcept(false)
void * getContext()
Definition: Transaction.hpp:66
const Tid & getIdentifier(const Transaction *transaction) const noexcept(false)
Definition: Context.hpp:140
Definition: TimeEvent.hpp:26
Definition: Logger.hpp:41
void setTimeout(const Millisecond &timeout)
Definition: TimeEvent.hpp:75
const TimeEventObserver * getObserver() const
Definition: TimeEvent.hpp:61
virtual xml::Node * asXML(xml::Node *parent) const
Definition: Context.hpp:184
virtual std::string identifierAsString(const Tid &tid) const =0
type_t getValue() const
Definition: Millisecond.hpp:120
Millisecond setControlPoint()
Definition: Meter.hpp:62
Definition: TimeEventObserver.hpp:33
void close(Transaction *transaction)
Definition: Context.hpp:161
#define ANNA_FILE_LOCATION
Definition: defines.hpp:23
Transaction * find(const Tid &tid, const Exception::Mode::_v emode=Exception::Mode::Throw) noexcept(false)
Definition: Context.hpp:112
Definition: Engine.hpp:62
std::string asString() const
Definition: TimeEventObserver.hpp:45
static const Context * getInstance(const Transaction *transaction) noexcept(false)
Definition: Context.hpp:202
Definition: RuntimeException.hpp:23
Context(const char *observerName, timex::Engine &timeController, const Millisecond &timeout)
Definition: Context.hpp:220
virtual const Tid & contextAsIdentifier(const void *tid) const =0
Definition: Context.hpp:48
static bool isActive(const Level level)
Definition: Logger.hpp:169