]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLADataType.hxx
Merge branch 'timoore/optimizations' into next
[simgear.git] / simgear / hla / HLADataType.hxx
index 7b20dafd1ad7c3d909a6e9fbebbae12394b0a58b..6e15aade4c7e3daf2f86cb53bde0b8ee545b3621 100644 (file)
@@ -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<HLADataType>& dataType) :
-        HLADataType(dataType->getName(), dataType->getAlignment()),
-        _dataType(dataType)
-    { }
-    virtual ~HLADataTypeReference();
-
-    SGSharedPtr<const HLADataType> getDataType() const
-    { return _dataType.lock(); }
-
-    virtual void accept(HLADataTypeVisitor& visitor) const;
-    virtual const HLADataTypeReference* toDataTypeReference() const;
-
-private:
-    SGWeakPtr<const HLADataType> _dataType;
-};
-
 } // namespace simgear
 
 #endif