X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLADataType.hxx;h=6e15aade4c7e3daf2f86cb53bde0b8ee545b3621;hb=d6361dfee43c0595a19d409b438c6d1cdd65d2ea;hp=7b20dafd1ad7c3d909a6e9fbebbae12394b0a58b;hpb=dc9163f8016047f29603c3d40032655132f5c109;p=simgear.git diff --git a/simgear/hla/HLADataType.hxx b/simgear/hla/HLADataType.hxx index 7b20dafd..6e15aade 100644 --- a/simgear/hla/HLADataType.hxx +++ b/simgear/hla/HLADataType.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de +// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public @@ -27,20 +27,12 @@ namespace simgear { class HLADataTypeVisitor; -class HLADataTypeReference; class HLABasicDataType; class HLAArrayDataType; class HLAEnumeratedDataType; class HLAFixedRecordDataType; class HLAVariantRecordDataType; -enum HLAUpdateType { - HLAStaticUpdate, - HLAPeriodicUpdate, - HLAConditionalUpdate, - HLAUndefinedUpdate -}; - class HLADataType : public SGWeakReferenced { public: virtual ~HLADataType(); @@ -58,44 +50,31 @@ public: virtual void accept(HLADataTypeVisitor& visitor) const; - virtual const HLADataTypeReference* toDataTypeReference() const; virtual const HLABasicDataType* toBasicDataType() const; virtual const HLAArrayDataType* toArrayDataType() const; virtual const HLAEnumeratedDataType* toEnumeratedDataType() const; virtual const HLAFixedRecordDataType* toFixedRecordDataType() const; - /// deprecated - const HLAVariantRecordDataType* toVariantDataType() const { return toVariantRecordDataType(); } virtual const HLAVariantRecordDataType* toVariantRecordDataType() const; + /// Recompute the alignment value of this data type. + /// Return true if the alignment changed, false otherwise. + bool recomputeAlignment(); + /// Release references to other data types. Since we can have cycles this is + /// required for propper feeing of memory. + virtual void releaseDataTypeReferences(); + protected: HLADataType(const std::string& name, unsigned alignment = 1); void setAlignment(unsigned alignment); + virtual void _recomputeAlignmentImplementation(); + private: std::string _name; std::string _semantics; unsigned _alignment; }; -// Weak reference to a data type. Used to implement self referencing data types -class HLADataTypeReference : public HLADataType { -public: - HLADataTypeReference(const SGSharedPtr& dataType) : - HLADataType(dataType->getName(), dataType->getAlignment()), - _dataType(dataType) - { } - virtual ~HLADataTypeReference(); - - SGSharedPtr getDataType() const - { return _dataType.lock(); } - - virtual void accept(HLADataTypeVisitor& visitor) const; - virtual const HLADataTypeReference* toDataTypeReference() const; - -private: - SGWeakPtr _dataType; -}; - } // namespace simgear #endif