/**
 *
 *  @author   ETSI
 *  @version  $URL$
 *            $Id$
 *  @desc     A collection of data string type and value definitions which
 *            may be useful in the implementation of any TTCN-3 test
 *            suite. "Data string" refers to TTCN-3 hexstring, octetstring
 *            and bitstring types.
 *  @remark   End users should be aware that any changes made to the  in
 *            definitions this module may be overwritten in future releases.
 *            End users are encouraged to contact the distributers of this
 *            module regarding their modifications or additions so that future
 *            updates will include your changes.
 *  @copyright  ETSI Copyright Notification
 *                No part may be reproduced except as authorized by written permission.
 *                The copyright and the foregoing restriction extend to reproduction in all media.
 *                All rights reserved.
 *
 */
 module LibCommon_DataStrings {

  /**
   * @remark Number in name indicates string length in number of
   *         _bits_
   */
  group bitStringSubTypes {

    type bitstring  Bit1  length(1) with {encode "length(1)"};
    type bitstring  Bit2  length(2) with {encode "length(2)"};
    type bitstring  Bit3  length(3) with {encode "length(3)"};
    type bitstring  Bit4  length(4) with {encode "length(4)"};
    type bitstring  Bit5  length(5) with {encode "length(5)"};
    type bitstring  Bit6  length(6) with {encode "length(6)"};
    type bitstring  Bit7  length(7) with {encode "length(7)"};
    type bitstring  Bit8  length(8) with {encode "length(8)"};
    type bitstring  Bit9  length(9) with {encode "length(9)"};
    type bitstring  Bit10   length(10) with {encode "length(10)"};
    type bitstring  Bit11   length(11) with {encode "length(11)"};
    type bitstring  Bit12   length(12) with {encode "length(12)"};
    type bitstring  Bit13   length(13) with {encode "length(13)"};
    type bitstring  Bit14   length(14) with {encode "length(14)"};
    type bitstring  Bit15   length(15) with {encode "length(15)"};
    type bitstring  Bit16   length(16) with {encode "length(16)"};
    type bitstring  Bit17   length(17) with {encode "length(17)"};
    type bitstring  Bit18   length(18) with {encode "length(18)"};
    type bitstring  Bit19   length(19) with {encode "length(19)"};
    type bitstring  Bit20   length(20) with {encode "length(20)"};
    type bitstring  Bit21   length(21) with {encode "length(21)"};
    type bitstring  Bit22   length(22) with {encode "length(22)"};
    type bitstring  Bit23   length(23) with {encode "length(23)"};
    type bitstring  Bit24   length(24) with {encode "length(24)"};
    type bitstring  Bit25   length(25) with {encode "length(25)"};
    type bitstring  Bit26   length(26) with {encode "length(26)"};
    type bitstring  Bit27   length(27) with {encode "length(27)"};
    type bitstring  Bit28   length(28) with {encode "length(28)"};
    type bitstring  Bit29   length(29) with {encode "length(29)"};
    type bitstring  Bit30   length(30) with {encode "length(30)"};
    type bitstring  Bit31   length(31) with {encode "length(31)"};
    type bitstring  Bit32   length(32) with {encode "length(32)"};
    type bitstring  Bit40   length(40) with {encode "length(40)"};

    type bitstring  Bit48   length(48) with {encode "length(48)"};
    type bitstring  Bit64   length(64) with {encode "length(64)"};
	type bitstring  Bit72   length(72) with {encode "length(72)"};
    type bitstring  Bit128  length(128) with {encode "length(128)"};
    type bitstring  Bit144  length(144) with {encode "length(144)"};
    type bitstring  Bit256  length(256) with {encode "length(256)"};

  } // end group bitStringSubTypes

  group zeroedBits {

    const Bit1 c_1ZeroBit := int2bit(0,1);
    const Bit2 c_2ZeroBits := int2bit(0,2);
    const Bit4 c_4ZeroBits := int2bit(0,4);
    const Bit5 c_5ZeroBits := int2bit(0,5);
    const Bit6 c_6ZeroBits := int2bit(0,6);
    const Bit8 c_8ZeroBits := int2bit(0,8);
    const Bit14 c_14ZeroBits := int2bit(0,14);
    const Bit64 c_64ZeroBits := int2bit(0,64);

  }//end group zeroedBits

  /**
   * @remark Number in name indicates string length in number of
   *         _octets_
   */
  group octetStringSubTypes {

    type octetstring  Oct1  length(1) with {encode "length(1)"};
    type octetstring  Oct2  length(2) with {encode "length(2)"};
    type octetstring  Oct3  length(3) with {encode "length(3)"};
    type octetstring  Oct4  length(4) with {encode "length(4)"};
    type octetstring  Oct5  length(5) with {encode "length(5)"};
    type octetstring  Oct6  length(6) with {encode "length(6)"};
    type octetstring  Oct7  length(7) with {encode "length(7)"};
    type octetstring  Oct8  length(8) with {encode "length(8)"};
    type octetstring  Oct9  length(9) with {encode "length(9)"};
    type octetstring  Oct10 length(10) with {encode "length(10)"};
    type octetstring  Oct11 length(11) with {encode "length(11)"};
    type octetstring  Oct12   length(12) with {encode "length(12)"};
    type octetstring  Oct13   length(13) with {encode "length(13)"};
    type octetstring  Oct14   length(14) with {encode "length(14)"};
    type octetstring  Oct15   length(15) with {encode "length(15)"};
    type octetstring  Oct16   length(16) with {encode "length(16)"};

    type octetstring  Oct20   length(20) with {encode "length(20)"};
    type octetstring  Oct32   length(32) with {encode "length(32)"};
    type octetstring  Oct48   length(48) with {encode "length(48)"};
    type octetstring  Oct64   length(64) with {encode "length(64)"};
    type octetstring  Oct80 length(80) with {encode "length(80)"};
    type octetstring  Oct96 length(96) with {encode "length(96)"};
    type octetstring  Oct128 length(128) with {encode "length(128)"};
    type octetstring  Oct160 length(160) with {encode "length(160)"};
    type octetstring  Oct320 length(320) with {encode "length(320)"};
    type octetstring  Oct640 length(640) with {encode "length(640)"};
    type octetstring  Oct1280 length(1280) with {encode "length(1280)"};
    type octetstring  Oct1380 length(1380) with {encode "length(1380)"};

    type octetstring  Oct0to3  length(0..3) with {encode "length(0..3)"};
    type octetstring  Oct0to8  length(0..16) with {encode "length(0..8)"};
    type octetstring  Oct0to12  length(0..12) with {encode "length(0..12)"};
    type octetstring  Oct0to16  length(0..16) with {encode "length(0..16)"};
    type octetstring  Oct0to31  length(0..31) with {encode "length(0..31)"};
    type octetstring  Oct0to20  length(0..20) with {encode "length(0..20)"};
    type octetstring  Oct0to30  length(0..20) with {encode "length(0..30)"};
    type octetstring  Oct0to127   length(0..127) with {encode "length(0..127)"};
    type octetstring  Oct0to255   length(0..255) with {encode "length(0..255)"};

    type octetstring  Oct1to15  length(1..15) with {encode "length(1..15)"};
    type octetstring  Oct1to31  length(1..31) with {encode "length(1..31)"};
    type octetstring  Oct1to128   length(1..128) with {encode "length(1..128)"};
    type octetstring  Oct1to254   length(1..254) with {encode "length(1..254)"};
    type octetstring  Oct1to255   length(1..255) with {encode "length(1..255)"};

    type octetstring  Oct4to16  length(4..16) with {encode "length(4..16)"};
    type octetstring  Oct6to15  length(6..15) with {encode "length(6..15)"};

  } // end group octetStringSubTypes

  group zeroedBytes {
    const Oct1    c_1ZeroByte := int2oct(0,1);
    const Oct2    c_2ZeroBytes := int2oct(0,2);
    const Oct4    c_4ZeroBytes := int2oct(0,4);
    const Oct6    c_6ZeroBytes := int2oct(0,6);
    const Oct8    c_8ZeroBytes := int2oct(0,8);
	const Oct9    c_9ZeroBytes := int2oct(0,9);
    const Oct12   c_12ZeroBytes := int2oct(0,12);
    const Oct16   c_16ZeroBytes := int2oct(0,16);
    const Oct20   c_20ZeroBytes := int2oct(0,20);

    const Oct80   c_80ZeroBytes := int2oct(0,80);
    const Oct160  c_160ZeroBytes := int2oct(0,160);
    const Oct320  c_320ZeroBytes := int2oct(0,320);
    const Oct640  c_640ZeroBytes := int2oct(0,640);
    const Oct1280 c_1280ZeroBytes := int2oct(0,1280);
    const Oct1380 c_1380ZeroBytes := int2oct(0,1380);
    const octetstring c_256ZeroBytes := int2oct(0,256);
    const octetstring c_1KZeroBytes := int2oct(0,1024);
    const octetstring c_4KZeroBytes := int2oct(0,4096);
    const octetstring c_16KZeroBytes := int2oct(0,16384);
    const octetstring c_64KZeroBytes := int2oct(0,65536);
    const octetstring c_128KZeroBytes := int2oct(0,131072);

  }//end group zeroedBytes

} // end module LibCommon_DataStrings
