// Copyright(c) 2006 to 2022 ZettaScale Technology and others
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
// v. 1.0 which is available at
// http://www.eclipse.org/org/documents/edl-v10.php.
//
// SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause

module XSpace {
    @bit_bound(10)
    bitmask my_bitmask {
        flag0,
        flag1
    };

    @mutable
    struct XType1 {
      @id(1) long long_1;
      @id(2) long long_2;
      @id(3) my_bitmask bm_3;
    };
    @mutable
    struct XType1a {
      @id(1) long long_1;
      @id(2) long long_2;
      @id(3) unsigned short bm_3;
    };

    @appendable
    struct XType2 {
      @id(1) long long_1;
      @id(2) long long_2;
    };
    @appendable
    struct XType2a {
      @id(1) long long_1;
      @id(2) long long_2;
      @id(3) long long_3;
    };

    @appendable
    struct XType3_1 {
        @id(1) long long_4;
        @id(2) long long_5;
    };
    @appendable
    struct XType3_1a {
        @id(1) long long_4;
    };
    @mutable
    struct XType3 {
      @id(2) long long_2;
      @id(3) XType3_1 struct_3;
    };
    @mutable
    struct XType3a {
      @id(1) long long_1;
      @id(2) long long_2;
      @id(3) XType3_1a struct_3;
    };
    @mutable
    struct XType4 {
      sequence<uint32> seq_1;
      sequence<uint32, 10> seq_2;
    };
    @mutable
    struct XType4a {
      sequence<uint32, 999> seq_1;
      sequence<uint32, 5> seq_2;
    };
    @mutable
    struct XType5 {
      @key string str_1;
      @key string<10> str_2;
    };
    @mutable
    struct XType5a {
      @key string<999> str_1;
      @key string<5> str_2;
    };

    /* Test types for type object validation and type dependencies */
    typedef sequence<long> seql;
    enum e { E1, E2 };
    bitmask bm { BM1, BM2 };
    @final struct to_toplevel {
      seql f1;
      e f2;
      bm f3;
    };

    @nested struct to_base {
      long b1;
    };
    @nested union u switch (long) { case 1: long u1; };
    struct to_inherit : to_base {
      u f1;
    };

    union to_uniondisc switch (long) {
      case 1: long u1;
    };

    @nested @appendable
    struct dep_test_nested {
      long n1;
      long n2;
    };

    struct dep_test {
      dep_test_nested f1;
    };

    union to_unionmembers switch (long) {
      case 1: long u1;
      default: short u2;
    };

    typedef octet td_byte[1000000000];
    typedef td_byte tdd_byte;
    struct to_arraybound {
      tdd_byte f1[1];
    };
};
