// This C++ header file was generated by the TTCN-3 compiler
// of the TTCN-3 Test Executor version 9.0.0
// The generation of user and time information were disabled by the -D flag.

// Copyright (c) 2000-2023 Ericsson Telecom AB

// Do not edit this file unless you know what you are doing.

#ifndef L3__Common_HH
#define L3__Common_HH

#ifdef TITAN_RUNTIME_2
#error Generated code does not match with used runtime.\
 Code was generated without -R option but -DTITAN_RUNTIME_2 was used.
#endif

/* Header file includes */

#include <TTCN3.hh>
#include "Osmocom_Types.hh"
#include "MobileL3_GMM_SM_Types.hh"

#if TTCN3_VERSION != 90000
#error Version mismatch detected.\
 Please check the version of the TTCN-3 compiler and the base library.\
 Run make clean and rebuild the project if the version of the compiler changed recently.
#endif

#ifndef LINUX
#error This file should be compiled on LINUX
#endif

#undef L3__Common_HH
#endif

namespace L3__Common {

/* Forward declarations of classes */

class AuthVector;
class AuthVector_template;

} /* end of namespace */

#ifndef L3__Common_HH
#define L3__Common_HH

namespace L3__Common {

/* Class definitions */

class AuthVector {
  OCTETSTRING field_rand;
  OCTETSTRING field_sres;
  OCTETSTRING field_kc;
  OCTETSTRING field_ik;
  OCTETSTRING field_ck;
  OCTETSTRING field_autn;
  OCTETSTRING field_res;
  OCTETSTRING field_auts;
public:
  AuthVector();
  AuthVector(const OCTETSTRING& par_rand,
    const OCTETSTRING& par_sres,
    const OCTETSTRING& par_kc,
    const OCTETSTRING& par_ik,
    const OCTETSTRING& par_ck,
    const OCTETSTRING& par_autn,
    const OCTETSTRING& par_res,
    const OCTETSTRING& par_auts);
  AuthVector(const AuthVector& other_value);
  inline boolean is_component() { return FALSE; }
  void clean_up();
const TTCN_Typedescriptor_t* get_descriptor() const;
  AuthVector& operator=(const AuthVector& other_value);
  boolean operator==(const AuthVector& other_value) const;
  inline boolean operator!=(const AuthVector& other_value) const
    { return !(*this == other_value); }

  boolean is_bound() const;

inline boolean is_present() const { return is_bound(); }
  boolean is_value() const;

  inline OCTETSTRING& rand()
    {return field_rand;}
  inline const OCTETSTRING& rand() const
    {return field_rand;}
  inline OCTETSTRING& sres()
    {return field_sres;}
  inline const OCTETSTRING& sres() const
    {return field_sres;}
  inline OCTETSTRING& kc()
    {return field_kc;}
  inline const OCTETSTRING& kc() const
    {return field_kc;}
  inline OCTETSTRING& ik()
    {return field_ik;}
  inline const OCTETSTRING& ik() const
    {return field_ik;}
  inline OCTETSTRING& ck()
    {return field_ck;}
  inline const OCTETSTRING& ck() const
    {return field_ck;}
  inline OCTETSTRING& autn()
    {return field_autn;}
  inline const OCTETSTRING& autn() const
    {return field_autn;}
  inline OCTETSTRING& res()
    {return field_res;}
  inline const OCTETSTRING& res() const
    {return field_res;}
  inline OCTETSTRING& auts()
    {return field_auts;}
  inline const OCTETSTRING& auts() const
    {return field_auts;}
  inline int size_of() const
    {return 8;}
  void log() const;
  void set_implicit_omit();
  void set_param(Module_Param& param);
  void encode_text(Text_Buf& text_buf) const;
  void decode_text(Text_Buf& text_buf);
};

class AuthVector_template : public Base_Template {
struct single_value_struct;
union {
single_value_struct *single_value;
struct {
unsigned int n_values;
AuthVector_template *list_value;
} value_list;
struct {
AuthVector_template* precondition;
AuthVector_template* implied_template;
} implication_;
dynmatch_struct<AuthVector>* dyn_match;
};

void set_specific();
void copy_value(const AuthVector& other_value);
void copy_template(const AuthVector_template& other_value);

public:
AuthVector_template();
AuthVector_template(template_sel other_value);
AuthVector_template(const AuthVector& other_value);
AuthVector_template(const OPTIONAL<AuthVector>& other_value);
AuthVector_template(AuthVector_template* p_precondition, AuthVector_template* p_implied_template);
AuthVector_template(Dynamic_Match_Interface<AuthVector>* p_dyn_match);
AuthVector_template(const AuthVector_template& other_value);
~AuthVector_template();
AuthVector_template& operator=(template_sel other_value);
AuthVector_template& operator=(const AuthVector& other_value);
AuthVector_template& operator=(const OPTIONAL<AuthVector>& other_value);
AuthVector_template& operator=(const AuthVector_template& other_value);
boolean match(const AuthVector& other_value, boolean legacy = FALSE) const;
boolean is_bound() const;
boolean is_value() const;
void clean_up();
AuthVector valueof() const;
void set_type(template_sel template_type, unsigned int list_length);
AuthVector_template& list_item(unsigned int list_index) const;
OCTETSTRING_template& rand();
const OCTETSTRING_template& rand() const;
OCTETSTRING_template& sres();
const OCTETSTRING_template& sres() const;
OCTETSTRING_template& kc();
const OCTETSTRING_template& kc() const;
OCTETSTRING_template& ik();
const OCTETSTRING_template& ik() const;
OCTETSTRING_template& ck();
const OCTETSTRING_template& ck() const;
OCTETSTRING_template& autn();
const OCTETSTRING_template& autn() const;
OCTETSTRING_template& res();
const OCTETSTRING_template& res() const;
OCTETSTRING_template& auts();
const OCTETSTRING_template& auts() const;
int size_of() const;
void log() const;
void log_match(const AuthVector& match_value, boolean legacy = FALSE) const;
void encode_text(Text_Buf& text_buf) const;
void decode_text(Text_Buf& text_buf);
void set_param(Module_Param& param);
void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const;
boolean is_present(boolean legacy = FALSE) const;
boolean match_omit(boolean legacy = FALSE) const;
};


/* Function prototypes */

extern AuthVector f__gen__auth__vec__2g();
extern AuthVector f__gen__auth__vec__3g();
extern MobileL3__GMM__SM__Types::RoutingAreaIdentificationV f__RAI(const HEXSTRING& mcc, const HEXSTRING& mnc, const OCTETSTRING& lac, const OCTETSTRING& rac);
extern HEXSTRING f__RAI__to__plmn__hexstr(const MobileL3__GMM__SM__Types::RoutingAreaIdentificationV& rai);
extern void pre_init_module();
extern void post_init_module();

/* Global variable declarations */

extern const XERdescriptor_t AuthVector_rand_xer_;
extern const TTCN_OERdescriptor_t AuthVector_rand_oer_;
extern const TTCN_Typedescriptor_t AuthVector_rand_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_rand_default_coding;
extern const XERdescriptor_t AuthVector_sres_xer_;
extern const TTCN_OERdescriptor_t AuthVector_sres_oer_;
extern const TTCN_Typedescriptor_t AuthVector_sres_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_sres_default_coding;
extern const XERdescriptor_t AuthVector_kc_xer_;
extern const TTCN_OERdescriptor_t AuthVector_kc_oer_;
extern const TTCN_Typedescriptor_t AuthVector_kc_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_kc_default_coding;
extern const XERdescriptor_t AuthVector_ik_xer_;
extern const TTCN_OERdescriptor_t AuthVector_ik_oer_;
extern const TTCN_Typedescriptor_t AuthVector_ik_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_ik_default_coding;
extern const XERdescriptor_t AuthVector_ck_xer_;
extern const TTCN_OERdescriptor_t AuthVector_ck_oer_;
extern const TTCN_Typedescriptor_t AuthVector_ck_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_ck_default_coding;
extern const XERdescriptor_t AuthVector_autn_xer_;
extern const TTCN_OERdescriptor_t AuthVector_autn_oer_;
extern const TTCN_Typedescriptor_t AuthVector_autn_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_autn_default_coding;
extern const XERdescriptor_t AuthVector_res_xer_;
extern const TTCN_OERdescriptor_t AuthVector_res_oer_;
extern const TTCN_Typedescriptor_t AuthVector_res_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_res_default_coding;
extern const XERdescriptor_t AuthVector_auts_xer_;
extern const TTCN_OERdescriptor_t AuthVector_auts_oer_;
extern const TTCN_Typedescriptor_t AuthVector_auts_descr_;
extern UNIVERSAL_CHARSTRING AuthVector_auts_default_coding;
extern const TTCN_Typedescriptor_t AuthVector_descr_;
extern const HEXSTRING hs_0;
extern const unsigned char module_checksum[];
extern TTCN_Module module_object;
extern const RuntimeVersionChecker ver_checker;

} /* end of namespace */

#endif
