#include "dds_dcps.idl"

module mod {
    struct tst{
        long long_1;
        long long_2;
        long long_3;
    };
#pragma keylist tst long_1
    
    struct otherType{
        long long_1;
        sequence<string> value;
    };
#pragma keylist otherType long_1
    
    typedef string<5> callSign;

    struct boundsType{
        long long_1;
        string name;
        callSign name5;
        sequence<callSign, 2> strSeq2;
        sequence<octet> octSeq;
    };
#pragma keylist boundsType long_1

    struct embeddedStructType {
        long long_1;
        tst tstStr;
        tst tstArr[3];
        sequence<tst, 3> tstSeq;
    };
#pragma keylist embeddedStructType long_1
};

module MyTopicModule {

    struct MyTopic {
        long                  long_1;
        string                str;
        string                strArr[3];
        sequence<string>      strUBSeq;
        sequence<string, 3>   strBSeq;
    };
#pragma keylist MyTopic long_1

};

module arrAndSeqModule {

    typedef octet octetArr[2];
    typedef sequence<octet> octetSeq;

    struct arrAndSeqStruct {
        octetArr arr;
        octetArr arrOfArr[4];
        sequence<octetArr> seqOfArr;
        sequence<octetSeq> seqOfSeq;
    };
};

module Foo {
    struct Embedded {
        long id;
        long origin;
    };

    struct Test {
        long longArr3[3];
        long longArr3_2[3][2];
        string StrArr3_2[3][2];
        sequence<long> longSeq; // TODO: Change into ulong!!!
        sequence<DDS::Duration_t> durationSeq;
        sequence<sequence<long, 2>, 3> longSeq3Seq2;
        sequence<sequence<sequence<long> > > longSeqSeqSeq;
        sequence<Embedded> embStruct;
        sequence<Test> recursiveStruct;
        long key;
    };
#pragma keylist Test key
};

