// --------------------------------------------------------
// Code generated by Papyrus C
// --------------------------------------------------------

/* 
 * File generated from the CCodegenTest::Class2 uml class
 * Generated by the Papyrus C Generator (CEA LIST) 
 *
 */

#ifndef CLASS2_H_
#define CLASS2_H_

/*
 *---------------Includes and declares--------------
 */
// Derived includes
// End of Derived includes
// Derived declares
struct Class1;
// End of Derived declares

// Std headers
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
// End of Std headers

/*
 *--------------Public Class Description-------------
 */
//  Structure 
/* Class Macro definition */
#define Class2(OBJ) ((Class2*)OBJ)

typedef struct Class2 Class2;

struct Class2 {
	/**
	 * 
	 */

	/*bool*/
	char bVal;
	/**
	 * 
	 */

	int /* protected */iVal1;
	/**
	 * 
	 */

	int /* private */iVal2;

};

// Constructor and destructor declarations 
/*
 *----Default constructor & destructor prototypes---
 */

// Property initialisation declarations
// Class methods declarations
/*
 *---------------Function Declarations--------------
 */
/**
 * 
 */
void
Class2_Class2_1(struct Class2 *self);

/**
 * 
 */
void
Class2_Class2(int newIVal1, int newIVal2, /*bool*/char newBVal,
		struct Class2 *self);

/**
 * 
 */
double
Class2_virtualOp(Class2 *self, double a, double b);

/**
 * 
 */
int
Class2_inlineOp(Class2 *self, int a, int b);

/**
 * 
 */
void
Class2_friendOp(Class2 *self);

/**
 * 
 */
void
Class2_nonStaticOp(Class2 *self);

/**
 * 
 */
int
Class2_paramsOp(Class2 *self, int in, int out, int inout);

/**
 * 
 */
void
Class2_voidOp(Class2 *self);

void
Class2_defaultValueOp(Class2 *self, int newIVal1);

/**
 * 
 */
void
Class2__Class2(Class2 *self);

struct Class1*
Class2_classesOp(Class2 *self, struct Class1 c1);

/**
 * 
 */
const
void
Class2_constOp(Class2 *self);

// Class receptions declarations

// ----------------------------------Public Global VariableDescription----------------------------------

// ----------------------------------Global Public Functions----------------------------------
/*
 *--------Global Public Function Declarations-------
 */
/**
 * 
 */
void
staticOp(void);

// ----------------------------------Signal Event Process Functions Implementations--------------------------------

// ----------------------------------Call Event Process Functions ----------------------------------

#endif /*CLASS2_H_*/
