From e8cab7ab5899507191e1586edd537ed269436fd3 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 22 Jul 2017 20:54:47 +0100 Subject: Don't copy (take by const reference) when serializing (although we do cast off the const later, but we promise not to change the object) --- slicer/slicer/modelPartsTypes.impl.h | 4 ++++ slicer/slicer/slicer.h | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/slicer/slicer/modelPartsTypes.impl.h b/slicer/slicer/modelPartsTypes.impl.h index 2121d5d..988d91e 100644 --- a/slicer/slicer/modelPartsTypes.impl.h +++ b/slicer/slicer/modelPartsTypes.impl.h @@ -14,9 +14,13 @@ template class ModelPartForRoot< IceUtil::Optional >; \ template<> ModelPartPtr ModelPart::CreateFor() { return new ModelPartType(nullptr); } \ template<> ModelPartPtr ModelPart::CreateFor(Type & s) { return new ModelPartType(&s); } \ + template<> ModelPartPtr ModelPart::CreateFor(const Type & s) { return CreateFor(const_cast(s)); } \ template<> ModelPartPtr ModelPart::CreateFor(IceUtil::Optional & s) { return new ModelPartForOptional(&s); } \ + template<> ModelPartPtr ModelPart::CreateFor(const IceUtil::Optional & s) { return CreateFor(const_cast &>(s)); } \ template<> ModelPartForRootPtr ModelPart::CreateRootFor(Type & s) { return new ModelPartForRoot(&s); } \ template<> ModelPartForRootPtr ModelPart::CreateRootFor(IceUtil::Optional & s) { return new ModelPartForRoot >(&s); } \ + template<> ModelPartForRootPtr ModelPart::CreateRootFor(const Type & s) { return CreateRootFor(const_cast(s)); } \ + template<> ModelPartForRootPtr ModelPart::CreateRootFor(const IceUtil::Optional & s) { return CreateRootFor(const_cast &>(s)); } \ #define MODELPARTFOR(Type, ModelPartType) \ CUSTOMMODELPARTFOR(Type, ModelPartType, ModelPartType) diff --git a/slicer/slicer/slicer.h b/slicer/slicer/slicer.h index ba233bb..4513ced 100644 --- a/slicer/slicer/slicer.h +++ b/slicer/slicer/slicer.h @@ -24,14 +24,14 @@ namespace Slicer { template void - SerializeAnyWith(Object object, SerializerPtr serializer) + SerializeAnyWith(const Object & object, SerializerPtr serializer) { - serializer->Serialize(ModelPart::CreateRootFor(object)); + serializer->Serialize(ModelPart::CreateRootFor(object)); } template void - SerializeAny(Object object, SerializerParams && ... sp) + SerializeAny(const Object & object, SerializerParams && ... sp) { SerializeAnyWith(object, new Serializer(sp ...)); } -- cgit v1.2.3