diff options
Diffstat (limited to 'cpp/managementgen')
-rwxr-xr-x | cpp/managementgen/generate.py | 62 | ||||
-rwxr-xr-x | cpp/managementgen/schema.py | 251 | ||||
-rw-r--r-- | cpp/managementgen/templates/Class.cpp | 56 | ||||
-rw-r--r-- | cpp/managementgen/templates/Class.h | 33 |
4 files changed, 300 insertions, 102 deletions
diff --git a/cpp/managementgen/generate.py b/cpp/managementgen/generate.py index da78d6c7e9..197deec4f1 100755 --- a/cpp/managementgen/generate.py +++ b/cpp/managementgen/generate.py @@ -30,39 +30,62 @@ class Template: Expandable File Template - This class is instantiated each time a template is to be expanded. It is instantiated with the "filename" which is the full path to the template file and the "handler" which - is an object that is responsible for storing variables (setVariable) - and expanding tags (substHandler). + is an object that is responsible for storing variables (setVariable), + checking conditions (testCondition), and expanding tags (substHandler). """ def __init__ (self, filename, handler): self.filename = filename self.handler = handler self.handler.initExpansion () + self.writing = True def expandLine (self, line, stream, object): cursor = 0 while 1: sub = line.find ("/*MGEN:", cursor) if sub == -1: - stream.write (line[cursor:len (line)]) + if self.writing: + stream.write (line[cursor:len (line)]) return subend = line.find("*/", sub) - stream.write (line[cursor:sub]) + if self.writing: + stream.write (line[cursor:sub]) cursor = subend + 2 - tag = line[sub:subend] - equalPos = tag.find ("=") - if equalPos == -1: - dotPos = tag.find (".") + tag = line[sub:subend] + + if tag[7:10] == "IF(": + close = tag.find(")") + if close == -1: + raise ValueError ("Missing ')' on condition") + cond = tag[10:close] + dotPos = cond.find (".") if dotPos == -1: - raise ValueError ("Invalid tag: %s" % tag) - tagObject = tag[7:dotPos] - tagName = tag[dotPos + 1:len (tag)] - self.handler.substHandler (object, stream, tagObject, tagName) + raise ValueError ("Invalid condition tag: %s" % cond) + tagObject = cond[0:dotPos] + tagName = cond[dotPos + 1 : len(cond)] + if not self.handler.testCondition(object, tagObject, tagName): + self.writing = False + + elif tag[7:12] == "ENDIF": + self.writing = True + else: - tagKey = tag[7:equalPos] - tagVal = tag[equalPos + 1:len (tag)] - self.handler.setVariable (tagKey, tagVal) + equalPos = tag.find ("=") + if equalPos == -1: + dotPos = tag.find (".") + if dotPos == -1: + raise ValueError ("Invalid tag: %s" % tag) + tagObject = tag[7:dotPos] + tagName = tag[dotPos + 1:len (tag)] + if self.writing: + self.handler.substHandler (object, stream, tagObject, tagName) + else: + tagKey = tag[7:equalPos] + tagVal = tag[equalPos + 1:len (tag)] + if self.writing: + self.handler.setVariable (tagKey, tagVal) def expand (self, object): fd = open (self.filename) @@ -224,6 +247,15 @@ class Generator: call = obj + ".gen" + tag + "(stream, self.variables)" eval (call) + def testCondition (self, object, tagObject, tag): + if tagObject == "Root": + obj = "self" + else: + obj = "object" # MUST be the same as the 2nd formal parameter + + call = obj + ".test" + tag + "(self.variables)" + return eval (call) + def setVariable (self, key, value): self.variables[key] = value diff --git a/cpp/managementgen/schema.py b/cpp/managementgen/schema.py index 4e1f898274..4f5dc216ab 100755 --- a/cpp/managementgen/schema.py +++ b/cpp/managementgen/schema.py @@ -26,14 +26,15 @@ import md5 #===================================================================================== class SchemaType: def __init__ (self, node): - self.name = None - self.base = None - self.cpp = None - self.encode = None - self.decode = None - self.style = "normal" - self.accessor = None - self.init = "0" + self.name = None + self.base = None + self.cpp = None + self.encode = None + self.decode = None + self.style = "normal" + self.accessor = None + self.init = "0" + self.perThread = False attrs = node.attributes for idx in range (attrs.length): @@ -63,6 +64,11 @@ class SchemaType: elif key == 'init': self.init = val + elif key == 'perThread': + if val != 'y': + raise ValueError ("Expected 'y' in perThread attribute") + self.perThread = True + else: raise ValueError ("Unknown attribute in type '%s'" % key) @@ -74,43 +80,38 @@ class SchemaType: return self.name def genAccessor (self, stream, varName, changeFlag = None): + if self.perThread: + prefix = "getThreadStats()->" + if self.style == "wm": + raise ValueError ("'wm' style types can't be per-thread") + else: + prefix = "" if self.accessor == "direct": stream.write (" inline void set_" + varName + " (" + self.cpp + " val){\n"); - stream.write (" sys::Mutex::ScopedLock mutex(accessLock);\n") + if not self.perThread: + stream.write (" sys::Mutex::ScopedLock mutex(accessLock);\n") if self.style != "mma": - stream.write (" " + varName + " = val;\n"); + stream.write (" " + prefix + varName + " = val;\n"); if self.style == "wm": stream.write (" if (" + varName + "Low > val)\n") stream.write (" " + varName + "Low = val;\n") stream.write (" if (" + varName + "High < val)\n") stream.write (" " + varName + "High = val;\n") if self.style == "mma": - stream.write (" " + varName + "Count++;\n") - stream.write (" " + varName + "Total += val;\n") - stream.write (" if (" + varName + "Min > val)\n") - stream.write (" " + varName + "Min = val;\n") - stream.write (" if (" + varName + "Max < val)\n") - stream.write (" " + varName + "Max = val;\n") - if changeFlag != None: - stream.write (" " + changeFlag + " = true;\n") - stream.write (" }\n"); - elif self.accessor == "counterByOne": - stream.write (" inline void inc_" + varName + " (){\n"); - stream.write (" ++" + varName + ";\n") - if changeFlag != None: - stream.write (" " + changeFlag + " = true;\n") - stream.write (" }\n"); - stream.write (" inline void dec_" + varName + " (){\n"); - stream.write (" --" + varName + ";\n") + stream.write (" " + prefix + varName + "Count++;\n") + stream.write (" " + prefix + varName + "Total += val;\n") + stream.write (" if (" + prefix + varName + "Min > val)\n") + stream.write (" " + prefix + varName + "Min = val;\n") + stream.write (" if (" + prefix + varName + "Max < val)\n") + stream.write (" " + prefix + varName + "Max = val;\n") if changeFlag != None: stream.write (" " + changeFlag + " = true;\n") stream.write (" }\n"); elif self.accessor == "counter": stream.write (" inline void inc_" + varName + " (" + self.cpp + " by = 1){\n"); - stream.write (" if (by == 1)\n") - stream.write (" ++" + varName + ";\n") - stream.write (" else\n") - stream.write (" " + varName + " += by;\n") + if not self.perThread: + stream.write (" sys::Mutex::ScopedLock mutex(accessLock);\n") + stream.write (" " + prefix + varName + " += by;\n") if self.style == "wm": stream.write (" if (" + varName + "High < " + varName + ")\n") stream.write (" " + varName + "High = " + varName + ";\n") @@ -118,27 +119,15 @@ class SchemaType: stream.write (" " + changeFlag + " = true;\n") stream.write (" }\n"); stream.write (" inline void dec_" + varName + " (" + self.cpp + " by = 1){\n"); - stream.write (" if (by == 1)\n") - stream.write (" " + varName + "--;\n") - stream.write (" else\n") - stream.write (" " + varName + " -= by;\n") + if not self.perThread: + stream.write (" sys::Mutex::ScopedLock mutex(accessLock);\n") + stream.write (" " + prefix + varName + " -= by;\n") if self.style == "wm": stream.write (" if (" + varName + "Low > " + varName + ")\n") stream.write (" " + varName + "Low = " + varName + ";\n") if changeFlag != None: stream.write (" " + changeFlag + " = true;\n") stream.write (" }\n"); - stream.write (" inline void set_" + varName + " (" + self.cpp + " val){\n"); - stream.write (" sys::Mutex::ScopedLock mutex(accessLock);\n") - stream.write (" " + varName + " = val;\n"); - if self.style == "wm": - stream.write (" if (" + varName + "Low > val)\n") - stream.write (" " + varName + "Low = val;\n") - stream.write (" if (" + varName + "High < val)\n") - stream.write (" " + varName + "High = val;\n") - if changeFlag != None: - stream.write (" " + changeFlag + " = true;\n") - stream.write (" }\n"); def genHiLoStatResets (self, stream, varName): if self.style == "wm": @@ -150,6 +139,13 @@ class SchemaType: stream.write (" " + varName + "Min = -1;\n") stream.write (" " + varName + "Max = 0;\n") + def genPerThreadHiLoStatResets (self, stream, varName): + if self.style == "mma": + stream.write (" threadStats->" + varName + "Count = 0;\n") + stream.write (" threadStats->" + varName + "Total = 0;\n") + stream.write (" threadStats->" + varName + "Min = -1;\n") + stream.write (" threadStats->" + varName + "Max = 0;\n") + def genWrite (self, stream, varName): if self.style != "mma": stream.write (" " + self.encode.replace ("@", "buf").replace ("#", varName) + ";\n") @@ -235,6 +231,8 @@ class SchemaConfig: elif key == 'type': self.type = Type (val, typespec) + if self.type.type.accessor != 'direct': + raise ValueError ("Class properties must have a type with a direct accessor") elif key == 'references': self.ref = val @@ -288,8 +286,8 @@ class SchemaConfig: return 1 return 0 - def genDeclaration (self, stream): - stream.write (" " + self.type.type.cpp + " " + self.name + ";\n") + def genDeclaration (self, stream, prefix=" "): + stream.write (prefix + self.type.type.cpp + " " + self.name + ";\n") def genFormalParam (self, stream): stream.write (self.type.type.cpp + " _" + self.name) @@ -360,17 +358,17 @@ class SchemaInst: def getName (self): return self.name - def genDeclaration (self, stream): + def genDeclaration (self, stream, prefix=" "): if self.type.type.style != "mma": - stream.write (" " + self.type.type.cpp + " " + self.name + ";\n") + stream.write (prefix + self.type.type.cpp + " " + self.name + ";\n") if self.type.type.style == 'wm': - stream.write (" " + self.type.type.cpp + " " + self.name + "High;\n") - stream.write (" " + self.type.type.cpp + " " + self.name + "Low;\n") + stream.write (prefix + self.type.type.cpp + " " + self.name + "High;\n") + stream.write (prefix + self.type.type.cpp + " " + self.name + "Low;\n") if self.type.type.style == "mma": - stream.write (" " + self.type.type.cpp + " " + self.name + "Count;\n") - stream.write (" uint64_t " + self.name + "Total;\n") - stream.write (" " + self.type.type.cpp + " " + self.name + "Min;\n") - stream.write (" " + self.type.type.cpp + " " + self.name + "Max;\n") + stream.write (prefix + self.type.type.cpp + " " + self.name + "Count;\n") + stream.write (prefix + "uint64_t " + self.name + "Total;\n") + stream.write (prefix + self.type.type.cpp + " " + self.name + "Min;\n") + stream.write (prefix + self.type.type.cpp + " " + self.name + "Max;\n") def genAccessor (self, stream): self.type.type.genAccessor (stream, self.name, "instChanged") @@ -378,6 +376,9 @@ class SchemaInst: def genHiLoStatResets (self, stream): self.type.type.genHiLoStatResets (stream, self.name) + def genPerThreadHiLoStatResets (self, stream): + self.type.type.genPerThreadHiLoStatResets (stream, self.name) + def genSchemaText (self, stream, name, desc): stream.write (" ft = FieldTable ();\n") stream.write (" ft.setString (NAME, \"" + name + "\");\n") @@ -416,26 +417,51 @@ class SchemaInst: def genAssign (self, stream): if self.assign != None: - stream.write (" " + self.name + " = (" + self.type.type.cpp + ") (" + self.assign + ");\n") + if self.type.type.perThread: + prefix = " threadStats->" + else: + prefix = "" + stream.write (" " + prefix + self.name + " = (" + self.type.type.cpp + + ") (" + self.assign + ");\n") def genWrite (self, stream): - self.type.type.genWrite (stream, self.name) + if self.type.type.perThread: + self.type.type.genWrite (stream, "totals." + self.name) + else: + self.type.type.genWrite (stream, self.name) - def genInitialize (self, stream): + def genInitialize (self, stream, prefix="", indent=" "): val = self.type.type.init - if self.type.type.accessor == "counterByOne": - return if self.type.type.style != "mma": - stream.write (" " + self.name + " = " + val + ";\n") + stream.write (indent + prefix + self.name + " = " + val + ";\n") if self.type.type.style == "wm": - stream.write (" " + self.name + "High = " + val + ";\n") - stream.write (" " + self.name + "Low = " + val + ";\n") + stream.write (indent + prefix + self.name + "High = " + val + ";\n") + stream.write (indent + prefix + self.name + "Low = " + val + ";\n") if self.type.type.style == "mma": - stream.write (" " + self.name + "Count = 0;\n") - stream.write (" " + self.name + "Min = -1;\n") - stream.write (" " + self.name + "Max = 0;\n") - stream.write (" " + self.name + "Total = 0;\n") + stream.write (indent + prefix + self.name + "Count = 0;\n") + stream.write (indent + prefix + self.name + "Min = -1;\n") + stream.write (indent + prefix + self.name + "Max = 0;\n") + stream.write (indent + prefix + self.name + "Total = 0;\n") + def genInitializeTotalPerThreadStats (self, stream): + if self.type.type.style == "mma": + stream.write (" totals->" + self.name + "Count = 0;\n") + stream.write (" totals->" + self.name + "Min = -1;\n") + stream.write (" totals->" + self.name + "Max = 0;\n") + stream.write (" totals->" + self.name + "Total = 0;\n") + else: + stream.write (" totals->" + self.name + " = 0;\n") + + def genAggregatePerThreadStats (self, stream): + if self.type.type.style == "mma": + stream.write (" totals->%sCount += threadStats->%sCount;\n" % (self.name, self.name)) + stream.write (" if (totals->%sMin > threadStats->%sMin)\n" % (self.name, self.name)) + stream.write (" totals->%sMin = threadStats->%sMin;\n" % (self.name, self.name)) + stream.write (" if (totals->%sMax < threadStats->%sMax)\n" % (self.name, self.name)) + stream.write (" totals->%sMax = threadStats->%sMax;\n" % (self.name, self.name)) + stream.write (" totals->%sTotal += threadStats->%sTotal;\n" % (self.name, self.name)) + else: + stream.write (" totals->%s += threadStats->%s;\n" % (self.name, self.name)) #===================================================================================== # @@ -664,6 +690,26 @@ class SchemaClass: else: raise ValueError ("Unknown class tag '%s'" % child.nodeName) + # Adjust the 'assign' attributes for each statistic + for stat in self.statistics: + if stat.assign != None and stat.type.type.perThread: + stat.assign = self.adjust (stat.assign, self.statistics) + + def adjust (self, text, statistics): + result = text + start = 0 + while True: + next = None + for stat in statistics: + pos = result.find (stat.name, start) + if pos != -1 and (next == None or pos < next[0]): + next = (pos, stat.name) + if next == None: + return result + pos = next[0] + result = result[0:pos] + "threadStats->" + result[pos:] + start = pos + 9 + len(next[1]) + def hash (self, node): attrs = node.attributes self.md5Sum.update (node.nodeName) @@ -711,12 +757,34 @@ class SchemaClass: # Code Generation Functions. The names of these functions (minus the leading "gen") # match the substitution keywords in the template files. #=================================================================================== + def testExistPerThreadStats (self, variables): + for inst in self.statistics: + if inst.type.type.perThread: + return True + return False + + def testExistPerThreadAssign (self, variables): + for inst in self.statistics: + if inst.type.type.perThread and inst.assign != None: + return True + return False + + def testExistPerThreadResets (self, variables): + for inst in self.statistics: + if inst.type.type.perThread and inst.type.type.style == "mma": + return True + return False + + def testNoStatistics (self, variables): + return len (self.statistics) == 0 + def genAccessorMethods (self, stream, variables): for config in self.properties: if config.access != "RC": config.genAccessor (stream) for inst in self.statistics: - inst.genAccessor (stream) + if inst.assign == None: + inst.genAccessor (stream) def genConfigCount (self, stream, variables): stream.write ("%d" % len (self.properties)) @@ -767,16 +835,33 @@ class SchemaClass: def genHiLoStatResets (self, stream, variables): for inst in self.statistics: - inst.genHiLoStatResets (stream) + if not inst.type.type.perThread: + inst.genHiLoStatResets (stream) + + def genPerThreadHiLoStatResets (self, stream, variables): + for inst in self.statistics: + if inst.type.type.perThread: + inst.genPerThreadHiLoStatResets (stream) def genInitializeElements (self, stream, variables): for inst in self.statistics: - inst.genInitialize (stream) + if not inst.type.type.perThread: + inst.genInitialize (stream) + + def genInitializePerThreadElements (self, stream, variables): + for inst in self.statistics: + if inst.type.type.perThread: + inst.genInitialize (stream, "threadStats->", " ") + + def genInitializeTotalPerThreadStats (self, stream, variables): + for inst in self.statistics: + if inst.type.type.perThread: + inst.genInitializeTotalPerThreadStats (stream) - def genInstChangedStub (self, stream, variables): - if len (self.statistics) == 0: - stream.write (" // Stub for getInstChanged. There are no inst elements\n") - stream.write (" bool getInstChanged (void) { return false; }\n") + def genAggregatePerThreadStats (self, stream, variables): + for inst in self.statistics: + if inst.type.type.perThread: + inst.genAggregatePerThreadStats (stream) def genInstCount (self, stream, variables): count = 0 @@ -790,7 +875,13 @@ class SchemaClass: def genInstDeclarations (self, stream, variables): for element in self.statistics: - element.genDeclaration (stream) + if not element.type.type.perThread: + element.genDeclaration (stream) + + def genPerThreadDeclarations (self, stream, variables): + for element in self.statistics: + if element.type.type.perThread: + element.genDeclaration (stream, " ") def genInstElementSchema (self, stream, variables): for inst in self.statistics: @@ -884,7 +975,13 @@ class SchemaClass: def genAssign (self, stream, variables): for inst in self.statistics: - inst.genAssign (stream) + if not inst.type.type.perThread: + inst.genAssign (stream) + + def genPerThreadAssign (self, stream, variables): + for inst in self.statistics: + if inst.type.type.perThread: + inst.genAssign (stream) def genWriteConfig (self, stream, variables): for config in self.properties: diff --git a/cpp/managementgen/templates/Class.cpp b/cpp/managementgen/templates/Class.cpp index 0fbb78b7f1..1ea1da5090 100644 --- a/cpp/managementgen/templates/Class.cpp +++ b/cpp/managementgen/templates/Class.cpp @@ -23,6 +23,7 @@ #include "qpid/log/Statement.h" #include "qpid/framing/FieldTable.h" #include "qpid/management/Manageable.h" +#include "qpid/management/ManagementAgent.h" #include "/*MGEN:Class.NameCap*/.h" /*MGEN:Class.MethodArgIncludes*/ @@ -36,15 +37,28 @@ string /*MGEN:Class.NameCap*/::className = string ("/*MGEN:Class.NameLower*/ uint8_t /*MGEN:Class.NameCap*/::md5Sum[16] = {/*MGEN:Class.SchemaMD5*/}; -/*MGEN:Class.NameCap*/::/*MGEN:Class.NameCap*/ (Manageable* _core/*MGEN:Class.ParentArg*//*MGEN:Class.ConstructorArgs*/) : - ManagementObject(_core) - /*MGEN:Class.ConstructorInits*/ +/*MGEN:Class.NameCap*/::/*MGEN:Class.NameCap*/ (ManagementAgent* _agent, Manageable* _core/*MGEN:Class.ParentArg*//*MGEN:Class.ConstructorArgs*/) : + ManagementObject(_agent, _core)/*MGEN:Class.ConstructorInits*/ { /*MGEN:Class.ParentRefAssignment*/ /*MGEN:Class.InitializeElements*/ +/*MGEN:IF(Class.ExistPerThreadStats)*/ + maxThreads = agent->getMaxThreads(); + perThreadStatsArray = new struct PerThreadStats*[maxThreads]; + for (int idx = 0; idx < maxThreads; idx++) + perThreadStatsArray[idx] = 0; +/*MGEN:ENDIF*/ } -/*MGEN:Class.NameCap*/::~/*MGEN:Class.NameCap*/ () {} +/*MGEN:Class.NameCap*/::~/*MGEN:Class.NameCap*/ () +{ +/*MGEN:IF(Class.ExistPerThreadStats)*/ + for (int idx = 0; idx < maxThreads; idx++) + if (perThreadStatsArray[idx] != 0) + delete perThreadStatsArray[idx]; + delete perThreadStatsArray; +/*MGEN:ENDIF*/ +} namespace { const string NAME("name"); @@ -85,6 +99,19 @@ void /*MGEN:Class.NameCap*/::writeSchema (Buffer& buf) /*MGEN:Class.EventSchema*/ } +/*MGEN:IF(Class.ExistPerThreadStats)*/ +void /*MGEN:Class.NameCap*/::aggregatePerThreadStats(struct PerThreadStats* totals) +{ +/*MGEN:Class.InitializeTotalPerThreadStats*/ + for (int idx = 0; idx < maxThreads; idx++) { + struct PerThreadStats* threadStats = perThreadStatsArray[idx]; + if (threadStats != 0) { +/*MGEN:Class.AggregatePerThreadStats*/ + } + } +} +/*MGEN:ENDIF*/ + void /*MGEN:Class.NameCap*/::writeProperties (Buffer& buf) { sys::Mutex::ScopedLock mutex(accessLock); @@ -98,14 +125,33 @@ void /*MGEN:Class.NameCap*/::writeStatistics (Buffer& buf, bool skipHeaders) { sys::Mutex::ScopedLock mutex(accessLock); instChanged = false; +/*MGEN:IF(Class.ExistPerThreadAssign)*/ + for (int idx = 0; idx < maxThreads; idx++) { + struct PerThreadStats* threadStats = perThreadStatsArray[idx]; + if (threadStats != 0) { +/*MGEN:Class.PerThreadAssign*/ + } + } +/*MGEN:ENDIF*/ +/*MGEN:IF(Class.ExistPerThreadStats)*/ + struct PerThreadStats totals; + aggregatePerThreadStats(&totals); +/*MGEN:ENDIF*/ /*MGEN:Class.Assign*/ - if (!skipHeaders) writeTimestamps (buf); /*MGEN:Class.WriteInst*/ // Maintenance of hi-lo statistics /*MGEN:Class.HiLoStatResets*/ +/*MGEN:IF(Class.ExistPerThreadResets)*/ + for (int idx = 0; idx < maxThreads; idx++) { + struct PerThreadStats* threadStats = perThreadStatsArray[idx]; + if (threadStats != 0) { +/*MGEN:Class.PerThreadHiLoStatResets*/ + } + } +/*MGEN:ENDIF*/ } void /*MGEN:Class.NameCap*/::doMethod (/*MGEN:Class.DoMethodArgs*/) diff --git a/cpp/managementgen/templates/Class.h b/cpp/managementgen/templates/Class.h index aa01f8f105..557c7a45d5 100644 --- a/cpp/managementgen/templates/Class.h +++ b/cpp/managementgen/templates/Class.h @@ -26,7 +26,6 @@ #include "qpid/management/ManagementObject.h" #include "qpid/framing/FieldTable.h" #include "qpid/framing/Uuid.h" -#include "qpid/sys/AtomicCount.h" namespace qpid { namespace management { @@ -43,6 +42,27 @@ class /*MGEN:Class.NameCap*/ : public ManagementObject /*MGEN:Class.ConfigDeclarations*/ // Statistics /*MGEN:Class.InstDeclarations*/ +/*MGEN:IF(Class.ExistPerThreadStats)*/ + // Per-Thread Statistics + struct PerThreadStats { +/*MGEN:Class.PerThreadDeclarations*/ + }; + + struct PerThreadStats** perThreadStatsArray; + + inline struct PerThreadStats* getThreadStats() { + int index = getThreadIndex(); + struct PerThreadStats* threadStats = perThreadStatsArray[index]; + if (threadStats == 0) { + threadStats = new(PerThreadStats); + perThreadStatsArray[index] = threadStats; +/*MGEN:Class.InitializePerThreadElements*/ + } + return threadStats; + } + + void aggregatePerThreadStats(struct PerThreadStats*); +/*MGEN:ENDIF*/ // Private Methods static void writeSchema (qpid::framing::Buffer& buf); void writeProperties (qpid::framing::Buffer& buf); @@ -51,15 +71,18 @@ class /*MGEN:Class.NameCap*/ : public ManagementObject void doMethod (std::string methodName, qpid::framing::Buffer& inBuf, qpid::framing::Buffer& outBuf); - writeSchemaCall_t getWriteSchemaCall (void) { return writeSchema; } - -/*MGEN:Class.InstChangedStub*/ + writeSchemaCall_t getWriteSchemaCall(void) { return writeSchema; } +/*MGEN:IF(Class.NoStatistics)*/ + // Stub for getInstChanged. There are no statistics in this class. + bool getInstChanged (void) { return false; } +/*MGEN:ENDIF*/ public: friend class Package/*MGEN:Class.NamePackageCap*/; typedef boost::shared_ptr</*MGEN:Class.NameCap*/> shared_ptr; - /*MGEN:Class.NameCap*/ (Manageable* coreObject/*MGEN:Class.ParentArg*//*MGEN:Class.ConstructorArgs*/); + /*MGEN:Class.NameCap*/ (ManagementAgent* agent, + Manageable* coreObject/*MGEN:Class.ParentArg*//*MGEN:Class.ConstructorArgs*/); ~/*MGEN:Class.NameCap*/ (void); /*MGEN:Class.SetGeneralReferenceDeclaration*/ |