Suuports clang compiler
[anna.git] / include / anna / core / oam / Module.hpp
index 2f0bbe6..032c3a3 100644 (file)
@@ -1,8 +1,8 @@
-// ANNA - Anna is Not 'N' Anymore
+// ANNA - Anna is Not Nothingness Anymore
 //
 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
 //
-// https://bitbucket.org/testillano/anna
+// http://redmine.teslayout.com/projects/anna-suite
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -14,7 +14,7 @@
 // copyright notice, this list of conditions and the following disclaimer
 // in the documentation and/or other materials provided with the
 // distribution.
-//     * Neither the name of Google Inc. nor the names of its
+//     *  Neither the name of the copyright holder nor the names of its
 // contributors may be used to endorse or promote products derived from
 // this software without specific prior written permission.
 //
@@ -57,6 +57,7 @@ class Node;
 }
 namespace oam {
 class CounterScope;
+class CounterRecorder;
 }
 }
 
@@ -206,7 +207,16 @@ class Module {
   counter_iterator counter_find(const int &key) throw() { return a_counters.find(key); }
   counter_iterator counter_begin() throw() { return a_counters.begin(); }
   counter_iterator counter_end() throw() { return a_counters.end(); }
+  CounterRecorder* a_counterRecorder;
+  bool a_counterRecording;
 
+  class RecordingGuard {
+    public:
+      RecordingGuard(Module*);
+      ~RecordingGuard();
+    private:
+      Module *a_module;
+  };
 
   // Alarms
   typedef alarm_container::iterator alarm_iterator;
@@ -223,21 +233,25 @@ class Module {
 
 public:
 
+  static const int MaxScope = 100; /**< Numero maximo de ambitos */
+
+
   /** Constructor
       @param className Logical name for the class (better use fullNaming format including namespace resolution)
    */
   Module(const std::string &className) :    a_className(className),
     a_handler(&a_defaultHandler),
     a_counters_enabled(true),
+    a_counterRecorder(NULL),
+    a_counterRecording(false),
     a_alarms_enabled(true),
     a_alarms_preffix_enabled(true),
     a_alarms_suffix_enabled(true) {;}
 
-
   /**
    * Destructor
    */
-  virtual ~Module() {;}
+  virtual ~Module();
 
 
   /**
@@ -435,6 +449,22 @@ public:
   int resetCounters(const int & scopeId = -1) throw();
 
 
+  /**
+  * Sets the instance for the class which will save the counters information.
+  * @counterRecorder Provided instance
+  * @warning It should be invoked periodically as a common solution
+  */
+  void setCounterRecorder(CounterRecorder* counterRecorder) throw() { a_counterRecorder = counterRecorder; }
+
+  /**
+  * Dumps the modified counters from last invocation to this method.
+  * A counter recorder should have been assigned by mean setCounterRecorder(), which
+  * will have the specific behaviour. This procedure is oriented to have physical storage
+  * for counters information.
+  */
+  void recordCounters() throw(anna::RuntimeException);
+
+
   /**
   * Activates alarm with dynamic-composed text parsed with provided data (...).
   * Used at MODULE implementation (library or proccess itself)
@@ -442,7 +472,7 @@ public:
   * @param alarmType Alarm enum-identification within the own context/module
   * @param ... Optional parsing data for dynamic-composed text.
   */
-  void activateAlarm(const int & type, ...) const throw(anna::RuntimeException);
+  void activateAlarm(int type, ...) const throw(anna::RuntimeException);
 
 
   /**
@@ -452,7 +482,7 @@ public:
   * @param alarmType Alarm enum-identification within the own context/module
   * @param ... Optional parsing data for dynamic-composed text.
   */
-  void cancelAlarm(const int & type, ...) const throw(anna::RuntimeException);
+  void cancelAlarm(int type, ...) const throw(anna::RuntimeException);
 
 
   /**
@@ -499,6 +529,9 @@ protected:
   * @param components Alarm suffix components defined by oam module. Empty on default implementation.
   */
   virtual void readAlarmSuffixComponents(std::vector<std::string> & components) const throw() {;}
+
+
+  friend class RecordingGuard;
 };
 
 }