Home

Resume

Blog

Teikitu


// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //
//  »Project«   Teikitu Gaming System (TgS) (∂)
//  »File«      TgS Common - Base - Type.h
//  »Author«    Andrew Aye (EMail: mailto:andrew.aye@gmail.com, Web: http://www.andrewaye.com)
//  »Version«   4.0
// ------------------------------------------------------------------------------------------------------------------------------ //
//  Copyright: © 2002-2010, Andrew Aye.  All Rights Reserved.
//  This software is free for non-commercial use. Redistribution and use in source and binary forms, with or without modification,
//  are permitted provided that the following conditions are met: 
//    Redistributions of source code must retain this copyright notice, this list of conditions and the following disclaimers. 
//    Redistributions in binary form must reproduce this copyright notice, this list of conditions and the following
//      disclaimers in the documentation and other materials provided with the distribution. 
//  Neither the names of the copyright owner nor the names of its contributors may be used to endorse or promote products derived
//  from this software without specific prior written permission. 
//  The intellectual property rights of the algorithms used reside with Andrew Aye.  You may not use this software, in whole or
//  in part, in support of any commercial product without the express written consent of the author.
//  There is no warranty or other guarantee of fitness of this software for any purpose. It is provided solely "as is".
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //
#if !defined(_TGS_COMMON_BASE_TYPE_H_)
#define _TGS_COMMON_BASE_TYPE_H_
#pragma once


// -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. //
//  Type Definitions
// -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. //

// ---- Standard Types ---------------------------------------------------------------------------------------------------------- //

TgTYPE_PREFIX( TgUINTEGER );
TgTYPE_PREFIX( TgUINT );
TgTYPE_PREFIX( TgUINT08 );
TgTYPE_PREFIX( TgUINT16 );
TgTYPE_PREFIX( TgUINT32 );
TgTYPE_PREFIX( TgUINT64 );
TgTYPE_PREFIX( TgSINTEGER );
TgTYPE_PREFIX( TgSINT );
TgTYPE_PREFIX( TgSINT08 );
TgTYPE_PREFIX( TgSINT16 );
TgTYPE_PREFIX( TgSINT32 );
TgTYPE_PREFIX( TgSINT64 );
TgTYPE_PREFIX( TgFLOAT32 );
TgTYPE_PREFIX( TgFLOAT64 );
TgTYPE_PREFIX( TgBOOL );
TgTYPE_PREFIX( TgANSICHAR );
TgTYPE_PREFIX( TgUNICHAR );

typedef void                                TgVOID;
typedef TgVOID*                             P_TgVOID;
typedef TgVOID *const                       PC_TgVOID;
typedef TgVOID * __restrict                 PU_TgVOID;
typedef TgVOID *const __restrict            PCU_TgVOID;
typedef const TgVOID *                      CP_TgVOID;
typedef const TgVOID *const                 CPC_TgVOID;
typedef const TgVOID * __restrict           CPU_TgVOID;
typedef const TgVOID * const __restrict     CPCU_TgVOID;
typedef TgVOID**                            PP_TgVOID;

#if TgS_WIDE_CHAR
    TgTYPE_DECLARE( wchar_t,                    TgCHAR );
#else
    TgTYPE_DECLARE( char,                       TgCHAR );
#endif

enum { ETgBYTE_PER_CHAR                     = sizeof(TgCHAR) / sizeof(TgUINT08) };


// ---- Commonly Used Types ----------------------------------------------------------------------------------------------------- //

TgTYPE_DECLARE( TgUINT32,                   TgFILE );
TgTYPE_DECLARE( TgSINT32,                   TgRESULT );

TgTYPE_DECLARE( size_t,                     TgSIZE );
TgTYPE_DECLARE( intptr_t,                   TgSINTPTR );
TgTYPE_DECLARE( uintptr_t,                  TgUINTPTR );
TgTYPE_DECLARE( time_t,                     TgTIME );

typedef TgSINT32 (*TgPLATFORM_THREAD_FCN)( C_TgUINTPTR );
TgTYPE_PREFIX( TgPLATFORM_THREAD_FCN );

// ---- Alias Union ------------------------------------------------------------------------------------------------------------- //

TgTYPE_DECLARE( union TgSCALAR_ALIAS_UNION, TgSCALAR_ALIAS_UNION );
union TgSCALAR_ALIAS_UNION
{
    TgUINT08                                    m_u08;
    TgUINT16                                    m_u16;
    TgUINT32                                    m_u32;
    TgUINT64                                    m_u64;
    TgSINT08                                    m_i08;
    TgSINT16                                    m_i16;
    TgSINT32                                    m_i32;
    TgSINT64                                    m_i64;
    TgFLOAT32                                   m_f32;
    TgFLOAT64                                   m_f64;
    TgBOOL                                      m_b;
    TgANSICHAR                                  m_ac;
    TgUNICHAR                                   m_uc;
};

TgTYPE_DECLARE( union TgSCALAR_P_ALIAS_UNION, TgSCALAR_P_ALIAS_UNION );
union TgSCALAR_P_ALIAS_UNION
{
    P_TgUINT08                                  m_pu08;
    P_TgUINT16                                  m_pu16;
    P_TgUINT32                                  m_pu32;
    P_TgUINT64                                  m_pu64;
    P_TgSINT08                                  m_pi08;
    P_TgSINT16                                  m_pi16;
    P_TgSINT32                                  m_pi32;
    P_TgSINT64                                  m_pi64;
    P_TgFLOAT32                                 m_pf32;
    P_TgFLOAT64                                 m_pf64;
    P_TgBOOL                                    m_pb;
    P_TgANSICHAR                                m_pac;
    P_TgUNICHAR                                 m_puc;
};

// ---- Bitfields --------------------------------------------------------------------------------------------------------------- //

TgINLINE TgVOID                             tgBF_Set_Flag_U08( PCU_TgUINT08, C_TgUINT32, C_TgBOOL );
TgINLINE TgVOID                             tgBF_Toggle_Flag_U08( PCU_TgUINT08, C_TgUINT32 );
TgINLINE TgBOOL                             tgBF_Query_Flag_U08( CPCU_TgUINT08, C_TgUINT32 );
TgINLINE TgVOID                             tgBF_Reset_U08( PCU_TgUINT08 );

TgINLINE TgVOID                             tgBF_Set_Flag_U16( PCU_TgUINT16, C_TgUINT32, C_TgBOOL );
TgINLINE TgVOID                             tgBF_Toggle_Flag_U16( PCU_TgUINT16, C_TgUINT32 );
TgINLINE TgBOOL                             tgBF_Query_Flag_U16( CPCU_TgUINT16, C_TgUINT32 );
TgINLINE TgVOID                             tgBF_Reset_U16( PCU_TgUINT16 );

TgINLINE TgVOID                             tgBF_Set_Flag_U32( PCU_TgUINT32, C_TgUINT32, C_TgBOOL );
TgINLINE TgVOID                             tgBF_Toggle_Flag_U32( PCU_TgUINT32, C_TgUINT32 );
TgINLINE TgBOOL                             tgBF_Query_Flag_U32( CPCU_TgUINT32, C_TgUINT32 );
TgINLINE TgVOID                             tgBF_Reset_U32( PCU_TgUINT32 );

TgINLINE TgVOID                             tgBF_Set_Flag_U64( PCU_TgUINT64, C_TgUINT32, C_TgBOOL );
TgINLINE TgVOID                             tgBF_Toggle_Flag_U64( PCU_TgUINT64, C_TgUINT32 );
TgINLINE TgBOOL                             tgBF_Query_Flag_U64( CPCU_TgUINT64, C_TgUINT32 );
TgINLINE TgVOID                             tgBF_Reset_U64( PCU_TgUINT64 );

// ---- TgS Enumerations -------------------------------------------------------------------------------------------------------- //

typedef enum {
    ETgFAC_GENERAL=1,               ETgFAC_CONFIGSYS,               ETgFAC_KERNEL,                  ETgFAC_GAMEENGINE,
    ETgFAC_INPUT,                   ETgFAC_MAT,                     ETgFAC_PHYSICS,                 ETgFAC_RND,
    ETgFAC_RND_DX9,                 ETgFAC_SCG,                     ETgFAC_SOUND,                   ETgFAC_TOOLS,
    ETgFAC_COLLISION
} ETgLIBRARY;
TgTYPE_PREFIX( ETgLIBRARY );

typedef enum {
    ETgSYSTEM_GLOBAL=0,             ETgSYSTEM_SYSINFO,              ETgSYSTEM_MEMMGR,               ETgSYSTEM_ERRMGR,
    ETgSYSTEM_OBJMGR,               ETgSYSTEM_LEXMGR,               ETgSYSTEM_KERNEL,               ETgSYSTEM_COUNT
} ETgSYSTEM_TYPE;
TgTYPE_PREFIX( ETgSYSTEM_TYPE );

typedef enum {
    ETgSERVER_EXESPC_CON,           ETgSERVER_EXESPC_WIN,           ETgSERVER_TIME,                 ETgSERVER_RENDER,
    ETgSERVER_SOUND,                ETgSERVER_PHYSICS,              ETgSERVER_INPUT,                ETgSERVER_GUI,
    ETgSERVER_CONSOLE,              ETgSERVER_SCG_LAYER,            ETgSERVER_SCG_BSP,              ETgSERVER_SCG_SPVS,
    ETgSERVER_SCG_DPVS,             ETgSERVER_COUNT
} ETgSERVER_TYPE;
TgTYPE_PREFIX( ETgSERVER_TYPE );

typedef enum {
    ETgTIME_RESET=0,                ETgTIME_START,                  ETgTIME_STOP,                   ETgTIME_ADVANCE,
    ETgTIME_APP_TIME,               ETgTIME_ELAPSED_TIME,           ETgTIME_ABSOLUTE_TIME
} ETgTIMER_COMMAND;
TgTYPE_PREFIX( ETgTIMER_COMMAND );

typedef enum {
    ETgWINDOWS_STANDARD,            ETgWINDOWS_CONSOLE
} ETgEXESPCTYPE;
TgTYPE_PREFIX( ETgEXESPCTYPE );

typedef enum {
    ETgPOSITIVE,                    ETgNEGATIVE,                    ETgNONE
} ETgSIDE;
TgTYPE_PREFIX( ETgSIDE );

typedef enum {
    ETgSWEEP_START,                 ETgSWEEP_CURRENT,               ETgSWEEP_END
} ETgSWEEP_TIME;
TgTYPE_PREFIX( ETgSWEEP_TIME );

typedef enum {
    ETgSWEEP_STATIC,                ETgSWEEP_LINEAR,                ETgSWEEP_ROTATIONAL
} ETgSWEEP_TYPE;
TgTYPE_PREFIX( ETgSWEEP_TYPE );

typedef enum {
    ETgVERTEX0 = 0,                 ETgVERTEX1,                     ETgVERTEX2,                     ETgEDGE0,
    ETgEDGE1,                       ETgEDGE2
} ETgTRI_FEATURE;
TgTYPE_PREFIX( ETgTRI_FEATURE );

typedef enum {
    ETgMSG_WIN_SIZE,                ETgMSG_MOVE,                    ETgMSG_ZOOM,                    ETgMSG_DRAG,
    ETgMSG_KEYDOWN,                 ETgMSG_KEYUP,
} ETgSTD_MSG;
TgTYPE_PREFIX( ETgSTD_MSG );

typedef enum {
    ETgTHREAD_UNKNOWN = 0,          ETgTHREAD_INIT,                 ETgTHREAD_READY,                ETgTHREAD_CLOSE,
    ETgTHREAD_DONE
} ETgTHREAD_STATUS;
TgTYPE_PREFIX( ETgTHREAD_STATUS );

typedef enum {
    ETgMODULE_STATE_UNKNOWN,        ETgMODULE_STATE_INITIALIZING,   ETgMODULE_STATE_INITIALIZED,    ETgMODULE_STATE_BOOTING,
    ETgMODULE_STATE_BOOTED,         ETgMODULE_STATE_STOP_REQUEST,   ETgMODULE_STATE_STOP_GRANTED,   ETgMODULE_STATE_STOPPING,
    ETgMODULE_STATE_STOPPED,        ETgMODULE_STATE_FREEING,        ETgMODULE_STATE_FREED
} ETgMODULE_STATE;
TgTYPE_PREFIX( ETgMODULE_STATE );

typedef enum
{
    ETgFILE_IO_STATUS__ERROR = -1,  ETgFILE_IO_STATUS__INVALID = 0, ETgFILE_IO_STATUS__QUEUED,      ETgFILE_IO_STATUS__DONE,
} ETgFILE_IO_STATUS;
TgTYPE_PREFIX( ETgFILE_IO_STATUS );

typedef enum {
   ETgFILE_IO_ACCESS_INVALID            = 0,
   ETgFILE_IO_ACCESS_READ               = 1,
   ETgFILE_IO_ACCESS_WRITE              = 2,
   ETgFILE_IO_ACCESS_READ_WRITE         = 3,
   ETgFILE_IO_ACCESS_READ_SHARED        = 5,
   ETgFILE_IO_ACCESS_WRITE_SHARED       = 6,
   ETgFILE_IO_ACCESS_READ_WRITE_SHARED  = 7
} ETgFILE_IO_ACCESS;
TgTYPE_PREFIX( ETgFILE_IO_ACCESS );

typedef enum {
    ETgIO_SEEK_BEGIN,               ETgIO_SEEK_END,                 ETgIO_SEEK_CURRENT
} ETgIO_SEEK;
TgTYPE_PREFIX( ETgIO_SEEK );

enum {
    ETgMAX_NAMEID_SIZE = 256,       ETgMAXLITERAL_SIZE = 64,        ETgHALF_ID = 16,                KTgMAX_FILENAME = 64,
    ETgRESOURCE_NAME_MAX = 32
};

typedef enum {
    ETgFRUSTUM_PLANE__NEAR,         ETgFRUSTUM_PLANE__FAR,          ETgFRUSTUM_PLANE__LEFT,         ETgFRUSTUM_PLANE__RIGHT,
    ETgFRUSTUM_PLANE__TOP,          ETgFRUSTUM_PLANE__BOTTOM,       ETgFRUSTUM_PLANE__MAX
} ETgFRUSTUM_PLANE;
TgTYPE_PREFIX( ETgFRUSTUM_PLANE );

typedef enum {
    ETgTHREAD_PRIORITY__CRITICAL,   ETgTHREAD_PRIORITY__HIGHEST,    ETgTHREAD_PRIORITY__HIGH,        ETgTHREAD_PRIORITY__NORMAL,
    ETgTHREAD_PRIORITY__LOW,        ETgTHREAD_PRIORITY__LOWEST
} ETgTHREAD_PRIORITY;
TgTYPE_PREFIX( ETgTHREAD_PRIORITY );


// -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. //

#define TgNULL                              0u
#define TgFALSE                             0u
#define TgTRUE                              ~0u
#define TgS_OK                              0u
#define TgE_FAIL                            ~0u
#define KTgINVALID_ID                       ~0u

// ---- TgS Functions ----------------------------------------------------------------------------------------------------------- //

typedef TgVOID (*TgFCN_MEM_FREE)( PC_TgVOID );
TgTYPE_PREFIX( TgFCN_MEM_FREE );

#endif //  END  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////