summaryrefslogtreecommitdiff
path: root/slicer/slicer
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2014-09-15 23:15:42 +0000
committerrandomdan <randomdan@localhost>2014-09-15 23:15:42 +0000
commit5e73703b740526c1fdd0352ca7fca4ac7884201e (patch)
tree599668ecffda805abb7548121fed6729ba9a478c /slicer/slicer
parentFix support for json to deserialize inherited types (diff)
downloadslicer-5e73703b740526c1fdd0352ca7fca4ac7884201e.tar.bz2
slicer-5e73703b740526c1fdd0352ca7fca4ac7884201e.tar.xz
slicer-5e73703b740526c1fdd0352ca7fca4ac7884201e.zip
Allow overriding of the slicer-typeid property name
Diffstat (limited to 'slicer/slicer')
-rw-r--r--slicer/slicer/modelParts.cpp6
-rw-r--r--slicer/slicer/modelParts.h4
-rw-r--r--slicer/slicer/parser.cpp6
3 files changed, 16 insertions, 0 deletions
diff --git a/slicer/slicer/modelParts.cpp b/slicer/slicer/modelParts.cpp
index 4c05513..b163da3 100644
--- a/slicer/slicer/modelParts.cpp
+++ b/slicer/slicer/modelParts.cpp
@@ -40,6 +40,12 @@ namespace Slicer {
return TypeId();
}
+ IceUtil::Optional<std::string>
+ ModelPart::GetTypeIdProperty() const
+ {
+ return IceUtil::Optional<std::string>();
+ }
+
void
ModelPart::SetValue(ValueSourcePtr)
{
diff --git a/slicer/slicer/modelParts.h b/slicer/slicer/modelParts.h
index 41b0617..9a0dab9 100644
--- a/slicer/slicer/modelParts.h
+++ b/slicer/slicer/modelParts.h
@@ -102,6 +102,7 @@ namespace Slicer {
virtual ModelPartPtr GetChild(const std::string & memberName) = 0;
virtual ModelPartPtr GetSubclassModelPart(const std::string &);
virtual TypeId GetTypeId() const;
+ virtual IceUtil::Optional<std::string> GetTypeIdProperty() const;
virtual ModelPartType GetType() const = 0;
virtual void Create();
virtual void Complete();
@@ -332,8 +333,11 @@ namespace Slicer {
virtual TypeId GetTypeId() const override;
+ virtual IceUtil::Optional<std::string> GetTypeIdProperty() const override { return typeIdProperty; }
+
private:
T & ModelObject;
+ static std::string typeIdProperty;
};
template<typename T>
diff --git a/slicer/slicer/parser.cpp b/slicer/slicer/parser.cpp
index 6c65c1f..e3487c7 100644
--- a/slicer/slicer/parser.cpp
+++ b/slicer/slicer/parser.cpp
@@ -129,6 +129,12 @@ namespace Slicer {
fprintf(cpp, "\t};\n\n");
fprintf(cpp, "template<>\n");
+ auto typeId = metaDataValue("slicer:typeid:", c->getMetaData());
+ fprintf(cpp, "std::string ModelPartForClass< %s >::typeIdProperty(\"%s\");\n\n",
+ typeToString(decl).c_str(),
+ typeId ? typeId->c_str() : "slicer-typeid");
+
+ fprintf(cpp, "template<>\n");
auto name = metaDataValue("slicer:root:", c->getMetaData());
fprintf(cpp, "std::string ModelPartForClassRoot< %s >::rootName(\"%s\");\n\n",
typeToString(decl).c_str(),