diff options
| author | randomdan <randomdan@localhost> | 2014-09-15 23:15:42 +0000 |
|---|---|---|
| committer | randomdan <randomdan@localhost> | 2014-09-15 23:15:42 +0000 |
| commit | 5e73703b740526c1fdd0352ca7fca4ac7884201e (patch) | |
| tree | 599668ecffda805abb7548121fed6729ba9a478c /slicer/slicer | |
| parent | Fix support for json to deserialize inherited types (diff) | |
| download | slicer-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.cpp | 6 | ||||
| -rw-r--r-- | slicer/slicer/modelParts.h | 4 | ||||
| -rw-r--r-- | slicer/slicer/parser.cpp | 6 |
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(), |
