#ifndef Foo_982569687_hpp
#define Foo_982569687_hpp
#include <iosfwd>
#include "FooImpl.h"
#if (defined(RTI_WIN32) || defined (RTI_WINCE)) && defined(NDDS_USER_DLL_EXPORT)
#undef RTIUSERDllExport
#define RTIUSERDllExport __declspec(dllexport)
#endif
#include "dds/domain/DomainParticipant.hpp"
#include "dds/topic/TopicTraits.hpp"
#include "dds/core/SafeEnumeration.hpp"
#include "dds/core/String.hpp"
#include "dds/core/array.hpp"
#include "dds/core/vector.hpp"
#include "dds/core/Optional.hpp"
#include "dds/core/xtypes/DynamicType.hpp"
#include "dds/core/xtypes/StructType.hpp"
#include "dds/core/xtypes/UnionType.hpp"
#include "dds/core/xtypes/EnumType.hpp"
#include "dds/core/xtypes/AliasType.hpp"
#include "rti/core/array.hpp"
#include "rti/util/StreamFlagSaver.hpp"
#include "rti/domain/PluginSupport.hpp"
#include "rti/core/LongDouble.hpp"
#include "rti/core/Pointer.hpp"
#include "rti/topic/TopicTraits.hpp"
#if (defined(RTI_WIN32) || defined (RTI_WINCE)) && defined(NDDS_USER_DLL_EXPORT)
#undef RTIUSERDllExport
#define RTIUSERDllExport
#endif
#if (defined(RTI_WIN32) || defined (RTI_WINCE)) && defined(NDDS_USER_DLL_EXPORT)
#undef NDDSUSERDllExport
#define NDDSUSERDllExport __declspec(dllexport)
#endif
class NDDSUSERDllExport 
Foo {
 
  public:
        int32_t x_param,
        int32_t y_param);
    #ifdef RTI_CXX11_RVALUE_REFERENCES
    #ifndef RTI_CXX11_NO_IMPLICIT_MOVE_OPERATIONS
    Foo& operator=(
Foo&&) = 
default;
 
    Foo& operator=(
const Foo&) = 
default;
 
    #else
    Foo(
Foo&& other_) OMG_NOEXCEPT;  
 
    Foo& operator=(
Foo&&  other_) OMG_NOEXCEPT;
 
    #endif
    #endif 
    int32_t x() const OMG_NOEXCEPT;
    void x(int32_t value);
    int32_t y() const OMG_NOEXCEPT;
    void y(int32_t value);
    bool operator == (
const Foo& other_) 
const;
 
    bool operator != (
const Foo& other_) 
const;
 
    void swap(
Foo& other_) OMG_NOEXCEPT;
 
  private:
    int32_t m_x_;
    int32_t m_y_;
};
{
    a.swap(b);
}
NDDSUSERDllExport std::ostream& 
operator<<(std::ostream& o,
const Foo& sample);
 
class NDDSUSERDllExport MyType {
  public:
    MyType();
    MyType(
        int32_t my_long_param,
    #ifdef RTI_CXX11_RVALUE_REFERENCES
    #ifndef RTI_CXX11_NO_IMPLICIT_MOVE_OPERATIONS
    MyType (MyType&&) = default;
    MyType& operator=(MyType&&) = default;
    MyType& operator=(const MyType&) = default;
    MyType(const MyType&) = default;
    #else
    MyType(MyType&& other_) OMG_NOEXCEPT;  
    MyType& operator=(MyType&&  other_) OMG_NOEXCEPT;
    #endif
    #endif 
    int32_t my_long() const OMG_NOEXCEPT;
    void my_long(int32_t value);
    dds::core::string& my_string() OMG_NOEXCEPT; 
    const dds::core::string& my_string() const OMG_NOEXCEPT;
    void my_string(const dds::core::string& value);
    Foo& my_foo() OMG_NOEXCEPT; 
 
    const 
Foo& my_foo() const OMG_NOEXCEPT;
 
    void my_foo(const 
Foo& value);
 
    dds::core::vector<int32_t>& my_sequence() OMG_NOEXCEPT; 
    const dds::core::vector<int32_t>& my_sequence() const OMG_NOEXCEPT;
    void my_sequence(const dds::core::vector<int32_t>& value);
    dds::core::
array<
Foo, 5>& my_array() OMG_NOEXCEPT; 
 
    const dds::core::
array<Foo, 5>& my_array() const OMG_NOEXCEPT;
 
    void my_array(const dds::core::
array<Foo, 5>& value);
 
    dds::core::optional<Foo>& my_optional() OMG_NOEXCEPT; 
    const dds::core::optional<Foo>& my_optional() const OMG_NOEXCEPT;
    void my_optional(const dds::core::optional<Foo>& value);
    bool operator == (const MyType& other_) const;
    bool operator != (const MyType& other_) const;
    void swap(MyType& other_) OMG_NOEXCEPT;
  private:
    int32_t m_my_long_;
    dds::core::string m_my_string_;
    Foo m_my_foo_;
    dds::core::vector<int32_t> m_my_sequence_;
    dds::core::
array<Foo, 5> m_my_array_;
 
    dds::core::optional<Foo> m_my_optional_;
};
inline void swap(MyType& a, MyType& b)  OMG_NOEXCEPT 
{
    a.swap(b);
}
NDDSUSERDllExport std::ostream& operator<<(std::ostream& o,const MyType& sample);
class NDDSUSERDllExport MyOtherType {
  public:
    MyOtherType();
    MyOtherType(
        int32_t m1_param,
        double m2_param,
    #ifdef RTI_CXX11_RVALUE_REFERENCES
    #ifndef RTI_CXX11_NO_IMPLICIT_MOVE_OPERATIONS
    MyOtherType (MyOtherType&&) = default;
    MyOtherType& operator=(MyOtherType&&) = default;
    MyOtherType& operator=(const MyOtherType&) = default;
    MyOtherType(const MyOtherType&) = default;
    #else
    MyOtherType(MyOtherType&& other_) OMG_NOEXCEPT;  
    MyOtherType& operator=(MyOtherType&&  other_) OMG_NOEXCEPT;
    #endif
    #endif 
    int32_t m1() const OMG_NOEXCEPT;
    void m1(int32_t value);
    double m2() const OMG_NOEXCEPT;
    void m2(double value);
    dds::core::string& m3() OMG_NOEXCEPT; 
    const dds::core::string& m3() const OMG_NOEXCEPT;
    void m3(const dds::core::string& value);
    bool operator == (const MyOtherType& other_) const;
    bool operator != (const MyOtherType& other_) const;
    void swap(MyOtherType& other_) OMG_NOEXCEPT;
  private:
    int32_t m_m1_;
    double m_m2_;
    dds::core::string m_m3_;
};
inline void swap(MyOtherType& a, MyOtherType& b)  OMG_NOEXCEPT 
{
    a.swap(b);
}
NDDSUSERDllExport std::ostream& operator<<(std::ostream& o,const MyOtherType& sample);
namespace dds { 
    namespace topic {
        template<>
        struct topic_type_name<Foo> {
                return "Foo";
            }
        };
        template<>
        template<>
        struct topic_type_support<Foo> {
            NDDSUSERDllExport static void initialize_sample(Foo& sample);
                std::vector<char>& buffer, const Foo& sample);
            NDDSUSERDllExport 
static void from_cdr_buffer(Foo& sample, 
const std::vector<char>& buffer);
 
            static const rti::topic::TypePluginKind::type type_plugin_kind = 
            rti::topic::TypePluginKind::NON_STL;
        };
        template<>
        struct topic_type_name<MyType> {
                return "MyType";
            }
        };
        template<>
        template<>
        struct topic_type_support<MyType> {
            NDDSUSERDllExport static void initialize_sample(MyType& sample);
                std::vector<char>& buffer, const MyType& sample);
            NDDSUSERDllExport 
static void from_cdr_buffer(MyType& sample, 
const std::vector<char>& buffer);
 
            static const rti::topic::TypePluginKind::type type_plugin_kind = 
            rti::topic::TypePluginKind::NON_STL;
        };
        template<>
        struct topic_type_name<MyOtherType> {
                return "MyOtherType";
            }
        };
        template<>
        template<>
        struct topic_type_support<MyOtherType> {
            NDDSUSERDllExport static void initialize_sample(MyOtherType& sample);
                std::vector<char>& buffer, const MyOtherType& sample);
            NDDSUSERDllExport 
static void from_cdr_buffer(MyOtherType& sample, 
const std::vector<char>& buffer);
 
            static const rti::topic::TypePluginKind::type type_plugin_kind = 
            rti::topic::TypePluginKind::NON_STL;
        };
    }
}
namespace rti { 
    namespace topic {
        template<>
        struct dynamic_type<Foo> {
        };
        template<>
        struct impl_type<Foo> {
            typedef Foo_c type;
        };
        template<>
        struct dynamic_type<MyType> {
        };
        template<>
        struct impl_type<MyType> {
            typedef MyType_c type;
        };
        template<>
        struct dynamic_type<MyOtherType> {
        };
        template<>
        struct impl_type<MyOtherType> {
            typedef MyOtherType_c type;
        };
    }
}
#if (defined(RTI_WIN32) || defined (RTI_WINCE)) && defined(NDDS_USER_DLL_EXPORT)
#undef NDDSUSERDllExport
#define NDDSUSERDllExport
#endif
#endif // Foo_982569687_hpp