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

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

#ifndef CLASS7_H_
#define CLASS7_H_

/*
 *---------------Includes and declares--------------
 */
// Derived includes
// End of Derived includes
// Derived declares
// End of Derived declares
// Include from Include stereotype (header)
#define helloworld 3
// End of Include stereotype (header)

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

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

typedef struct Class7 Class7;

struct Class7 {

	int externProp;

	int defaultProp;

};

// Constructor and destructor declarations 
/*
 *----Default constructor & destructor prototypes---
 */
/**
 * Dynamic instantiation of a Class7 structure
 * @return Class7 instance pointer
 */
Class7* Class7_create();

/**
 * Dynamic destruction of a Class7 structure instantiation
 * @param Pointer to an instance of the Class7 structure
 * @return void
 */
void Class7_destroy(Class7*);

// Property initialisation declarations
/*
 *------Default value initialization prototypes-----
 */
/**
 * Default value initialization
 * @param Class7 structure instance pointer
 * @return void
 */
void Class7_init(Class7 *self);

// Class methods declarations

// Class receptions declarations

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

/*
 *--------Global Public Variable Declarations-------
 */
// global variable declaration
int staticProp;

// ----------------------------------Global Public Functions----------------------------------

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

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

#endif /*CLASS7_H_*/
