/*++

Copyright (C) 2023 Jan Orend

All rights reserved.

This file has been generated by the Automatic Component Toolkit (ACT) version 1.6.0.

Abstract: This is an autogenerated plain C Header file with basic types in
order to allow an easy use of GladiusLib

Interface version: 1.2.0

*/

#ifndef __GLADIUSLIB_TYPES_HEADER
#define __GLADIUSLIB_TYPES_HEADER

#include <stdbool.h>

/*************************************************************************************************************************
 Scalar types definition
**************************************************************************************************************************/

#ifdef GLADIUSLIB_USELEGACYINTEGERTYPES

typedef unsigned char GladiusLib_uint8;
typedef unsigned short GladiusLib_uint16;
typedef unsigned int GladiusLib_uint32;
typedef unsigned long long GladiusLib_uint64;
typedef char GladiusLib_int8;
typedef short GladiusLib_int16;
typedef int GladiusLib_int32;
typedef long long GladiusLib_int64;

#else // GLADIUSLIB_USELEGACYINTEGERTYPES

#include <stdint.h>

typedef uint8_t GladiusLib_uint8;
typedef uint16_t GladiusLib_uint16;
typedef uint32_t GladiusLib_uint32;
typedef uint64_t GladiusLib_uint64;
typedef int8_t GladiusLib_int8;
typedef int16_t GladiusLib_int16;
typedef int32_t GladiusLib_int32;
typedef int64_t GladiusLib_int64;

#endif // GLADIUSLIB_USELEGACYINTEGERTYPES

typedef float GladiusLib_single;
typedef double GladiusLib_double;

/*************************************************************************************************************************
 General type definitions
**************************************************************************************************************************/

typedef GladiusLib_int32 GladiusLibResult;
typedef void * GladiusLibHandle;
typedef void * GladiusLib_pvoid;

/*************************************************************************************************************************
 Version for GladiusLib
**************************************************************************************************************************/

#define GLADIUSLIB_VERSION_MAJOR 1
#define GLADIUSLIB_VERSION_MINOR 2
#define GLADIUSLIB_VERSION_MICRO 0
#define GLADIUSLIB_VERSION_PRERELEASEINFO ""
#define GLADIUSLIB_VERSION_BUILDINFO ""

/*************************************************************************************************************************
 Error constants for GladiusLib
**************************************************************************************************************************/

#define GLADIUSLIB_SUCCESS 0
#define GLADIUSLIB_ERROR_NOTIMPLEMENTED 1
#define GLADIUSLIB_ERROR_INVALIDPARAM 2
#define GLADIUSLIB_ERROR_INVALIDCAST 3
#define GLADIUSLIB_ERROR_BUFFERTOOSMALL 4
#define GLADIUSLIB_ERROR_GENERICEXCEPTION 5
#define GLADIUSLIB_ERROR_COULDNOTLOADLIBRARY 6
#define GLADIUSLIB_ERROR_COULDNOTFINDLIBRARYEXPORT 7
#define GLADIUSLIB_ERROR_INCOMPATIBLEBINARYVERSION 8

/*************************************************************************************************************************
 Declaration of handle classes
**************************************************************************************************************************/

typedef GladiusLibHandle GladiusLib_Base;
typedef GladiusLibHandle GladiusLib_BoundingBox;
typedef GladiusLibHandle GladiusLib_Face;
typedef GladiusLibHandle GladiusLib_DetailedErrorAccessor;
typedef GladiusLibHandle GladiusLib_ResourceAccessor;
typedef GladiusLibHandle GladiusLib_PolygonAccessor;
typedef GladiusLibHandle GladiusLib_ContourAccessor;
typedef GladiusLibHandle GladiusLib_FaceAccessor;
typedef GladiusLibHandle GladiusLib_ChannelAccessor;
typedef GladiusLibHandle GladiusLib_Gladius;

/*************************************************************************************************************************
 Declaration of structs
**************************************************************************************************************************/

#pragma pack(1)

typedef struct
{
    GladiusLib_single m_Coordinates[2];
} sGladiusLibVector2f;

typedef struct
{
    GladiusLib_single m_Coordinates[3];
} sGladiusLibVector3f;

typedef struct
{
    GladiusLib_single m_MinPosition[2];
    GladiusLib_single m_MaxPosition[2];
    GladiusLib_int32 m_Size[2];
    GladiusLib_int32 m_RequiredMemory;
} sGladiusLibChannelMetaInfo;

#pragma pack()

#endif // __GLADIUSLIB_TYPES_HEADER
