public FOMInteractionInterfacesHeader(FOMParser fom, string interactionInterfacesHeaderFilename, string objectInterfacesHeaderFilename, string dataTypesHeaderFilename)
 {
     FOM = fom;
     InteractionInterfacesHeaderFilename = System.IO.Path.GetFileName(interactionInterfacesHeaderFilename);
     ObjectInterfacesHeaderFilename      = System.IO.Path.GetFileName(objectInterfacesHeaderFilename);
     DataTypesHeaderFilename             = System.IO.Path.GetFileName(dataTypesHeaderFilename);
 }
Example #2
0
 public FOMEncodingHeader(FOMParser fom, string dataTypesHeaderFilename, string includePath)
 {
     FOM = fom;
     if (includePath.Length > 0)
     {
         DataTypesHeaderFilename = includePath + "/" + System.IO.Path.GetFileName(dataTypesHeaderFilename);
     }
     else
     {
         DataTypesHeaderFilename = System.IO.Path.GetFileName(dataTypesHeaderFilename);
     }
 }
Example #3
0
 public FOMObjectsHeader(FOMParser fom, string objectsHeaderFilename, string objectInterfacesHeaderFilename, string encodingHeaderFilename, string includePath)
 {
     FOM = fom;
     ObjectsHeaderFilename = System.IO.Path.GetFileName(objectsHeaderFilename);
     if (includePath.Length > 0)
     {
         ObjectInterfacesHeaderFilename = includePath + "/" + System.IO.Path.GetFileName(objectInterfacesHeaderFilename);
     }
     else
     {
         ObjectInterfacesHeaderFilename = System.IO.Path.GetFileName(objectInterfacesHeaderFilename);
     }
     EncodingHeaderFilename = System.IO.Path.GetFileName(encodingHeaderFilename);
 }
Example #4
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n// Code automatically generated by FOMCodeGen version ");

            #line 7 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.GeneratorVersion));

            #line default
            #line hidden
            this.Write(" from ");

            #line 7 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(System.IO.Path.GetFileName(FOM.Filename)));

            #line default
            #line hidden
            this.Write(", do not edit\r\n\r\n");

            #line 9 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            if (FOM.ModelIdentification.Name != null)
            {
            #line default
            #line hidden

            #line 10 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Name, "Name: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 11 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 12 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            if (FOM.ModelIdentification.Copyright != null)
            {
            #line default
            #line hidden

            #line 13 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Copyright, "Copyright: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 14 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 15 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            if (FOM.ModelIdentification.Version != null)
            {
            #line default
            #line hidden

            #line 16 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Version, "Version: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 17 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 18 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            if (FOM.ModelIdentification.Description != null)
            {
            #line default
            #line hidden

            #line 19 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Description, "Description: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 20 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 21 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            if (FOM.ModelIdentification.Purpose != null)
            {
            #line default
            #line hidden

            #line 22 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Purpose, "Purpose: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 23 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n#pragma once\r\n\r\n#include <vector>\r\n#include <functional>\r\n#include <memory>\r\n\r\n" +
                       "");

            #line 31 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.GetPredefinedTypeIncludes(FOMParser.FileContext.kObjectInterfaces)));

            #line default
            #line hidden
            this.Write("\r\n#include \"");

            #line 32 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(DataTypesHeaderFilename));

            #line default
            #line hidden
            this.Write("\"\r\n\r\n");

            #line 34 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

            foreach (var namespacePart in FOM.Namespace)
            {
            #line default
            #line hidden
                this.Write("namespace ");

            #line 38 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(namespacePart));

            #line default
            #line hidden
                this.Write(" {\r\n");

            #line 39 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n");

            #line 41 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

            foreach (var objectClass in FOM.ObjectClasses)
            {
            #line default
            #line hidden
                this.Write("class I");

            #line 45 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(";\r\n// I");

            #line 46 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("ObjectClass represents the HLA object class ");

            #line 46 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.QualifiedName));

            #line default
            #line hidden
                this.Write(".\r\n// Instances of I");

            #line 47 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(" represent the corresponding HLA object instances.\r\nclass I");

            #line 48 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("ObjectClass\r\n{\r\n  public:\r\n    using DiscoverObjectInstanceCallback = std::functi" +
                           "on<void(std::shared_ptr<I");

            #line 51 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(">)>;\r\n    using RemoveObjectInstanceCallback = std::function<void(std::shared_ptr" +
                           "<I");

            #line 52 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(">)>;\r\n    using ObjectCreatedCallbackType = std::function<void(std::shared_ptr<I");

            #line 53 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(@">, bool success)>;
    // Publish/unpublish this object class. Creating object instances requires publishing the object class.
    virtual void Publish() = 0;
    virtual void Unpublish() = 0;
    // Subscribe/unsubscribe this object class. Taking part in object discovery and receiving attribute updates requires subscribing the object class.
    // Note that the appropriate callbacks should have been registered *before* subscribing to the object class.
    virtual void Subscribe(bool deliverToSelf) = 0;
    virtual void Unsubscribe() = 0;
    // Return an existing object instance by name, or nullptr if not existant.
    virtual std::shared_ptr<I");

            #line 62 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("> GetObjectInstance(const std::wstring& instanceName) = 0;\r\n    // Create an inst" +
                           "ance of I");

            #line 63 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(@". Returns nullptr if the object instance already exists.
    // If another federate has already created an object instance with the same name and the same object class,
    // the discover object instance mechanism will reuse the object returned by 'create object instance'.
    // A discover object instance callback should be installed by the application to appropriately handle this case.
    virtual std::shared_ptr<I");

            #line 67 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("> CreateObjectInstance(const std::wstring& instanceName) = 0;\r\n    // Create an i" +
                           "nstance of I");

            #line 68 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(", and notify the application about having completed the HLA object registration.\r" +
                           "\n    // The callback\'s \'success\' parameter indicates whether the object instance" +
                           " name could successfully be reserved for the object.\r\n    virtual std::shared_pt" +
                           "r<I");

            #line 70 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("> CreateObjectInstance(const std::wstring& instanceName, ObjectCreatedCallbackTyp" +
                           "e createdCallback) = 0;\r\n    // Restore a \'dead\' instance of I");

            #line 71 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(@". Returns nullptr if the object instance already exists.
    // If another federate has already created an object instance with the same name and the same object class,
    // the discover object instance mechanism will reuse the object returned by 'create object instance'.
    // A discover object instance callback should be installed by the application to appropriately handle this case.
    virtual std::shared_ptr<I");

            #line 75 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("> RestoreObjectInstance(std::shared_ptr<I");

            #line 75 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("> existingObject) = 0;\r\n    // Restore a \'dead\' instance of I");

            #line 76 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(", and notify the application about having completed the HLA object registration.\r" +
                           "\n    // The callback\'s \'success\' parameter indicates whether the object instance" +
                           " name could successfully be reserved for the object.\r\n    virtual std::shared_pt" +
                           "r<I");

            #line 78 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("> RestoreObjectInstance(std::shared_ptr<I");

            #line 78 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write(@"> existingObject, ObjectCreatedCallbackType createdCallback) = 0;

    // install a discover object instance callback for this HLA object class
    virtual uint32_t RegisterDiscoverObjectInstanceCallback(DiscoverObjectInstanceCallback callback) = 0;
    virtual void UnregisterDiscoverObjectInstanceCallback(uint32_t callbackToken) = 0;

    // install a remove object instance callback for the HLA object class
    virtual uint32_t RegisterRemoveObjectInstanceCallback(RemoveObjectInstanceCallback callback) = 0;
    virtual void UnregisterRemoveObjectInstanceCallback(uint32_t callbackToken) = 0;
};

class I");

            #line 89 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden

            #line 89 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

                if (objectClass.BaseClass != null)
                {
            #line default
            #line hidden
                    this.Write(" : public I");

            #line 92 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.BaseClass.Name));

            #line default
            #line hidden
                    this.Write("\r\n");

            #line 93 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                }
                else
                {
            #line default
            #line hidden
                    this.Write(" : public std::enable_shared_from_this<I");

            #line 94 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                    this.Write(">\r\n");

            #line 95 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                } // if

            #line default
            #line hidden
                this.Write("{\r\n");

            #line 97 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

                string attributeBitsClass   = "uint32_t";
                string attributeBitsPostfix = "";
                if (objectClass.Attributes.Count > 32)
                {
                    attributeBitsClass   = "uint64_t";
                    attributeBitsPostfix = "ull";
                }


            #line default
            #line hidden
                this.Write("  public:\r\n");

            #line 107 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                if (objectClass.BaseClass == null)
                {
            #line default
            #line hidden
                    this.Write("    using AttributeBits = ");

            #line 108 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(attributeBitsClass));

            #line default
            #line hidden
                    this.Write(";\r\n    static const AttributeBits kNone = 0x0;\r\n");

            #line 110 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                }

            #line default
            #line hidden

            #line 111 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

                ulong bit;
                if (objectClass.BaseClass != null)
                {
                    bit = (ulong)(1 << objectClass.BaseClass.AllAttributes.Count);
                }
                else
                {
                    bit = 1;
                }
                foreach (var attribute in objectClass.Attributes)
                {
                    if (attribute.DataType != null)
                    {
            #line default
            #line hidden
                        this.Write("    static const AttributeBits k");

            #line 121 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.Name));

            #line default
            #line hidden
                        this.Write("Bit = 0x");

            #line 121 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(bit.ToString("X")));

            #line default
            #line hidden

            #line 121 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attributeBitsPostfix));

            #line default
            #line hidden
                        this.Write(";\r\n");

            #line 122 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

                        bit = bit << 1;
                    } // if (attribute.DataType != null)
                }     // foreach (var attribute in objectClass.Attributes)


            #line default
            #line hidden
                this.Write("\r\n    I");

            #line 128 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("() {}\r\n");

            #line 129 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                if (objectClass.BaseClass == null)
                {
            #line default
            #line hidden
                    this.Write("    virtual ~I");

            #line 130 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                    this.Write("() {}\r\n");

            #line 131 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                }
                else
                {
            #line default
            #line hidden
                    this.Write("    ~I");

            #line 132 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                    this.Write("() {}\r\n");

            #line 133 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                }

            #line default
            #line hidden
                this.Write("    // copying and moving an object instance is not allowed\r\n    I");

            #line 135 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("(const I");

            #line 135 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("&) = delete;\r\n    I");

            #line 136 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("(I");

            #line 136 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("&&) = delete;\r\n    I");

            #line 137 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("& operator=(const I");

            #line 137 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("&) = delete;\r\n    I");

            #line 138 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("& operator=(I");

            #line 138 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("&&) = delete;\r\n\r\n");

            #line 140 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                if (objectClass.BaseClass == null)
                {
            #line default
            #line hidden
                    this.Write(@"    virtual std::wstring GetObjectInstanceName() const = 0;
    // has this object a valid HLA object instance handle?
    virtual bool IsValid() const = 0;
    // After having called CreateObjectInstance, wait until object registration completed.
    // Returns false if the object registration failed.
    virtual bool WaitForObjectValid() = 0;
    // has this object been created by this federate?
    virtual bool IsOwner() const = 0;
    // Delete the object from HLA and the class registry.
    // Be careful to keep a shared_ptr to the object while executing Release!
    virtual void Release() = 0;
");

            #line 152 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                }

            #line default
            #line hidden

            #line 153 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

                foreach (var attribute in objectClass.Attributes)
                {
                    if (attribute.DataType != null)
                    {
            #line default
            #line hidden
                        this.Write("    // attribute ");

            #line 158 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.Name));

            #line default
            #line hidden
                        this.Write(" : ");

            #line 158 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.DataType.Name));

            #line default
            #line hidden
                        this.Write("\r\n    virtual ");

            #line 159 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.DataType.ReturnCppType));

            #line default
            #line hidden
                        this.Write(" Get");

            #line 159 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.Name));

            #line default
            #line hidden
                        this.Write("() const = 0;\r\n");

            #line 160 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        if (attribute.DataType is FOMParser.FixedRecordDataType)
                        {
            #line default
            #line hidden
                            this.Write("    virtual ");

            #line 161 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                            this.Write(this.ToStringHelper.ToStringWithCulture(attribute.DataType.ModifiableReturnCppType));

            #line default
            #line hidden
                            this.Write(" Get");

            #line 161 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                            this.Write(this.ToStringHelper.ToStringWithCulture(attribute.Name));

            #line default
            #line hidden
                            this.Write("() = 0;\r\n");

            #line 162 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        }

            #line default
            #line hidden
                        this.Write("    virtual void Set");

            #line 163 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.Name));

            #line default
            #line hidden
                        this.Write("(");

            #line 163 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.DataType.ParameterCppType));

            #line default
            #line hidden
                        this.Write(" newValue) = 0;\r\n");

            #line 164 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    }
                    else
                    {
            #line default
            #line hidden
                        this.Write("    // attribute ");

            #line 165 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(attribute.Name));

            #line default
            #line hidden
                        this.Write(" : no data type\r\n");

            #line 166 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    } // if (attribute.DataType != null)
                }     // foreach (var attribute in objectClass.Attributes)


            #line default
            #line hidden

            #line 170 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                if (objectClass.HasValidAttributes)
                {
            #line default
            #line hidden

            #line 171 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    if (objectClass.BaseClass != null && !objectClass.BaseClass.HasValidAttributes) // first child class with valid attributes

                    {
            #line default
            #line hidden
                        this.Write("    // send all attribute values\r\n    virtual void UpdateAllAttributeValues() = 0" +
                                   ";\r\n    // send all attribute values, as TSO message\r\n    virtual void UpdateAllA" +
                                   "ttributeValues(");

            #line 175 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(FOM.NativeTimeType));

            #line default
            #line hidden
                        this.Write(@" time) = 0;
    // send attribute values which have been modified since last call
    virtual void UpdateModifiedAttributeValues() = 0;
    // send attribute values which have been modified since last call, as TSO message
    virtual void UpdateModifiedAttributeValues(");

            #line 179 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(FOM.NativeTimeType));

            #line default
            #line hidden
                        this.Write(@" time) = 0;
    // bitmask of attributes ever received
    virtual AttributeBits GetReceivedAttributes() const = 0;
    // bitmask of attributes received in last update (cleared after update callbacks executed)
    virtual AttributeBits GetUpdatedAttributes() const = 0;
    // bitmask of attributes ever modified
    virtual AttributeBits GetInitializedAttributes() const = 0;
    // bitmask of attributes modified since last updateAttributeValues/provideAttributeValues
    // (cleared by UpdateAttributeValues or ProvideAttributeValues)
    virtual AttributeBits GetModifiedAttributes() const = 0;
    // request attribute values which haven't been updated in last reflectAttributeValues
    virtual void RequestAttributeValues() = 0;
    // request all attribute values
    virtual void RequestAllAttributeValues() = 0;
");

            #line 193 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    }

            #line default
            #line hidden

            #line 194 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    if (objectClass.ChildClasses.Count == 0)
                    {
            #line default
            #line hidden
                        this.Write("    using UpdateCallback = std::function<void(std::shared_ptr<I");

            #line 195 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                        this.Write(">, optional<");

            #line 195 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(FOM.NativeTimeType));

            #line default
            #line hidden
                        this.Write("> time, optional<OrderType> orderType)>;\r\n    virtual uint32_t RegisterUpdateCall" +
                                   "back(UpdateCallback callback) = 0;\r\n    virtual void UnregisterUpdateCallback(ui" +
                                   "nt32_t callbackToken) = 0;\r\n");

            #line 198 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                    } // if (objectClass.ChildClasses.Count == 0)

            #line default
            #line hidden

            #line 199 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                } // if (objectClass.HasValidAttributes)

            #line default
            #line hidden
                this.Write("};\r\n\r\n");

            #line 202 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            } // foreach (var objectClass in FOM.ObjectClasses)

            #line default
            #line hidden
            this.Write("\r\nclass IObjectClassRegistry\r\n{\r\n  public:\r\n");

            #line 207 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            foreach (var objectClass in FOM.ObjectClasses)
            {
            #line default
            #line hidden
                this.Write("    virtual I");

            #line 208 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("ObjectClass* Get");

            #line 208 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(objectClass.Name));

            #line default
            #line hidden
                this.Write("ObjectClass() const = 0;\r\n");

            #line 209 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("  protected:\r\n    virtual ~IObjectClassRegistry() {}\r\n}; // class IObjectClassReg" +
                       "istry\r\n\r\n");

            #line 214 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"

            foreach (var namespacePart in FOM.Namespace)
            {
            #line default
            #line hidden
                this.Write("} // namespace ");

            #line 218 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(namespacePart));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 219 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMObjectInterfacesHeader.tt"
            }

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }
Example #5
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n// Code automatically generated by FOMCodeGen version ");

            #line 7 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.GeneratorVersion));

            #line default
            #line hidden
            this.Write(" from ");

            #line 7 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(System.IO.Path.GetFileName(FOM.Filename)));

            #line default
            #line hidden
            this.Write(", do not edit\r\n\r\n");

            #line 9 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            if (FOM.ModelIdentification.Name != null)
            {
            #line default
            #line hidden

            #line 10 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Name, "Name: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 11 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 12 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            if (FOM.ModelIdentification.Copyright != null)
            {
            #line default
            #line hidden

            #line 13 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Copyright, "Copyright: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 14 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 15 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            if (FOM.ModelIdentification.Version != null)
            {
            #line default
            #line hidden

            #line 16 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Version, "Version: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 17 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 18 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            if (FOM.ModelIdentification.Description != null)
            {
            #line default
            #line hidden

            #line 19 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Description, "Description: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 20 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden

            #line 21 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            if (FOM.ModelIdentification.Purpose != null)
            {
            #line default
            #line hidden

            #line 22 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Purpose, "Purpose: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 23 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n#pragma once\r\n\r\n#include <vector>\r\n#include <functional>\r\n\r\n");

            #line 30 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.GetPredefinedTypeIncludes(FOMParser.FileContext.kInteractionInterfaces)));

            #line default
            #line hidden
            this.Write("\r\n#include \"");

            #line 31 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(DataTypesHeaderFilename));

            #line default
            #line hidden
            this.Write("\"\r\n#include \"");

            #line 32 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(ObjectInterfacesHeaderFilename));

            #line default
            #line hidden
            this.Write("\"\r\n\r\n");

            #line 34 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            foreach (var namespacePart in FOM.Namespace)
            {
            #line default
            #line hidden
                this.Write("namespace ");

            #line 35 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(namespacePart));

            #line default
            #line hidden
                this.Write(" {\r\n");

            #line 36 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n");

            #line 38 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            foreach (var interactionClass in FOM.InteractionClasses)
            {
            #line default
            #line hidden
                this.Write("// I");

            #line 39 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.Name));

            #line default
            #line hidden
                this.Write("InteractionClass represents the HLA interaction class ");

            #line 39 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.QualifiedName));

            #line default
            #line hidden
                this.Write(".\r\nclass I");

            #line 40 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.Name));

            #line default
            #line hidden
                this.Write(@"InteractionClass
{
  public:
    // Publish/unpublish the interaction class. Sending an interaction of this class requires publishing the interaction class.
    virtual void Publish() = 0;
    virtual void Unpublish() = 0;
    // Subscribe the interaction class. Receiving interactions requires having subscribed to this interaction class.
    // Note that the appropriate callbacks should have been registered *before* subscribing to the interaction class.
    virtual void Subscribe(bool deliverToSelf) = 0;
");

            #line 49 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                if (interactionClass.HasValidParameters)
                {
            #line default
            #line hidden
                    this.Write(@"    // Subscribe the interaction class with filter values. Only interactions with parameters matching the given values will be received.
    // Filtered subscriptions may be issued several times with differing value tuples. 'nullopt' may be used as a wildcard, matching
    // any incoming value.
    virtual void Subscribe(");

            #line 53 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.CppParameterList));

            #line default
            #line hidden
                    this.Write(", bool deliverToSelf) = 0;\r\n");

            #line 54 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                }

            #line default
            #line hidden
                this.Write(@"    // Unsubscribe the interaction class, cancelling reception of interactions. Calling Unsubscribe will also clear all filtered subscriptions, if any.
    virtual void Unsubscribe() = 0;
    // Send an interaction as receive order message.
    virtual void send(");

            #line 58 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.CppParameterList));

            #line default
            #line hidden
                this.Write(") = 0;\r\n    // Send a time stamped interaction.\r\n    virtual void sendWithTime(");

            #line 60 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.CppParameterList));

            #line default
            #line hidden

            #line 60 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                if (interactionClass.HasValidParameters)
                {
            #line default
            #line hidden
                    this.Write(", ");

            #line 60 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                }

            #line default
            #line hidden

            #line 60 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOM.NativeTimeType));

            #line default
            #line hidden
                this.Write(@" time) = 0;
    // Register an interaction callback. The optional time stamp will be delivered by the application. When the time stamp is valid,
    // the optional order type will indicate the source of the time stamp.
    using ReceiveCallback = std::function<void(");

            #line 63 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.CppParameterList));

            #line default
            #line hidden

            #line 63 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                if (interactionClass.HasValidParameters)
                {
            #line default
            #line hidden
                    this.Write(", ");

            #line 63 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                }

            #line default
            #line hidden
                this.Write("optional<");

            #line 63 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOM.NativeTimeType));

            #line default
            #line hidden
                this.Write(@"> time, optional<OrderType> orderType)>;
    using ReceiveCallbackHandle = uint32_t;
    constexpr static ReceiveCallbackHandle kInvalidCallbackHandle = 0xffffffff;
    virtual ReceiveCallbackHandle RegisterReceiveCallback(ReceiveCallback callback) = 0;
    virtual void UnregisterReceiveCallback(ReceiveCallbackHandle callbackHandle) = 0;
};

");

            #line 70 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            } // foreach (var interactionClass in FOM.InteractionClasses)

            #line default
            #line hidden
            this.Write("\r\nclass IInteractionClassRegistry\r\n{\r\n  public:\r\n");

            #line 75 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            foreach (var interactionClass in FOM.InteractionClasses)
            {
            #line default
            #line hidden
                this.Write("    virtual I");

            #line 76 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.Name));

            #line default
            #line hidden
                this.Write("InteractionClass* Get");

            #line 76 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(interactionClass.Name));

            #line default
            #line hidden
                this.Write("InteractionClass() const = 0;\r\n");

            #line 77 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("  protected:\r\n    virtual ~IInteractionClassRegistry() {}\r\n}; // class IInteracti" +
                       "onClassRegistry\r\n\r\n");

            #line 82 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            foreach (var namespacePart in FOM.Namespace)
            {
            #line default
            #line hidden
                this.Write("} // namespace ");

            #line 83 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(namespacePart));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 84 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMInteractionInterfacesHeader.tt"
            }

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }
Example #6
0
        static void Main(string[] args)
        {
            List <String> argList = new List <string>(args);

            try
            {
                string        filename                                = "D:/vfs/CANoe/feature/14.0_DistSim_HLA/Projects_Source/CANoe/Source/RTEVENT/DistSim/RTFederate.xml";
                string        enclosingNamespace                      = "N" + System.IO.Path.GetFileNameWithoutExtension(filename) + "Encoding";
                bool          usePrecompiledHeaders                   = false;
                bool          doDryRun                                = false;
                bool          haveFilename                            = false;
                bool          haveNamespace                           = false;
                string        outputDirectory                         = "";
                bool          outputDirectorySpecified                = false;
                string        interfaceHeaderOutputDirectory          = "";
                bool          interfaceHeaderOutputDirectorySpecified = false;
                string        pathSeparator                           = new string(new char[] { System.IO.Path.DirectorySeparatorChar });
                string        doublePathSeparator                     = new string(new char[] { System.IO.Path.DirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar });
                string        interfacesIncludePath                   = "";
                List <String> includePaths                            = new List <string>();
                while (argList.Count() > 0)
                {
                    if (argList.First() == "-p")
                    {
                        usePrecompiledHeaders = true;
                        argList.RemoveAt(0);
                    }
                    else if (argList.First() == "-d")
                    {
                        doDryRun = true;
                        argList.RemoveAt(0);
                    }
                    else if (argList.First() == "-o")
                    {
                        argList.RemoveAt(0);
                        if (argList.Count() > 0)
                        {
                            outputDirectorySpecified = true;
                            outputDirectory          = argList.First()
                                                       .Replace(doublePathSeparator, pathSeparator)
                                                       .TrimEnd(new char[] { System.IO.Path.DirectorySeparatorChar });
                            argList.RemoveAt(0);
                            if (!System.IO.Directory.Exists(outputDirectory))
                            {
                                throw new ArgumentException("output directory " + outputDirectory + "does not exist");
                            }
                        }
                        else
                        {
                            throw new ArgumentException("option -o requires argument");
                        }
                    }
                    else if (argList.First() == "-oi")
                    {
                        argList.RemoveAt(0);
                        if (argList.Count() > 0)
                        {
                            interfaceHeaderOutputDirectorySpecified = true;
                            interfaceHeaderOutputDirectory          = argList.First()
                                                                      .Replace(doublePathSeparator, pathSeparator)
                                                                      .TrimEnd(new char[] { System.IO.Path.DirectorySeparatorChar });
                            argList.RemoveAt(0);
                            if (!System.IO.Directory.Exists(interfaceHeaderOutputDirectory))
                            {
                                throw new ArgumentException("interface header output directory " + interfaceHeaderOutputDirectory + "does not exist");
                            }
                        }
                        else
                        {
                            throw new ArgumentException("option -oi requires argument");
                        }
                    }
                    else if (argList.First() == "-I")
                    {
                        argList.RemoveAt(0);
                        if (argList.Count() > 0)
                        {
                            string includeDirectory = argList.First()
                                                      .Replace(doublePathSeparator, pathSeparator)
                                                      .TrimEnd(new char[] { System.IO.Path.DirectorySeparatorChar });
                            argList.RemoveAt(0);
                            includePaths.Add(includeDirectory);
                        }
                        else
                        {
                            throw new ArgumentException("option -oi requires argument");
                        }
                    }
                    else if (!haveFilename)
                    {
                        haveFilename = true;
                        filename     = argList.First();
                        argList.RemoveAt(0);
                    }
                    else if (!haveNamespace)
                    {
                        haveNamespace      = true;
                        enclosingNamespace = argList.First();
                        argList.RemoveAt(0);
                    }
                }
                if (!outputDirectorySpecified)
                {
                    outputDirectory = System.IO.Path.GetDirectoryName(filename);
                }
                if (!interfaceHeaderOutputDirectorySpecified)
                {
                    interfaceHeaderOutputDirectory = outputDirectory;
                }
                var basename = System.IO.Path.GetFileNameWithoutExtension(filename);
                var dataTypesHeaderFilename             = System.IO.Path.Combine(interfaceHeaderOutputDirectory, basename + "DataTypes.h");
                var encodingsHeaderFilename             = System.IO.Path.Combine(outputDirectory, basename + "Encodings.h");
                var encodingsImplFilename               = System.IO.Path.Combine(outputDirectory, basename + "Encodings.cpp");
                var objectInterfacesHeaderFilename      = System.IO.Path.Combine(interfaceHeaderOutputDirectory, basename + "ObjectInterfaces.h");
                var objectsHeaderFilename               = System.IO.Path.Combine(outputDirectory, basename + "Objects.h");
                var objectsImplFilename                 = System.IO.Path.Combine(outputDirectory, basename + "Objects.cpp");
                var interactionInterfacesHeaderFilename = System.IO.Path.Combine(interfaceHeaderOutputDirectory, basename + "InteractionInterfaces.h");
                var interactionsHeaderFilename          = System.IO.Path.Combine(outputDirectory, basename + "Interactions.h");
                var interactionsImplFilename            = System.IO.Path.Combine(outputDirectory, basename + "Interactions.cpp");
                System.Console.WriteLine("dataTypesHeaderFilename={0}", dataTypesHeaderFilename);
                System.Console.WriteLine("encodingsHeaderFilename={0}", encodingsHeaderFilename);
                System.Console.WriteLine("encodingsImplFilename={0}", encodingsImplFilename);
                System.Console.WriteLine("objectInterfacesHeaderFilename={0}", objectInterfacesHeaderFilename);
                System.Console.WriteLine("objectsHeaderFilename={0}", objectsHeaderFilename);
                System.Console.WriteLine("objectsImplFilename={0}", objectsImplFilename);
                System.Console.WriteLine("interactionInterfacesHeaderFilename={0}", interactionInterfacesHeaderFilename);
                System.Console.WriteLine("interactionsHeaderFilename={0}", interactionsHeaderFilename);
                System.Console.WriteLine("interactionsImplFilename={0}", interactionsImplFilename);
                FOMParser fom = new FOMParser(filename, enclosingNamespace);
                fom.UsePrecompiledHeaders = usePrecompiledHeaders;
                if (includePaths.Count > 0)
                {
                    interfacesIncludePath = GetIncludeDirectory(interfaceHeaderOutputDirectory, includePaths.ToArray());
                }
                else
                {
                    interfacesIncludePath = GetIncludeDirectory(interfaceHeaderOutputDirectory, new string[] { outputDirectory });
                }
                FOMDataTypesHeader dataTypesHeader = new FOMDataTypesHeader(fom);
                String             dataTypesHeaderHeaderContent = dataTypesHeader.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(dataTypesHeaderFilename, dataTypesHeaderHeaderContent);
                }

                FOMEncodingHeader encodingsHeader        = new FOMEncodingHeader(fom, dataTypesHeaderFilename, interfacesIncludePath);
                String            encodingsHeaderContent = encodingsHeader.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(encodingsHeaderFilename, encodingsHeaderContent);
                }

                FOMEncodingImpl encodingsImpl        = new FOMEncodingImpl(fom, encodingsHeaderFilename, interfacesIncludePath);
                String          encodingsImplContent = encodingsImpl.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(encodingsImplFilename, encodingsImplContent);
                }

                FOMObjectInterfacesHeader objectInterfacesHeader = new FOMObjectInterfacesHeader(fom, objectInterfacesHeaderFilename, dataTypesHeaderFilename);
                String objectInterfacesHeaderContent             = objectInterfacesHeader.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(objectInterfacesHeaderFilename, objectInterfacesHeaderContent);
                }

                FOMObjectsHeader objectsHeader        = new FOMObjectsHeader(fom, objectsHeaderFilename, objectInterfacesHeaderFilename, encodingsHeaderFilename, interfacesIncludePath);
                String           objectsHeaderContent = objectsHeader.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(objectsHeaderFilename, objectsHeaderContent);
                }

                FOMObjectsImpl objectsImpl        = new FOMObjectsImpl(fom, objectsHeaderFilename, interfacesIncludePath);
                String         objectsImplContent = objectsImpl.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(objectsImplFilename, objectsImplContent);
                }

                FOMInteractionInterfacesHeader interactionInterfacesHeader = new FOMInteractionInterfacesHeader(fom, interactionInterfacesHeaderFilename, objectInterfacesHeaderFilename, dataTypesHeaderFilename);
                String interactionInterfacesHeaderContent = interactionInterfacesHeader.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(interactionInterfacesHeaderFilename, interactionInterfacesHeaderContent);
                }

                FOMInteractionsHeader interactionsHeader = new FOMInteractionsHeader(fom, interactionsHeaderFilename, interactionInterfacesHeaderFilename, objectsHeaderFilename, encodingsHeaderFilename, interfacesIncludePath);
                String interactionsHeaderContent         = interactionsHeader.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(interactionsHeaderFilename, interactionsHeaderContent);
                }

                FOMInteractionsImpl interactionsImpl = new FOMInteractionsImpl(fom, interactionsHeaderFilename, objectsHeaderFilename, interfacesIncludePath);
                String interactionsImplContent       = interactionsImpl.TransformText();
                if (!doDryRun)
                {
                    System.IO.File.WriteAllText(interactionsImplFilename, interactionsImplContent);
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine("{0}", e.Message);
            }
        }
Example #7
0
 public FOMInteractionsImpl(FOMParser fom, string interactionsHeaderFilename, string objectsHeaderFilename, string includePath)
 {
     FOM = fom;
     InteractionsHeaderFilename = System.IO.Path.GetFileName(interactionsHeaderFilename);
     ObjectsHeaderFilename      = System.IO.Path.GetFileName(objectsHeaderFilename);
 }
Example #8
0
 public FOMEncodingImpl(FOMParser fom, string encodingHeaderFilename, string includePath)
 {
     FOM = fom;
     EncodingHeaderFilename = System.IO.Path.GetFileName(encodingHeaderFilename);
 }
Example #9
0
 public FOMDataTypesHeader(FOMParser fom)
 {
     FOM = fom;
 }
 public FOMObjectInterfacesHeader(FOMParser fom, string objectInterfacesHeaderFilename, string encodingHeaderFilename)
 {
     FOM = fom;
     ObjectInterfacesHeaderFilename = System.IO.Path.GetFileName(objectInterfacesHeaderFilename);
     DataTypesHeaderFilename        = System.IO.Path.GetFileName(encodingHeaderFilename);
 }
Example #11
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n// Code automatically generated by FOMCodeGen version ");

            #line 7 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.GeneratorVersion));

            #line default
            #line hidden
            this.Write(" from ");

            #line 7 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(System.IO.Path.GetFileName(FOM.Filename)));

            #line default
            #line hidden
            this.Write(", do not edit\r\n\r\n");

            #line 9 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            if (FOM.ModelIdentification.Name != null)
            {
            #line default
            #line hidden

            #line 10 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Name, "Name: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 11 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden

            #line 12 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            if (FOM.ModelIdentification.Copyright != null)
            {
            #line default
            #line hidden

            #line 13 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Copyright, "Copyright: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 14 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden

            #line 15 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            if (FOM.ModelIdentification.Version != null)
            {
            #line default
            #line hidden

            #line 16 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Version, "Version: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 17 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden

            #line 18 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            if (FOM.ModelIdentification.Description != null)
            {
            #line default
            #line hidden

            #line 19 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Description, "Description: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 20 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden

            #line 21 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            if (FOM.ModelIdentification.Purpose != null)
            {
            #line default
            #line hidden

            #line 22 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FOMParser.FormatAsComment(FOM.ModelIdentification.Purpose, "Purpose: ")));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 23 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n#pragma once\r\n\r\n#include <vector>\r\n#include <ostream>\r\n#include <cassert>\r\n#inc" +
                       "lude <new>\r\n#include <utility>\r\n#include <type_traits>\r\n\r\n");

            #line 34 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.GetPredefinedTypeIncludes(FOMParser.FileContext.kDataTypes)));

            #line default
            #line hidden
            this.Write("\r\n\r\n");

            #line 36 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

            foreach (var namespacePart in FOM.Namespace)
            {
            #line default
            #line hidden
                this.Write("namespace ");

            #line 40 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(namespacePart));

            #line default
            #line hidden
                this.Write(" {\r\n");

            #line 41 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n// define placement_new in case some other header has redefined operator new to" +
                       " sth. different (e.g. MS crtdbg)\r\n#ifndef _PLACEMENT_NEW_DEFINED\r\n#pragma push_m" +
                       "acro(\"new\")\r\n#undef new\r\ntemplate <class X, typename ... Types>\r\ninline X* place" +
                       "ment_new(void* addr, Types&& ... args)\r\n{\r\n  return new (addr) X(std::forward<Ty" +
                       "pes>(args)...);\r\n}\r\n#pragma pop_macro(\"new\")\r\n#define _PLACEMENT_NEW_DEFINED\r\n#e" +
                       "ndif\r\n\r\n// define our own simplified \'optional\' types, similar to but independen" +
                       "t of std::optional (since C++17) or boost::optional\r\n\r\nstruct nullopt_t\n{\n  enum" +
                       " class _Construct { _Token };\n  explicit constexpr nullopt_t(_Construct) { }\n};\n" +
                       "\n/// Tag to disengage optional objects.\nconstexpr nullopt_t nullopt { nullopt_t:" +
                       ":_Construct::_Token };\n\r\nclass bad_optional_access : public std::exception\r\n{\r\np" +
                       "ublic:\r\n  virtual const char* what() const noexcept override { return (\"Bad opti" +
                       "onal access\"); }\r\n};\r\n\r\n// (empty) base template\r\ntemplate<typename T, bool=std:" +
                       ":is_class<T>::value > struct optional {};\r\n\r\n// Specialization for classes and s" +
                       "tructs used by-value, w. in-place copy-construction.\r\n// This implementation is " +
                       "limited to copy-constructible and default-destructible classes!\r\ntemplate<typena" +
                       "me T> struct optional<T, true>\r\n{\r\n  static_assert(!std::is_reference< T >::valu" +
                       "e, \"reference is not supported as optional value\");\r\n  // constructors\r\n  option" +
                       "al() noexcept : _valid(false) {}\r\n  constexpr optional(nullopt_t) noexcept : _va" +
                       "lid(false) {}\r\n  optional(const optional& rhs): _valid(rhs._valid) { create(rhs)" +
                       "; }\r\n  optional(const T& w): _valid(true) { create(w); }\r\n  template<typename Ot" +
                       "her>\r\n  optional(const Other& w): _valid(true) { create(w); }\r\n  template<typena" +
                       "me Other>\r\n  optional(const optional<Other>& rhs): _valid(rhs.has_value()) { if " +
                       "(rhs.has_value()) create(rhs.value()); }\r\n\r\n  // destructor\r\n  ~optional() { if(" +
                       "_valid) destroy(); }\r\n\r\n  // check for value presence\r\n  bool has_value() const " +
                       "{ return _valid; }\r\n  explicit operator bool() const { return _valid; }\r\n  bool " +
                       "operator ! () const { return !_valid; }\r\n\r\n  // assign\r\n  optional& operator = (" +
                       "optional const& rhs) { return assign(rhs); }\r\n  optional& operator = (T const& w" +
                       ") { return assign(w); }\r\n\r\n  // unchecked access to value\r\n  const T& operator *" +
                       " () const & { return *get(); }\r\n  T& operator * () & { return *get(); }\r\n  T con" +
                       "st* operator -> () const { return get(); }\r\n  T* operator -> () { return get(); " +
                       "}\r\n  // checked access to value\r\n  const T& value() const & {\r\n    if (!_valid) " +
                       "{\r\n      throw bad_optional_access{};\r\n    }\r\n    return *get();\r\n  }\r\n  T& valu" +
                       "e() & {\r\n    if (!_valid) {\r\n      throw bad_optional_access{};\r\n    }\r\n    retu" +
                       "rn *get();\r\n  }\r\nprivate:\r\n  template<typename Other>\r\n  void create(const Other" +
                       "& w) { placement_new<T>(&_value, w); }\r\n  void create(const optional& rhs) { if(" +
                       "_valid) create(*rhs.get()); }\r\n  void destroy() { get()->~T(); }\r\n  T const* get" +
                       "() const { assert(_valid && \"no optional value\"); return reinterpret_cast< const" +
                       " T* >(&_value); }\r\n  T* get() { assert(_valid && \"no optional value\"); return re" +
                       "interpret_cast< T* >(&_value); }\r\n  void cleanup() { destroy(); _valid = false; " +
                       "}\r\n  optional& assign(const T& w) {\r\n    if(_valid) *get() = w;\r\n    else create" +
                       "(w), _valid = true;\r\n    return *this;\r\n  }\r\n  optional& assign(const optional& " +
                       "rhs) {\r\n    if(rhs._valid) return assign(*rhs.get());\r\n    if(!_valid) return *t" +
                       "his;\r\n    cleanup();\r\n    return *this;\r\n  }\r\n  bool _valid;\r\n\tunion {\r\n    type" +
                       "name std::remove_cv<T>::type _value;\r\n  };\r\n};\r\n// Specialization for const-ref " +
                       "parameters, implemented by holding a pointer to the original variable.\r\n// Note " +
                       "that non-const references are *not* supported (but could be easily added)!\r\ntemp" +
                       "late<typename T> struct optional<const T&, false>\r\n{\r\n  // constructors\r\n  optio" +
                       "nal() noexcept : _valid(false), _pointer() {}\r\n  constexpr optional(nullopt_t) n" +
                       "oexcept : _valid(false), _pointer() {}\r\n  optional(const optional& rhs): _valid(" +
                       "rhs._valid), _pointer(rhs._pointer) { }\r\n  optional(const T& rhs) noexcept : _va" +
                       "lid(true), _pointer(&rhs) { }\r\n  template<typename Other>\r\n  optional(const Othe" +
                       "r& rhs): _valid(true), _pointer(&rhs) { }\r\n  template<typename Other>\r\n  optiona" +
                       "l(const optional<Other>& rhs): _valid(rhs.has_value()), _pointer(rhs.operator->(" +
                       ")) { }\r\n\r\n  // destructor\r\n  ~optional() { }\r\n\r\n  // check for value presence\r\n " +
                       " bool has_value() const { return _valid; }\r\n  explicit operator bool() const { r" +
                       "eturn _valid; }\r\n  bool operator ! () const { return !_valid; }\r\n\r\n  // assign\r\n" +
                       "  optional& operator = (const optional& rhs) {\r\n    _valid = rhs._valid;\r\n    _p" +
                       "ointer = rhs._pointer;\r\n    return *this;\r\n  }\r\n  optional& operator = (const T&" +
                       " w) {\r\n    _valid = true;\r\n    _pointer = &w;\r\n    return *this;\r\n  }\r\n  // unch" +
                       "ecked access to value\r\n  T const& operator * () const & { return *get(); }\r\n  T " +
                       "const* operator -> () const & { return get(); }\r\n  // checked access to value\r\n " +
                       " const T& value() const & {\r\n    if (!_valid) {\r\n      throw bad_optional_access" +
                       "{};\r\n    }\r\n    return *get();\r\n  }\r\n  T& value() & {\r\n    if (!_valid) {\r\n     " +
                       " throw bad_optional_access{};\r\n    }\r\n    return *get();\r\n  }\r\nprivate:\r\n  const" +
                       " T* get() const {\r\n    assert(_valid && \"no optional value\");\r\n    return _point" +
                       "er;\r\n  }\r\n  bool _valid;\r\n  const T* _pointer = nullptr;\r\n};\r\n// Specialization " +
                       "for everything else, which includes fundamental types and pointer types.\r\ntempla" +
                       "te<typename T> struct optional<T, false>\r\n{\r\n  // constructors\r\n  optional() noe" +
                       "xcept : _valid(false), _value() {}\r\n  constexpr optional(nullopt_t) noexcept : _" +
                       "valid(false), _value() {}\r\n  optional(const optional& rhs): _valid(rhs._valid), " +
                       "_value(rhs._value) { }\r\n  optional(const T& rhs) : _valid(true), _value(rhs) { }" +
                       "\r\n  template<typename Other>\r\n  optional(const Other& rhs): _valid(true), _value" +
                       "(rhs) { }\r\n  template<typename Other>\r\n  optional(const optional<Other>& rhs): _" +
                       "valid(rhs.has_value()), _value(rhs.operator*()) { }\r\n\r\n  // destructor\r\n  ~optio" +
                       "nal() { }\r\n\r\n  // check for value presence\r\n  bool has_value() const { return _v" +
                       "alid; }\r\n  explicit operator bool() const { return _valid; }\r\n  bool operator ! " +
                       "() const { return !_valid; }\r\n\r\n  // assign\r\n  optional& operator = (const optio" +
                       "nal& rhs) {\r\n    _valid = rhs._valid;\r\n    _value = rhs._value;\r\n    return *thi" +
                       "s;\r\n  }\r\n  optional& operator = (const T& w) {\r\n    _valid = true;\r\n    _value =" +
                       " w;\r\n    return *this;\r\n  }\r\n  // unchecked access to value\r\n  T const& operator" +
                       " * () const & { return _value; }\r\n  T const* operator -> () const { return &_val" +
                       "ue; }\r\n  // checked access to value\r\n  const T& value() const & {\r\n    if (!_val" +
                       "id) {\r\n      throw bad_optional_access{};\r\n    }\r\n    return _value;\r\n  }\r\n  T& " +
                       "value() & {\r\n    if (!_valid) {\r\n      throw bad_optional_access{};\r\n    }\r\n    " +
                       "return _value;\r\n  }\r\nprivate:\r\n  bool _valid;\r\n  T _value;\r\n};\r\n\r\nclass InvalidL" +
                       "ogicalTime : public std::logic_error\r\n{\r\n  public:\r\n    InvalidLogicalTime(const" +
                       " std::string& what_arg) : std::logic_error(what_arg) {}\r\n};\r\n\r\nclass NotConnecte" +
                       "d : public std::logic_error\r\n{\r\n  public:\r\n    NotConnected() : std::logic_error" +
                       "(\"not connected\") {}\r\n};\r\n\r\nclass NotInitialized : public std::logic_error\r\n{\r\n " +
                       " public:\r\n    NotInitialized() : std::logic_error(\"class registry not initialize" +
                       "d\") {}\r\n};\r\n\r\n// extended receive order type, includes \'interpolated\' for applic" +
                       "ation-generated timestamps\r\nenum class OrderType { RECEIVE, TIMESTAMP, INTERPOLA" +
                       "TED };\r\n\r\ntemplate<typename char_type, typename traits_type>\r\nstd::basic_ostream" +
                       "<char_type, traits_type>&\r\noperator<<(std::basic_ostream<char_type, traits_type>" +
                       "& os, OrderType value)\r\n{\r\n  switch (value)\r\n  {\r\n    case OrderType::RECEIVE: o" +
                       "s << \"RECEIVE\"; break;\r\n    case OrderType::TIMESTAMP: os << \"TIMESTAMP\"; break;" +
                       "\r\n    case OrderType::INTERPOLATED: os << \"INTERPOLATED\"; break;\r\n  }\r\n  return " +
                       "os;\r\n}\r\n\r\ninline std::string to_string(OrderType value)\r\n{\r\n  switch (value)\r\n  " +
                       "{\r\n    case OrderType::RECEIVE: return \"RECEIVE\";\r\n    case OrderType::TIMESTAMP" +
                       ": return \"TIMESTAMP\";\r\n    case OrderType::INTERPOLATED: return \"INTERPOLATED\";\r" +
                       "\n  }\r\n}\r\n\r\ninline std::wstring to_wstring(OrderType value)\r\n{\r\n  switch (value)\r" +
                       "\n  {\r\n    case OrderType::RECEIVE: return L\"RECEIVE\";\r\n    case OrderType::TIMES" +
                       "TAMP: return L\"TIMESTAMP\";\r\n    case OrderType::INTERPOLATED: return L\"INTERPOLA" +
                       "TED\";\r\n  }\r\n}\r\n");

            #line 300 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FOM.DataTypeForwardDeclarations));

            #line default
            #line hidden
            this.Write("\r\n");

            #line 303 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

            foreach (var dataType in FOM.DataTypes)
            {
                if (dataType is FOMParser.SimpleDataType && dataType.Generate)
                {
                    var simpleDataType = dataType as FOMParser.SimpleDataType;
                    if (dataType.Comment != null && dataType.Comment != "")
                    {
            #line default
            #line hidden

            #line 311 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Comment));

            #line default
            #line hidden
                        this.Write("\r\n");

            #line 312 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    }

            #line default
            #line hidden
                    this.Write("typedef ");

            #line 313 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(simpleDataType.Representation.CPPType));

            #line default
            #line hidden
                    this.Write(" ");

            #line 313 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(simpleDataType.Name));

            #line default
            #line hidden
                    this.Write(";\r\n\r\n");

            #line 315 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                } // if (dataType is FOMParser.SimpleDataType)
                else if (dataType is FOMParser.FixedRecordDataType)
                {
                    var fixedRecordDataType = dataType as FOMParser.FixedRecordDataType;
                    if (dataType.Comment != null && dataType.Comment != "")
                    {
            #line default
            #line hidden

            #line 321 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(fixedRecordDataType.Comment));

            #line default
            #line hidden
                        this.Write("\r\n");

            #line 322 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    }

            #line default
            #line hidden
                    this.Write("class ");

            #line 323 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(fixedRecordDataType.Name));

            #line default
            #line hidden

            #line 323 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(fixedRecordDataType.BaseClass != null ? " : public " + fixedRecordDataType.BaseClass.Name : ""));

            #line default
            #line hidden
                    this.Write("\r\n{\r\n  public:\r\n    virtual ~");

            #line 326 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(fixedRecordDataType.Name));

            #line default
            #line hidden
                    this.Write("() noexcept {}\r\n");

            #line 327 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    if (fixedRecordDataType.BaseClass == null)
                    {
            #line default
            #line hidden
                        this.Write("    virtual uint32_t getVersion() const = 0;\r\n");

            #line 329 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    }

            #line default
            #line hidden

            #line 330 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    foreach (var field in fixedRecordDataType.Fields)
                    {
            #line default
            #line hidden
                        this.Write("    virtual void Set");

            #line 331 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));

            #line default
            #line hidden
                        this.Write("(");

            #line 331 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(field.DataType.ParameterCppType));

            #line default
            #line hidden
                        this.Write(" value) = 0;\r\n");

            #line 332 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        if (field.DataType is FOMParser.ArrayDataType)
                        {
                            var arrayDataType = field.DataType as FOMParser.ArrayDataType;


            #line default
            #line hidden
                            this.Write("    virtual void Set");

            #line 335 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                            this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));

            #line default
            #line hidden
                            this.Write("(const ");

            #line 335 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                            this.Write(this.ToStringHelper.ToStringWithCulture(arrayDataType.DataType.CPPType));

            #line default
            #line hidden
                            this.Write("* value, size_t size) = 0;\r\n");

            #line 336 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        }

            #line default
            #line hidden
                        this.Write("    virtual ");

            #line 337 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(field.DataType.ReturnCppType));

            #line default
            #line hidden
                        this.Write(" Get");

            #line 337 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));

            #line default
            #line hidden
                        this.Write("() const = 0;\r\n    virtual bool Is");

            #line 338 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));

            #line default
            #line hidden
                        this.Write("Available() const = 0;\r\n");

            #line 339 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    } // foreach fixedRecordDataType.Fields

            #line default
            #line hidden
                    this.Write("\r\n}; // class ");

            #line 341 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write("\r\n\r\n");

            #line 343 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                } // if (dataType is FOMParser.FixedRecordDataType)
                else if (dataType is FOMParser.EnumeratedDataType && dataType.Generate)
                {
                    var enumeratedDataType = dataType as FOMParser.EnumeratedDataType;
                    if (dataType.Comment != null && dataType.Comment != "")
                    {
            #line default
            #line hidden

            #line 350 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Comment));

            #line default
            #line hidden
                        this.Write("\r\n");

            #line 351 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    }

            #line default
            #line hidden
                    this.Write("enum class ");

            #line 352 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(" : ");

            #line 352 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(enumeratedDataType.Representation.CPPType));

            #line default
            #line hidden
                    this.Write("\r\n{\r\n");

            #line 354 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

                    foreach (var enumerator in enumeratedDataType.Enumerators.Values)
                    {
                        if (enumerator.Comment != null)
                        {
            #line default
            #line hidden
                            this.Write("      ");

            #line 359 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                            this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Comment));

            #line default
            #line hidden
                            this.Write("\r\n");

            #line 360 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        }

            #line default
            #line hidden
                        this.Write("      ");

            #line 361 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write(" = ");

            #line 361 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Value));

            #line default
            #line hidden
                        this.Write(",\r\n");

            #line 362 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    } // foreach enumeratedDataType.Enumerators.Values


            #line default
            #line hidden
                    this.Write("}; // enum ");

            #line 365 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write("\r\n\r\ntemplate<typename char_type, typename traits_type>\r\nstd::basic_ostream<char_t" +
                               "ype, traits_type>&\r\noperator<<(std::basic_ostream<char_type, traits_type>& os, ");

            #line 369 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(" value)\r\n{\r\n  switch (value)\r\n  {\r\n");

            #line 373 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

                    foreach (var enumerator in enumeratedDataType.Enumerators.Values)
                    {
            #line default
            #line hidden
                        this.Write("    case ");

            #line 377 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                        this.Write("::");

            #line 377 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write(": os << \"");

            #line 377 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write("\"; break;\r\n");

            #line 378 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    } // foreach enumeratedDataType.Enumerators.Values


            #line default
            #line hidden
                    this.Write("    default: os << \"<invalid ");

            #line 381 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(">\"; break;\r\n  }\r\n  return os;\r\n}\r\n\r\ninline std::string to_string(");

            #line 386 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(" value)\r\n{\r\n  switch (value)\r\n  {\r\n");

            #line 390 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

                    foreach (var enumerator in enumeratedDataType.Enumerators.Values)
                    {
            #line default
            #line hidden
                        this.Write("    case ");

            #line 394 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                        this.Write("::");

            #line 394 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write(": return \"");

            #line 394 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write("\";\r\n");

            #line 395 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    } // foreach enumeratedDataType.Enumerators.Values


            #line default
            #line hidden
                    this.Write("    default: return \"<invalid ");

            #line 398 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(">\";\r\n  }\r\n}\r\n\r\ninline std::wstring to_wstring(");

            #line 402 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(" value)\r\n{\r\n  switch (value)\r\n  {\r\n");

            #line 406 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

                    foreach (var enumerator in enumeratedDataType.Enumerators.Values)
                    {
            #line default
            #line hidden
                        this.Write("    case ");

            #line 410 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                        this.Write("::");

            #line 410 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write(": return L\"");

            #line 410 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumerator.Name));

            #line default
            #line hidden
                        this.Write("\";\r\n");

            #line 411 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    } // foreach enumeratedDataType.Enumerators.Values


            #line default
            #line hidden
                    this.Write("    default: return L\"<invalid ");

            #line 414 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dataType.Name));

            #line default
            #line hidden
                    this.Write(">\";\r\n  }\r\n}\r\n\r\n");

            #line 418 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                } // if (dataType is FOMParser.EnumeratedDataType)
            }     // foreach (var dataType in FOM.DataTypes.Values)


            #line default
            #line hidden
            this.Write("\r\n");

            #line 423 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"

            foreach (var namespacePart in FOM.Namespace)
            {
            #line default
            #line hidden
                this.Write("} // namespace ");

            #line 427 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(namespacePart));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 428 "D:\vfs\OpenRTI\src\Tools\FOMCodeGen\FOMDataTypesHeader.tt"
            }

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }