Modified: qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.cpp?rev=816770&r1=816769&r2=816770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.cpp Fri Sep 18 20:15:15 2009
@@ -81,7 +81,7 @@
     return ::memcmp(&hash, &other.hash, 16) > 0;
 }
 
-SchemaArgumentImpl::SchemaArgumentImpl(Buffer& buffer) : envelope(new 
SchemaArgument(this))
+SchemaArgumentImpl::SchemaArgumentImpl(Buffer& buffer)
 {
     FieldTable map;
     map.decode(buffer);
@@ -99,6 +99,12 @@
         dir = DIR_IN_OUT;
 }
 
+SchemaArgument* SchemaArgumentImpl::factory(Buffer& buffer)
+{
+    SchemaArgumentImpl* impl(new SchemaArgumentImpl(buffer));
+    return new SchemaArgument(impl);
+}
+
 void SchemaArgumentImpl::encode(Buffer& buffer) const
 {
     FieldTable map;
@@ -128,7 +134,7 @@
     hash.update(description);
 }
 
-SchemaMethodImpl::SchemaMethodImpl(Buffer& buffer) : envelope(new 
SchemaMethod(this))
+SchemaMethodImpl::SchemaMethodImpl(Buffer& buffer)
 {
     FieldTable map;
     int argCount;
@@ -139,11 +145,17 @@
     description = map.getAsString("desc");
 
     for (int idx = 0; idx < argCount; idx++) {
-        SchemaArgumentImpl* arg = new SchemaArgumentImpl(buffer);
-        addArgument(*arg->envelope);
+        SchemaArgument* arg = SchemaArgumentImpl::factory(buffer);
+        addArgument(arg);
     }
 }
 
+SchemaMethod* SchemaMethodImpl::factory(Buffer& buffer)
+{
+    SchemaMethodImpl* impl(new SchemaMethodImpl(buffer));
+    return new SchemaMethod(impl);
+}
+
 void SchemaMethodImpl::encode(Buffer& buffer) const
 {
     FieldTable map;
@@ -154,23 +166,23 @@
         map.setString("desc", description);
     map.encode(buffer);
 
-    for (vector<SchemaArgumentImpl*>::const_iterator iter = arguments.begin();
+    for (vector<const SchemaArgument*>::const_iterator iter = 
arguments.begin();
          iter != arguments.end(); iter++)
-        (*iter)->encode(buffer);
+        (*iter)->impl->encode(buffer);
 }
 
-void SchemaMethodImpl::addArgument(const SchemaArgument& argument)
+void SchemaMethodImpl::addArgument(const SchemaArgument* argument)
 {
-    arguments.push_back(argument.impl);
+    arguments.push_back(argument);
 }
 
 const SchemaArgument* SchemaMethodImpl::getArgument(int idx) const
 {
     int count = 0;
-    for (vector<SchemaArgumentImpl*>::const_iterator iter = arguments.begin();
+    for (vector<const SchemaArgument*>::const_iterator iter = 
arguments.begin();
          iter != arguments.end(); iter++, count++)
         if (idx == count)
-            return (*iter)->envelope;
+            return (*iter);
     return 0;
 }
 
@@ -178,12 +190,12 @@
 {
     hash.update(name);
     hash.update(description);
-    for (vector<SchemaArgumentImpl*>::const_iterator iter = arguments.begin();
+    for (vector<const SchemaArgument*>::const_iterator iter = 
arguments.begin();
          iter != arguments.end(); iter++)
-        (*iter)->updateHash(hash);
+        (*iter)->impl->updateHash(hash);
 }
 
-SchemaPropertyImpl::SchemaPropertyImpl(Buffer& buffer) : envelope(new 
SchemaProperty(this))
+SchemaPropertyImpl::SchemaPropertyImpl(Buffer& buffer)
 {
     FieldTable map;
     map.decode(buffer);
@@ -197,6 +209,12 @@
     description = map.getAsString("desc");
 }
 
+SchemaProperty* SchemaPropertyImpl::factory(Buffer& buffer)
+{
+    SchemaPropertyImpl* impl(new SchemaPropertyImpl(buffer));
+    return new SchemaProperty(impl);
+}
+
 void SchemaPropertyImpl::encode(Buffer& buffer) const
 {
     FieldTable map;
@@ -225,7 +243,7 @@
     hash.update(description);
 }
 
-SchemaStatisticImpl::SchemaStatisticImpl(Buffer& buffer) : envelope(new 
SchemaStatistic(this))
+SchemaStatisticImpl::SchemaStatisticImpl(Buffer& buffer)
 {
     FieldTable map;
     map.decode(buffer);
@@ -236,6 +254,12 @@
     description = map.getAsString("desc");
 }
 
+SchemaStatistic* SchemaStatisticImpl::factory(Buffer& buffer)
+{
+    SchemaStatisticImpl* impl(new SchemaStatisticImpl(buffer));
+    return new SchemaStatistic(impl);
+}
+
 void SchemaStatisticImpl::encode(Buffer& buffer) const
 {
     FieldTable map;
@@ -258,16 +282,26 @@
     hash.update(description);
 }
 
-SchemaClassKeyImpl::SchemaClassKeyImpl(const string& p, const string& n, const 
SchemaHash& h) :
-    envelope(new SchemaClassKey(this)), package(p), name(n), hash(h) {}
+SchemaClassKeyImpl::SchemaClassKeyImpl(const string& p, const string& n, const 
SchemaHash& h) : package(p), name(n), hash(h) {}
 
-SchemaClassKeyImpl::SchemaClassKeyImpl(Buffer& buffer) :
-    envelope(new SchemaClassKey(this)), package(packageContainer), 
name(nameContainer), hash(hashContainer)
+SchemaClassKeyImpl::SchemaClassKeyImpl(Buffer& buffer) : 
package(packageContainer), name(nameContainer), hash(hashContainer)
 {
     buffer.getShortString(packageContainer);
     buffer.getShortString(nameContainer);
     hashContainer.decode(buffer);
-}    
+}
+
+SchemaClassKey* SchemaClassKeyImpl::factory(const string& package, const 
string& name, const SchemaHash& hash)
+{
+    SchemaClassKeyImpl* impl(new SchemaClassKeyImpl(package, name, hash));
+    return new SchemaClassKey(impl);
+}
+
+SchemaClassKey* SchemaClassKeyImpl::factory(Buffer& buffer)
+{
+    SchemaClassKeyImpl* impl(new SchemaClassKeyImpl(buffer));
+    return new SchemaClassKey(impl);
+}
 
 void SchemaClassKeyImpl::encode(Buffer& buffer) const
 {
@@ -300,8 +334,7 @@
     return str.str();
 }
 
-SchemaObjectClassImpl::SchemaObjectClassImpl(Buffer& buffer) :
-    envelope(new SchemaObjectClass(this)), hasHash(true), classKey(package, 
name, hash)
+SchemaObjectClassImpl::SchemaObjectClassImpl(Buffer& buffer) : hasHash(true), 
classKey(SchemaClassKeyImpl::factory(package, name, hash))
 {
     buffer.getShortString(package);
     buffer.getShortString(name);
@@ -313,21 +346,27 @@
     uint16_t methodCount   = buffer.getShort();
 
     for (uint16_t idx = 0; idx < propCount; idx++) {
-        SchemaPropertyImpl* property = new SchemaPropertyImpl(buffer);
-        addProperty(*property->envelope);
+        const SchemaProperty* property = SchemaPropertyImpl::factory(buffer);
+        addProperty(property);
     }
 
     for (uint16_t idx = 0; idx < statCount; idx++) {
-        SchemaStatisticImpl* statistic = new SchemaStatisticImpl(buffer);
-        addStatistic(*statistic->envelope);
+        const SchemaStatistic* statistic = 
SchemaStatisticImpl::factory(buffer);
+        addStatistic(statistic);
     }
 
     for (uint16_t idx = 0; idx < methodCount; idx++) {
-        SchemaMethodImpl* method = new SchemaMethodImpl(buffer);
-        addMethod(*method->envelope);
+        SchemaMethod* method = SchemaMethodImpl::factory(buffer);
+        addMethod(method);
     }
 }
 
+SchemaObjectClass* SchemaObjectClassImpl::factory(Buffer& buffer)
+{
+    SchemaObjectClassImpl* impl(new SchemaObjectClassImpl(buffer));
+    return new SchemaObjectClass(impl);
+}
+
 void SchemaObjectClassImpl::encode(Buffer& buffer) const
 {
     buffer.putOctet((uint8_t) CLASS_OBJECT);
@@ -339,15 +378,15 @@
     buffer.putShort((uint16_t) statistics.size());
     buffer.putShort((uint16_t) methods.size());
 
-    for (vector<SchemaPropertyImpl*>::const_iterator iter = properties.begin();
+    for (vector<const SchemaProperty*>::const_iterator iter = 
properties.begin();
          iter != properties.end(); iter++)
-        (*iter)->encode(buffer);
-    for (vector<SchemaStatisticImpl*>::const_iterator iter = 
statistics.begin();
+        (*iter)->impl->encode(buffer);
+    for (vector<const SchemaStatistic*>::const_iterator iter = 
statistics.begin();
          iter != statistics.end(); iter++)
-        (*iter)->encode(buffer);
-    for (vector<SchemaMethodImpl*>::const_iterator iter = methods.begin();
+        (*iter)->impl->encode(buffer);
+    for (vector<const SchemaMethod*>::const_iterator iter = methods.begin();
          iter != methods.end(); iter++)
-        (*iter)->encode(buffer);
+        (*iter)->impl->encode(buffer);
 }
 
 const SchemaClassKey* SchemaObjectClassImpl::getClassKey() const
@@ -356,67 +395,66 @@
         hasHash = true;
         hash.update(package);
         hash.update(name);
-        for (vector<SchemaPropertyImpl*>::const_iterator iter = 
properties.begin();
+        for (vector<const SchemaProperty*>::const_iterator iter = 
properties.begin();
              iter != properties.end(); iter++)
-            (*iter)->updateHash(hash);
-        for (vector<SchemaStatisticImpl*>::const_iterator iter = 
statistics.begin();
+            (*iter)->impl->updateHash(hash);
+        for (vector<const SchemaStatistic*>::const_iterator iter = 
statistics.begin();
              iter != statistics.end(); iter++)
-            (*iter)->updateHash(hash);
-        for (vector<SchemaMethodImpl*>::const_iterator iter = methods.begin();
+            (*iter)->impl->updateHash(hash);
+        for (vector<const SchemaMethod*>::const_iterator iter = 
methods.begin();
              iter != methods.end(); iter++)
-            (*iter)->updateHash(hash);
+            (*iter)->impl->updateHash(hash);
     }
 
-    return classKey.envelope;
+    return classKey.get();
 }
 
-void SchemaObjectClassImpl::addProperty(const SchemaProperty& property)
+void SchemaObjectClassImpl::addProperty(const SchemaProperty* property)
 {
-    properties.push_back(property.impl);
+    properties.push_back(property);
 }
 
-void SchemaObjectClassImpl::addStatistic(const SchemaStatistic& statistic)
+void SchemaObjectClassImpl::addStatistic(const SchemaStatistic* statistic)
 {
-    statistics.push_back(statistic.impl);
+    statistics.push_back(statistic);
 }
 
-void SchemaObjectClassImpl::addMethod(const SchemaMethod& method)
+void SchemaObjectClassImpl::addMethod(const SchemaMethod* method)
 {
-    methods.push_back(method.impl);
+    methods.push_back(method);
 }
 
 const SchemaProperty* SchemaObjectClassImpl::getProperty(int idx) const
 {
     int count = 0;
-    for (vector<SchemaPropertyImpl*>::const_iterator iter = properties.begin();
+    for (vector<const SchemaProperty*>::const_iterator iter = 
properties.begin();
          iter != properties.end(); iter++, count++)
         if (idx == count)
-            return (*iter)->envelope;
+            return *iter;
     return 0;
 }
 
 const SchemaStatistic* SchemaObjectClassImpl::getStatistic(int idx) const
 {
     int count = 0;
-    for (vector<SchemaStatisticImpl*>::const_iterator iter = 
statistics.begin();
+    for (vector<const SchemaStatistic*>::const_iterator iter = 
statistics.begin();
          iter != statistics.end(); iter++, count++)
         if (idx == count)
-            return (*iter)->envelope;
+            return *iter;
     return 0;
 }
 
 const SchemaMethod* SchemaObjectClassImpl::getMethod(int idx) const
 {
     int count = 0;
-    for (vector<SchemaMethodImpl*>::const_iterator iter = methods.begin();
+    for (vector<const SchemaMethod*>::const_iterator iter = methods.begin();
          iter != methods.end(); iter++, count++)
         if (idx == count)
-            return (*iter)->envelope;
+            return *iter;
     return 0;
 }
 
-SchemaEventClassImpl::SchemaEventClassImpl(Buffer& buffer) :
-    envelope(new SchemaEventClass(this)), hasHash(true), classKey(package, 
name, hash)
+SchemaEventClassImpl::SchemaEventClassImpl(Buffer& buffer) : hasHash(true), 
classKey(SchemaClassKeyImpl::factory(package, name, hash))
 {
     buffer.getShortString(package);
     buffer.getShortString(name);
@@ -426,11 +464,17 @@
     uint16_t argCount = buffer.getShort();
 
     for (uint16_t idx = 0; idx < argCount; idx++) {
-        SchemaArgumentImpl* argument = new SchemaArgumentImpl(buffer);
-        addArgument(*argument->envelope);
+        SchemaArgument* argument = SchemaArgumentImpl::factory(buffer);
+        addArgument(argument);
     }
 }
 
+SchemaEventClass* SchemaEventClassImpl::factory(Buffer& buffer)
+{
+    SchemaEventClassImpl* impl(new SchemaEventClassImpl(buffer));
+    return new SchemaEventClass(impl);
+}
+
 void SchemaEventClassImpl::encode(Buffer& buffer) const
 {
     buffer.putOctet((uint8_t) CLASS_EVENT);
@@ -439,9 +483,9 @@
     hash.encode(buffer);
     buffer.putShort((uint16_t) arguments.size());
 
-    for (vector<SchemaArgumentImpl*>::const_iterator iter = arguments.begin();
+    for (vector<const SchemaArgument*>::const_iterator iter = 
arguments.begin();
          iter != arguments.end(); iter++)
-        (*iter)->encode(buffer);
+        (*iter)->impl->encode(buffer);
 }
 
 const SchemaClassKey* SchemaEventClassImpl::getClassKey() const
@@ -450,25 +494,25 @@
         hasHash = true;
         hash.update(package);
         hash.update(name);
-        for (vector<SchemaArgumentImpl*>::const_iterator iter = 
arguments.begin();
+        for (vector<const SchemaArgument*>::const_iterator iter = 
arguments.begin();
              iter != arguments.end(); iter++)
-            (*iter)->updateHash(hash);
+            (*iter)->impl->updateHash(hash);
     }
-    return classKey.envelope;
+    return classKey.get();
 }
 
-void SchemaEventClassImpl::addArgument(const SchemaArgument& argument)
+void SchemaEventClassImpl::addArgument(const SchemaArgument* argument)
 {
-    arguments.push_back(argument.impl);
+    arguments.push_back(argument);
 }
 
 const SchemaArgument* SchemaEventClassImpl::getArgument(int idx) const
 {
     int count = 0;
-    for (vector<SchemaArgumentImpl*>::const_iterator iter = arguments.begin();
+    for (vector<const SchemaArgument*>::const_iterator iter = 
arguments.begin();
          iter != arguments.end(); iter++, count++)
         if (idx == count)
-            return (*iter)->envelope;
+            return (*iter);
     return 0;
 }
 
@@ -477,8 +521,9 @@
 // Wrappers
 //==================================================================
 
-SchemaArgument::SchemaArgument(const char* name, Typecode typecode) { impl = 
new SchemaArgumentImpl(this, name, typecode); }
+SchemaArgument::SchemaArgument(const char* name, Typecode typecode) { impl = 
new SchemaArgumentImpl(name, typecode); }
 SchemaArgument::SchemaArgument(SchemaArgumentImpl* i) : impl(i) {}
+SchemaArgument::SchemaArgument(const SchemaArgument& from) : impl(new 
SchemaArgumentImpl(*(from.impl))) {}
 SchemaArgument::~SchemaArgument() { delete impl; }
 void SchemaArgument::setDirection(Direction dir) { impl->setDirection(dir); }
 void SchemaArgument::setUnit(const char* val) { impl->setUnit(val); }
@@ -488,17 +533,21 @@
 Direction SchemaArgument::getDirection() const { return impl->getDirection(); }
 const char* SchemaArgument::getUnit() const { return impl->getUnit().c_str(); }
 const char* SchemaArgument::getDesc() const { return impl->getDesc().c_str(); }
-SchemaMethod::SchemaMethod(const char* name) { impl = new 
SchemaMethodImpl(this, name); }
+
+SchemaMethod::SchemaMethod(const char* name) : impl(new 
SchemaMethodImpl(name)) {}
 SchemaMethod::SchemaMethod(SchemaMethodImpl* i) : impl(i) {}
+SchemaMethod::SchemaMethod(const SchemaMethod& from) : impl(new 
SchemaMethodImpl(*(from.impl))) {}
 SchemaMethod::~SchemaMethod() { delete impl; }
-void SchemaMethod::addArgument(const SchemaArgument& argument) { 
impl->addArgument(argument); }
+void SchemaMethod::addArgument(const SchemaArgument* argument) { 
impl->addArgument(argument); }
 void SchemaMethod::setDesc(const char* desc) { impl->setDesc(desc); }
 const char* SchemaMethod::getName() const { return impl->getName().c_str(); }
 const char* SchemaMethod::getDesc() const { return impl->getDesc().c_str(); }
 int SchemaMethod::getArgumentCount() const { return impl->getArgumentCount(); }
 const SchemaArgument* SchemaMethod::getArgument(int idx) const { return 
impl->getArgument(idx); }
-SchemaProperty::SchemaProperty(const char* name, Typecode typecode) { impl = 
new SchemaPropertyImpl(this, name, typecode); }
+
+SchemaProperty::SchemaProperty(const char* name, Typecode typecode) : impl(new 
SchemaPropertyImpl(name, typecode)) {}
 SchemaProperty::SchemaProperty(SchemaPropertyImpl* i) : impl(i) {}
+SchemaProperty::SchemaProperty(const SchemaProperty& from) : impl(new 
SchemaPropertyImpl(*(from.impl))) {}
 SchemaProperty::~SchemaProperty() { delete impl; }
 void SchemaProperty::setAccess(Access access) { impl->setAccess(access); }
 void SchemaProperty::setIndex(bool val) { impl->setIndex(val); }
@@ -512,8 +561,10 @@
 bool SchemaProperty::isOptional() const { return impl->isOptional(); }
 const char* SchemaProperty::getUnit() const { return impl->getUnit().c_str(); }
 const char* SchemaProperty::getDesc() const { return impl->getDesc().c_str(); }
-SchemaStatistic::SchemaStatistic(const char* name, Typecode typecode) { impl = 
new SchemaStatisticImpl(this, name, typecode); }
+
+SchemaStatistic::SchemaStatistic(const char* name, Typecode typecode) : 
impl(new SchemaStatisticImpl(name, typecode)) {}
 SchemaStatistic::SchemaStatistic(SchemaStatisticImpl* i) : impl(i) {}
+SchemaStatistic::SchemaStatistic(const SchemaStatistic& from) : impl(new 
SchemaStatisticImpl(*(from.impl))) {}
 SchemaStatistic::~SchemaStatistic() { delete impl; }
 void SchemaStatistic::setUnit(const char* val) { impl->setUnit(val); }
 void SchemaStatistic::setDesc(const char* desc) { impl->setDesc(desc); }
@@ -521,17 +572,23 @@
 Typecode SchemaStatistic::getType() const { return impl->getType(); }
 const char* SchemaStatistic::getUnit() const { return impl->getUnit().c_str(); 
}
 const char* SchemaStatistic::getDesc() const { return impl->getDesc().c_str(); 
}
+
 SchemaClassKey::SchemaClassKey(SchemaClassKeyImpl* i) : impl(i) {}
+SchemaClassKey::SchemaClassKey(const SchemaClassKey& from) : impl(new 
SchemaClassKeyImpl(*(from.impl))) {}
 SchemaClassKey::~SchemaClassKey() { delete impl; }
 const char* SchemaClassKey::getPackageName() const { return 
impl->getPackageName().c_str(); }
 const char* SchemaClassKey::getClassName() const { return 
impl->getClassName().c_str(); }
 const uint8_t* SchemaClassKey::getHash() const { return impl->getHash(); }
-SchemaObjectClass::SchemaObjectClass(const char* package, const char* name) { 
impl = new SchemaObjectClassImpl(this, package, name); }
+bool SchemaClassKey::operator==(const SchemaClassKey& other) const { return 
*impl == *(other.impl); }
+bool SchemaClassKey::operator<(const SchemaClassKey& other) const { return 
*impl < *(other.impl); }
+
+SchemaObjectClass::SchemaObjectClass(const char* package, const char* name) : 
impl(new SchemaObjectClassImpl(package, name)) {}
 SchemaObjectClass::SchemaObjectClass(SchemaObjectClassImpl* i) : impl(i) {}
+SchemaObjectClass::SchemaObjectClass(const SchemaObjectClass& from) : impl(new 
SchemaObjectClassImpl(*(from.impl))) {}
 SchemaObjectClass::~SchemaObjectClass() { delete impl; }
-void SchemaObjectClass::addProperty(const SchemaProperty& property) { 
impl->addProperty(property); }
-void SchemaObjectClass::addStatistic(const SchemaStatistic& statistic) { 
impl->addStatistic(statistic); }
-void SchemaObjectClass::addMethod(const SchemaMethod& method) { 
impl->addMethod(method); }
+void SchemaObjectClass::addProperty(const SchemaProperty* property) { 
impl->addProperty(property); }
+void SchemaObjectClass::addStatistic(const SchemaStatistic* statistic) { 
impl->addStatistic(statistic); }
+void SchemaObjectClass::addMethod(const SchemaMethod* method) { 
impl->addMethod(method); }
 const SchemaClassKey* SchemaObjectClass::getClassKey() const { return 
impl->getClassKey(); }
 int SchemaObjectClass::getPropertyCount() const { return 
impl->getPropertyCount(); }
 int SchemaObjectClass::getStatisticCount() const { return 
impl->getStatisticCount(); }
@@ -539,10 +596,12 @@
 const SchemaProperty* SchemaObjectClass::getProperty(int idx) const { return 
impl->getProperty(idx); }
 const SchemaStatistic* SchemaObjectClass::getStatistic(int idx) const { return 
impl->getStatistic(idx); }
 const SchemaMethod* SchemaObjectClass::getMethod(int idx) const { return 
impl->getMethod(idx); }
-SchemaEventClass::SchemaEventClass(const char* package, const char* name) { 
impl = new SchemaEventClassImpl(this, package, name); }
+
+SchemaEventClass::SchemaEventClass(const char* package, const char* name) : 
impl(new SchemaEventClassImpl(package, name)) {}
 SchemaEventClass::SchemaEventClass(SchemaEventClassImpl* i) : impl(i) {}
+SchemaEventClass::SchemaEventClass(const SchemaEventClass& from) : impl(new 
SchemaEventClassImpl(*(from.impl))) {}
 SchemaEventClass::~SchemaEventClass() { delete impl; }
-void SchemaEventClass::addArgument(const SchemaArgument& argument) { 
impl->addArgument(argument); }
+void SchemaEventClass::addArgument(const SchemaArgument* argument) { 
impl->addArgument(argument); }
 void SchemaEventClass::setDesc(const char* desc) { impl->setDesc(desc); }
 const SchemaClassKey* SchemaEventClass::getClassKey() const { return 
impl->getClassKey(); }
 int SchemaEventClass::getArgumentCount() const { return 
impl->getArgumentCount(); }

Modified: qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.h?rev=816770&r1=816769&r2=816770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qmf/SchemaImpl.h Fri Sep 18 20:15:15 2009
@@ -21,7 +21,6 @@
  */
 
 #include "qmf/Schema.h"
-#include <boost/shared_ptr.hpp>
 #include <string>
 #include <vector>
 #include <qpid/framing/Buffer.h>
@@ -52,16 +51,15 @@
     };
 
     struct SchemaArgumentImpl {
-        SchemaArgument* envelope;
         std::string name;
         Typecode typecode;
         Direction dir;
         std::string unit;
         std::string description;
 
-        SchemaArgumentImpl(SchemaArgument* e, const char* n, Typecode t) :
-            envelope(e), name(n), typecode(t), dir(DIR_IN) {}
+        SchemaArgumentImpl(const char* n, Typecode t) : name(n), typecode(t), 
dir(DIR_IN) {}
         SchemaArgumentImpl(qpid::framing::Buffer& buffer);
+        static SchemaArgument* factory(qpid::framing::Buffer& buffer);
         void encode(qpid::framing::Buffer& buffer) const;
         void setDirection(Direction d) { dir = d; }
         void setUnit(const char* val) { unit = val; }
@@ -75,15 +73,15 @@
     };
 
     struct SchemaMethodImpl {
-        SchemaMethod* envelope;
         std::string name;
         std::string description;
-        std::vector<SchemaArgumentImpl*> arguments;
+        std::vector<const SchemaArgument*> arguments;
 
-        SchemaMethodImpl(SchemaMethod* e, const char* n) : envelope(e), 
name(n) {}
+        SchemaMethodImpl(const char* n) : name(n) {}
         SchemaMethodImpl(qpid::framing::Buffer& buffer);
+        static SchemaMethod* factory(qpid::framing::Buffer& buffer);
         void encode(qpid::framing::Buffer& buffer) const;
-        void addArgument(const SchemaArgument& argument);
+        void addArgument(const SchemaArgument* argument);
         void setDesc(const char* desc) { description = desc; }
         const std::string& getName() const { return name; }
         const std::string& getDesc() const { return description; }
@@ -93,7 +91,6 @@
     };
 
     struct SchemaPropertyImpl {
-        SchemaProperty* envelope;
         std::string name;
         Typecode typecode;
         Access access;
@@ -102,10 +99,9 @@
         std::string unit;
         std::string description;
 
-        SchemaPropertyImpl(SchemaProperty* e, const char* n, Typecode t) :
-            envelope(e), name(n), typecode(t), access(ACCESS_READ_ONLY),
-            index(false), optional(false) {}
+        SchemaPropertyImpl(const char* n, Typecode t) : name(n), typecode(t), 
access(ACCESS_READ_ONLY), index(false), optional(false) {}
         SchemaPropertyImpl(qpid::framing::Buffer& buffer);
+        static SchemaProperty* factory(qpid::framing::Buffer& buffer);
         void encode(qpid::framing::Buffer& buffer) const;
         void setAccess(Access a) { access = a; }
         void setIndex(bool val) { index = val; }
@@ -123,15 +119,14 @@
     };
 
     struct SchemaStatisticImpl {
-        SchemaStatistic* envelope;
         std::string name;
         Typecode typecode;
         std::string unit;
         std::string description;
 
-        SchemaStatisticImpl(SchemaStatistic* e, const char* n, Typecode t) :
-            envelope(e), name(n), typecode(t) {}
+        SchemaStatisticImpl(const char* n, Typecode t) : name(n), typecode(t) 
{}
         SchemaStatisticImpl(qpid::framing::Buffer& buffer);
+        static SchemaStatistic* factory(qpid::framing::Buffer& buffer);
         void encode(qpid::framing::Buffer& buffer) const;
         void setUnit(const char* val) { unit = val; }
         void setDesc(const char* desc) { description = desc; }
@@ -143,7 +138,6 @@
     };
 
     struct SchemaClassKeyImpl {
-        const SchemaClassKey* envelope;
         const std::string& package;
         const std::string& name;
         const SchemaHash& hash;
@@ -156,6 +150,8 @@
 
         SchemaClassKeyImpl(const std::string& package, const std::string& 
name, const SchemaHash& hash);
         SchemaClassKeyImpl(qpid::framing::Buffer& buffer);
+        static SchemaClassKey* factory(const std::string& package, const 
std::string& name, const SchemaHash& hash);
+        static SchemaClassKey* factory(qpid::framing::Buffer& buffer);
 
         const std::string& getPackageName() const { return package; }
         const std::string& getClassName() const { return name; }
@@ -168,24 +164,24 @@
     };
 
     struct SchemaObjectClassImpl {
-        typedef boost::shared_ptr<SchemaObjectClassImpl> Ptr;
-        SchemaObjectClass* envelope;
         std::string package;
         std::string name;
         mutable SchemaHash hash;
         mutable bool hasHash;
-        SchemaClassKeyImpl classKey;
-        std::vector<SchemaPropertyImpl*> properties;
-        std::vector<SchemaStatisticImpl*> statistics;
-        std::vector<SchemaMethodImpl*> methods;
+        std::auto_ptr<SchemaClassKey> classKey;
+        std::vector<const SchemaProperty*> properties;
+        std::vector<const SchemaStatistic*> statistics;
+        std::vector<const SchemaMethod*> methods;
 
-        SchemaObjectClassImpl(SchemaObjectClass* e, const char* p, const char* 
n) :
-        envelope(e), package(p), name(n), hasHash(false), classKey(package, 
name, hash) {}
+        SchemaObjectClassImpl(const char* p, const char* n) :
+            package(p), name(n), hasHash(false), 
classKey(SchemaClassKeyImpl::factory(package, name, hash)) {}
         SchemaObjectClassImpl(qpid::framing::Buffer& buffer);
+        static SchemaObjectClass* factory(qpid::framing::Buffer& buffer);
+
         void encode(qpid::framing::Buffer& buffer) const;
-        void addProperty(const SchemaProperty& property);
-        void addStatistic(const SchemaStatistic& statistic);
-        void addMethod(const SchemaMethod& method);
+        void addProperty(const SchemaProperty* property);
+        void addStatistic(const SchemaStatistic* statistic);
+        void addMethod(const SchemaMethod* method);
 
         const SchemaClassKey* getClassKey() const;
         int getPropertyCount() const { return properties.size(); }
@@ -197,21 +193,21 @@
     };
 
     struct SchemaEventClassImpl {
-        typedef boost::shared_ptr<SchemaEventClassImpl> Ptr;
-        SchemaEventClass* envelope;
         std::string package;
         std::string name;
         mutable SchemaHash hash;
         mutable bool hasHash;
-        SchemaClassKeyImpl classKey;
+        std::auto_ptr<SchemaClassKey> classKey;
         std::string description;
-        std::vector<SchemaArgumentImpl*> arguments;
+        std::vector<const SchemaArgument*> arguments;
 
-        SchemaEventClassImpl(SchemaEventClass* e, const char* p, const char* 
n) :
-            envelope(e), package(p), name(n), hasHash(false), 
classKey(package, name, hash) {}
+        SchemaEventClassImpl(const char* p, const char* n) :
+            package(p), name(n), hasHash(false), 
classKey(SchemaClassKeyImpl::factory(package, name, hash)) {}
         SchemaEventClassImpl(qpid::framing::Buffer& buffer);
+        static SchemaEventClass* factory(qpid::framing::Buffer& buffer);
+
         void encode(qpid::framing::Buffer& buffer) const;
-        void addArgument(const SchemaArgument& argument);
+        void addArgument(const SchemaArgument* argument);
         void setDesc(const char* desc) { description = desc; }
 
         const SchemaClassKey* getClassKey() const;

Modified: qpid/trunk/qpid/cpp/src/qmf/Value.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/Value.h?rev=816770&r1=816769&r2=816770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qmf/Value.h (original)
+++ qpid/trunk/qpid/cpp/src/qmf/Value.h Fri Sep 18 20:15:15 2009
@@ -33,7 +33,6 @@
         //        Value();
         Value(const Value& from);
         Value(Typecode t, Typecode arrayType = TYPE_UINT8);
-        Value(ValueImpl* impl);
         ~Value();
 
         Typecode getType() const;
@@ -81,7 +80,7 @@
         void setUuid(const uint8_t* val);
 
         bool isObject() const;
-        Object* asObject() const;
+        const Object* asObject() const;
         void setObject(Object* val);
 
         bool isMap() const;
@@ -106,6 +105,12 @@
         void appendToArray(Value* val);
         void deleteArrayItem(uint32_t idx);
 
+    private:
+        friend class ValueImpl;
+        friend class BrokerProxyImpl;
+        friend class ObjectImpl;
+        friend class AgentEngineImpl;
+        Value(ValueImpl* impl);
         ValueImpl* impl;
     };
 }

Modified: qpid/trunk/qpid/cpp/src/qmf/ValueImpl.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/ValueImpl.cpp?rev=816770&r1=816769&r2=816770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qmf/ValueImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qmf/ValueImpl.cpp Fri Sep 18 20:15:15 2009
@@ -24,7 +24,7 @@
 using namespace qmf;
 using qpid::framing::Buffer;
 
-ValueImpl::ValueImpl(Typecode t, Buffer& buf) : envelope(new Value(this)), 
typecode(t)
+ValueImpl::ValueImpl(Typecode t, Buffer& buf) : typecode(t)
 {
     uint64_t first;
     uint64_t second;
@@ -67,16 +67,27 @@
     }
 }
 
-ValueImpl::ValueImpl(Value* e, Typecode t, Typecode at) :
-    envelope(e), typecode(t), valid(false), arrayTypecode(at)
+ValueImpl::ValueImpl(Typecode t, Typecode at) : typecode(t), valid(false), 
arrayTypecode(at)
 {
 }
 
-ValueImpl::ValueImpl(Typecode t) : envelope(new Value(this)), typecode(t)
+ValueImpl::ValueImpl(Typecode t) : typecode(t)
 {
     ::memset(&value, 0, sizeof(value));
 }
 
+Value* ValueImpl::factory(Typecode t, Buffer& b)
+{
+    ValueImpl* impl(new ValueImpl(t, b));
+    return new Value(impl);
+}
+
+Value* ValueImpl::factory(Typecode t)
+{
+    ValueImpl* impl(new ValueImpl(t));
+    return new Value(impl);
+}
+
 ValueImpl::~ValueImpl()
 {
 }
@@ -118,9 +129,9 @@
 Value* ValueImpl::byKey(const char* key)
 {
     if (keyInMap(key)) {
-        map<std::string, VPtr>::iterator iter = mapVal.find(key);
+        map<std::string, Value>::iterator iter = mapVal.find(key);
         if (iter != mapVal.end())
-            return iter->second.get();
+            return &iter->second;
     }
     return 0;
 }
@@ -128,9 +139,9 @@
 const Value* ValueImpl::byKey(const char* key) const
 {
     if (keyInMap(key)) {
-        map<std::string, VPtr>::const_iterator iter = mapVal.find(key);
+        map<std::string, Value>::const_iterator iter = mapVal.find(key);
         if (iter != mapVal.end())
-            return iter->second.get();
+            return &iter->second;
     }
     return 0;
 }
@@ -142,12 +153,13 @@
 
 void ValueImpl::insert(const char* key, Value* val)
 {
-    mapVal[key] = VPtr(val);
+    pair<string, Value> entry(key, *val);
+    mapVal.insert(entry);
 }
 
 const char* ValueImpl::key(uint32_t idx) const
 {
-    map<std::string, VPtr>::const_iterator iter = mapVal.begin();
+    map<std::string, Value>::const_iterator iter = mapVal.begin();
     for (uint32_t i = 0; i < idx; i++) {
         if (iter == mapVal.end())
             break;
@@ -192,9 +204,9 @@
 //==================================================================
 
 Value::Value(const Value& from) : impl(new ValueImpl(*(from.impl))) {}
-Value::Value(Typecode t, Typecode at) : impl(new ValueImpl(this, t, at)) {}
+Value::Value(Typecode t, Typecode at) : impl(new ValueImpl(t, at)) {}
 Value::Value(ValueImpl* i) : impl(i) {}
-Value::~Value() { delete impl; }
+Value::~Value() { delete impl;}
 
 Typecode Value::getType() const { return impl->getType(); }
 bool Value::isNull() const { return impl->isNull(); }
@@ -230,7 +242,7 @@
 const uint8_t* Value::asUuid() const { return impl->asUuid(); }
 void Value::setUuid(const uint8_t* val) { impl->setUuid(val); }
 bool Value::isObject() const { return impl->isObject(); }
-Object* Value::asObject() const { return impl->asObject(); }
+const Object* Value::asObject() const { return impl->asObject(); }
 void Value::setObject(Object* val) { impl->setObject(val); }
 bool Value::isMap() const { return impl->isMap(); }
 bool Value::keyInMap(const char* key) const { return impl->keyInMap(key); }

Modified: qpid/trunk/qpid/cpp/src/qmf/ValueImpl.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/ValueImpl.h?rev=816770&r1=816769&r2=816770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qmf/ValueImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qmf/ValueImpl.h Fri Sep 18 20:15:15 2009
@@ -36,17 +36,14 @@
     // TODO: add a modified flag and accessors
 
     struct ValueImpl {
-        typedef boost::shared_ptr<Value> VPtr;
-        typedef boost::shared_ptr<Object> OPtr;
-        Value* envelope;
         const Typecode typecode;
         bool valid;
 
         ObjectId refVal;
         std::string stringVal;
-        OPtr objectVal;
-        std::map<std::string, VPtr> mapVal;
-        std::vector<VPtr> vectorVal;
+        std::auto_ptr<Object> objectVal;
+        std::map<std::string, Value> mapVal;
+        std::vector<Value> vectorVal;
         Typecode arrayTypecode;
 
         union {
@@ -60,9 +57,17 @@
             uint8_t  uuidVal[16];
         } value;
 
-        ValueImpl(Value* e, Typecode t, Typecode at);
+        ValueImpl(const ValueImpl& from) :
+            typecode(from.typecode), valid(from.valid), refVal(from.refVal), 
stringVal(from.stringVal),
+            objectVal(from.objectVal.get() ? new Object(*(from.objectVal)) : 
0),
+            mapVal(from.mapVal), vectorVal(from.vectorVal), 
arrayTypecode(from.arrayTypecode),
+            value(from.value) {}
+
+        ValueImpl(Typecode t, Typecode at);
         ValueImpl(Typecode t, qpid::framing::Buffer& b);
         ValueImpl(Typecode t);
+        static Value* factory(Typecode t, qpid::framing::Buffer& b);
+        static Value* factory(Typecode t);
         ~ValueImpl();
 
         void encode(qpid::framing::Buffer& b) const;



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to