\r
\r
/*=================================================================*/\r
+/* <<< [Error4_Type/Error4_Type.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+/***********************************************************************\r
+* Type: errnum_t\r
+* \83G\83\89\81[\83R\81[\83h\81A\83G\83\89\81[\94Ô\8d\86\r
+************************************************************************/\r
+typedef int errnum_t; /* [errnum_t] 0=no error */\r
+\r
+#ifndef NO_ERROR /* same as windows.h */\r
+ enum { NO_ERROR = 0 }; /* NO_ERROR symbol is for magic code warning only */\r
+#endif\r
+\r
+enum { E_CATEGORY_MASK = 0xFFFFFF00 }; /* E_CATEGORY_* */\r
+enum { E_OFFSET_MASK = 0x000000FF };\r
+\r
+#ifndef E_CATEGORY_COMMON /* If not duplicated */\r
+ #define E_CATEGORY_COMMON E_CATEGORY_COMMON\r
+ enum { E_CATEGORY_COMMON = 0x00000400 }; /* 0x001, 0x400 .. 0x4FF : Reseved meaning by clib */\r
+#endif\r
+\r
+#ifndef E_OTHERS\r
+ #define E_OTHERS E_OTHERS\r
+ enum { E_OTHERS = 1 };\r
+#endif\r
+\r
+enum { E_GET_LAST_ERROR = E_CATEGORY_COMMON | 0x01 }; /* 1025 */\r
+enum { E_HRESULT = E_CATEGORY_COMMON | 0x02 }; /* 1026 */\r
+enum { E_ERRNO = E_CATEGORY_COMMON | 0x03 }; /* 1027 */\r
+enum { E_UNKNOWN = E_CATEGORY_COMMON | 0x04 }; /* 1028 */\r
+enum { E_IN_ERROR = E_CATEGORY_COMMON | 0x05 }; /* 1029 */\r
+enum { E_IN_FINALLY = E_CATEGORY_COMMON | 0x06 }; /* 1030 */\r
+enum { E_INVALID_VALUE = E_CATEGORY_COMMON | 0x07 }; /* 1031 */\r
+enum { E_UNKNOWN_DATA_TYPE = E_CATEGORY_COMMON | 0x08 }; /* 1032 */\r
+enum { E_NOT_IMPLEMENT_YET = E_CATEGORY_COMMON | 0x09 }; /* 1033 */\r
+enum { E_ORIGINAL = E_CATEGORY_COMMON | 0x0A }; /* 1034 */\r
+enum { E_LIMITATION = E_CATEGORY_COMMON | 0x0F }; /* 1039 */\r
+enum { E_FEW_MEMORY = E_CATEGORY_COMMON | 0x10 }; /* 1040 */\r
+enum { E_FEW_ARRAY = E_CATEGORY_COMMON | 0x11 }; /* 1041 */\r
+enum { E_CANNOT_OPEN_FILE = E_CATEGORY_COMMON | 0x12 }; /* 1042 */\r
+enum { E_NOT_FOUND_DLL_FUNC = E_CATEGORY_COMMON | 0x13 }; /* 1043 */\r
+enum { E_BAD_COMMAND_ID = E_CATEGORY_COMMON | 0x14 }; /* 1044 */\r
+enum { E_NOT_FOUND_SYMBOL = E_CATEGORY_COMMON | 0x15 }; /* 1045 */\r
+enum { E_NO_NEXT = E_CATEGORY_COMMON | 0x16 }; /* 1046 */\r
+enum { E_ACCESS_DENIED = E_CATEGORY_COMMON | 0x17 }; /* 1047 */\r
+enum { E_PATH_NOT_FOUND = E_CATEGORY_COMMON | 0x18 }; /* 1048 */\r
+enum { E_OUT_OF_WRITABLE = E_CATEGORY_COMMON | 0x25 }; /* 1061 */\r
+enum { E_NOT_INIT_GLOBAL = E_CATEGORY_COMMON | 0x6B }; /* 1131 */\r
+enum { E_TIME_OUT = E_CATEGORY_COMMON | 0x70 }; /* 1136 */\r
+enum { E_BINARY_FILE = E_CATEGORY_COMMON | 0xBF }; /* 1215 */\r
+enum { E_DEBUG_BREAK = E_CATEGORY_COMMON | 0xDB }; /* 1243 */\r
+enum { E_EXIT_TEST = E_CATEGORY_COMMON | 0xE7 }; /* 1255 */\r
+enum { E_FIFO_OVER = E_CATEGORY_COMMON | 0xF0 }; /* 1264 */\r
+\r
+enum { NOT_FOUND_INDEX = -1 };\r
+\r
+ \r
+/*=================================================================*/\r
/* <<< [CRT/CRT.h] >>> */ \r
/*=================================================================*/\r
\r
#define _vsnprintf vsnprintf\r
#endif\r
\r
+#include <stddef.h> \r
+ \r
#include <crtdbg.h> \r
\r
#ifndef __linux__\r
\r
#include <direct.h> \r
\r
+#include <malloc.h> \r
+ \r
+#include <io.h> \r
+ \r
+#include <fcntl.h> \r
+ \r
+#include <tlhelp32.h> \r
+ \r
/*=================================================================*/\r
-/* <<< [CRT_plus/CRT_plus.h] >>> */ \r
+/* <<< [CRT_plus_1/CRT_plus_1.h] >>> */ \r
/*=================================================================*/\r
\r
+#if __cplusplus\r
+ extern "C" { /* Start of C Symbol */ \r
+#endif\r
+\r
+\r
+ \r
/***********************************************************************\r
<<< [C99Type] >>> \r
************************************************************************/\r
typedef unsigned int uint32_t; /* For 32bit compiler */\r
typedef unsigned short uint16_t;\r
typedef unsigned char uint8_t;\r
+typedef unsigned char byte_t; /* This is not C99 */\r
typedef float float32_t; /* This is not C99 */\r
typedef double float64_t; /* This is not C99 */\r
typedef unsigned int bool_t; /* MISRA-C:1998 No.13 */ /* This is not C99 */\r
typedef unsigned int bool32_t; /* For 32bit compiler */\r
typedef unsigned short bool16_t;\r
typedef unsigned char bool8_t;\r
+typedef int int_fast32_t;\r
+typedef int int_fast16_t;\r
+typedef int int_fast8_t;\r
+typedef unsigned int uint_fast32_t;\r
+typedef unsigned int uint_fast16_t;\r
+typedef unsigned int uint_fast8_t;\r
+\r
+#define INT_FAST32_MAX INT_MAX\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [INVALID_ARRAY_INDEX] >>> \r
+************************************************************************/\r
+enum { INVALID_ARRAY_INDEX = -1 };\r
\r
\r
\r
/*********************************************************************************************\r
+ <<< [bit_flags32_t] [bit_flags_fast32_t] >>> \r
<<< [BitField] [BIT_FIELD_ENDIAN] [BIT_FIELD_LITTLE_ENDIAN] [BIT_FIELD_BIG_ENDIAN] >>> \r
**********************************************************************************************/\r
+typedef uint32_t bit_flags32_t; \r
+typedef uint_fast32_t bit_flags_fast32_t;\r
typedef unsigned int BitField; \r
typedef uint32_t BitField32;\r
#define BIT_FIELD_ENDIAN BIT_FIELD_LITTLE_ENDIAN\r
\r
\r
/***********************************************************************\r
+ <<< [IsBitSet] Check 1 bit >>> \r
+ <<< [IsAnyBitsSet] Check multiple bits >>> \r
+ <<< [IsAllBitsSet] Check multiple bits >>> \r
+ <<< [IsBitNotSet] Check 1 bit >>> \r
+ <<< [IsAnyBitsNotSet] Check multiple bits >>> \r
+ <<< [IsAllBitsNotSet] Check multiple bits >>> \r
+************************************************************************/\r
+#define IsBitSet( variable, const_value ) \\r
+ ( ( (variable) & (const_value) ) != 0 )\r
+\r
+#define IsAnyBitsSet( variable, or_const_value ) \\r
+ ( ( (variable) & (or_const_value) ) != 0 )\r
+\r
+#define IsAllBitsSet( variable, or_const_value ) \\r
+ ( ( (variable) & (or_const_value) ) == (or_const_value) )\r
+\r
+#define IsBitNotSet( variable, const_value ) \\r
+ ( ( (variable) & (const_value) ) == 0 )\r
+\r
+#define IsAnyBitsNotSet( variable, or_const_value ) \\r
+ ( ( (variable) & (or_const_value) ) != (or_const_value) )\r
+\r
+#define IsAllBitsNotSet( variable, or_const_value ) \\r
+ ( ( (variable) & (or_const_value) ) == 0 )\r
+\r
+\r
+ \r
+/***********************************************************************\r
<<< [bool type] >>> \r
************************************************************************/\r
#ifndef __cplusplus\r
\r
\r
/***********************************************************************\r
+ <<< (malloc_redirected) >>> \r
+************************************************************************/\r
+#define malloc malloc_redirected\r
+#define realloc realloc_redirected\r
+#define calloc calloc_redirected\r
+void* malloc_redirected( size_t in_Size );\r
+void* realloc_redirected( void* in_Address, size_t in_Size );\r
+void* calloc_redirected( size_t in_Count, size_t in_Size );\r
+void* malloc_no_redirected( size_t in_Size );\r
+void* realloc_no_redirected( void* in_Address, size_t in_Size );\r
+void* calloc_no_redirected( size_t in_Count, size_t in_Size );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [FuncType] >>> \r
+************************************************************************/\r
+typedef int (*FuncType)( void* Param ); \r
+typedef errnum_t (* InitializeFuncType )( void* self, void* Parameter );\r
+//typedef int (*FinishFuncType)( void* m, int e ); /*[FinishFuncType]*/\r
+typedef errnum_t (*FinalizeFuncType)( void* self, errnum_t e ); /*[FinalizeFuncType]*/\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [InterfaceID_Class] >>> \r
+ <<< [InterfaceToVTableClass] >>> \r
+- const InterfaceID_Class g_SampleInterface_ID;\r
+************************************************************************/\r
+typedef struct _InterfaceID_Class InterfaceID_Class;\r
+struct _InterfaceID_Class {\r
+ char* InterfaceName;\r
+};\r
+\r
+typedef struct _InterfaceToVTableClass InterfaceToVTableClass;\r
+struct _InterfaceToVTableClass {\r
+ const InterfaceID_Class* InterfaceID;\r
+ const void* VTable;\r
+};\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [ClassID_Class] >>> \r
+- const ClassID_Class g_SampleClass_ID;\r
+************************************************************************/\r
+typedef struct _ClassID_Class ClassID_Class;\r
+struct _ClassID_Class {\r
+ char* ClassName;\r
+ const ClassID_Class** SuperClassID_Array;\r
+ int SuperClassID_Array_Count;\r
+ size_t Size;\r
+ InitializeFuncType InitializeFunction;\r
+ const InterfaceToVTableClass* InterfaceToVTable_Array;\r
+ int InterfaceToVTable_Array_Conut;\r
+};\r
+\r
+bool ClassID_Class_isSuperClass( const ClassID_Class* ClassID, const ClassID_Class* SuperClassID );\r
+errnum_t ClassID_Class_createObject( const ClassID_Class* ClassID, void* out_Object, void* Parameter );\r
+void* ClassID_Class_getVTable( const ClassID_Class* ClassID, const InterfaceID_Class* InterfaceID );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [ClassID_SuperClass] >>> \r
+************************************************************************/\r
+typedef struct _ClassID_SuperClass ClassID_SuperClass;\r
+struct _ClassID_SuperClass {\r
+ const ClassID_Class* ClassID; /* &g_(ClassName)_ID */\r
+};\r
+extern const ClassID_Class g_ClassID_SuperClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [g_FinalizerInterface_ID] >>> \r
+************************************************************************/\r
+\r
+extern const InterfaceID_Class g_FinalizerInterface_ID;\r
+\r
+/*[FinalizerVTableClass]*/\r
+typedef struct _FinalizerVTableClass FinalizerVTableClass;\r
+struct _FinalizerVTableClass {\r
+ int OffsetToSelf;\r
+ FinalizeFuncType Finalize;\r
+};\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [g_PrintXML_Interface_ID] >>> \r
+************************************************************************/\r
+\r
+extern const InterfaceID_Class g_PrintXML_Interface_ID;\r
+\r
+typedef errnum_t (* PrintXML_FuncType )( void* self, FILE* OutputStream );\r
+\r
+\r
+/*[PrintXML_VTableClass]*/\r
+typedef struct _PrintXML_VTableClass PrintXML_VTableClass;\r
+struct _PrintXML_VTableClass {\r
+ int OffsetToSelf;\r
+ PrintXML_FuncType PrintXML;\r
+};\r
+\r
+\r
+ \r
+/***********************************************************************\r
<<< [fopen_ccs] >>> \r
************************************************************************/\r
#if defined(_UNICODE) \r
\r
\r
/***********************************************************************\r
- <<< [FlagsOnlyConfigClass] >>> \r
+ <<< [SizedStruct] >>> \r
************************************************************************/\r
-typedef struct _FlagsOnlyConfigClass FlagsOnlyConfigClass;\r
-struct _FlagsOnlyConfigClass {\r
- BitField Flags;\r
+typedef struct _SizedStruct SizedStruct;\r
+struct _SizedStruct {\r
+ size_t ThisStructSize;\r
+ int OthersData;\r
+};\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NameOnlyClass] >>> \r
+************************************************************************/\r
+typedef struct _NameOnlyClass NameOnlyClass;\r
+struct _NameOnlyClass {\r
+ const TCHAR* Name;\r
+ const void* Delegate;\r
+};\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NameAndNumClass] >>> \r
+************************************************************************/\r
+typedef struct _NameAndNumClass NameAndNumClass; /* Like NameOnlyClass */\r
+struct _NameAndNumClass {\r
+ TCHAR* Name;\r
+ int Number;\r
};\r
\r
\r
\r
\r
\r
+/**************************************************************************\r
+ <<< [ttoi_ex] >>> \r
+***************************************************************************/\r
+int ttoi_ex( const TCHAR* string, bit_flags_fast32_t options );\r
+\r
+\r
+ \r
/***********************************************************************\r
- <<< [FuncType] [FinishFuncType] >>> \r
+ <<< [PointerType_plus] >>> \r
************************************************************************/\r
-typedef int (*FuncType)( void* Param ); \r
-typedef int (*FinishFuncType)( void* m, int e );\r
+inline void PointerType_plus( const void* in_out_Element, int PlusMinusByte )\r
+{\r
+ *(int8_t**) in_out_Element = *(int8_t**) in_out_Element + PlusMinusByte;\r
+}\r
\r
\r
\r
-/*=================================================================*/\r
-/* <<< [DebugTools/DebugTools.h] >>> */ \r
-/*=================================================================*/\r
+/***********************************************************************\r
+ <<< [PointerType_diff] >>> \r
+************************************************************************/\r
+inline ptrdiff_t PointerType_diff( const void* PointerA, const void* PointerB )\r
+{\r
+ return (uintptr_t) PointerA - (uintptr_t) PointerB;\r
+}\r
+\r
+\r
\r
-#if __cplusplus\r
- extern "C" { /* Start of C Symbol */ \r
-#endif\r
+/**************************************************************************\r
+ <<< [JOIN_SYMBOL] >>> \r
+***************************************************************************/\r
+#define JOIN_SYMBOL(x, y) JOIN_SYMBOL_AGAIN(x, y)\r
+#define JOIN_SYMBOL_AGAIN(x, y) x##y\r
+ /* CERT secure coding standard PRE05-C */\r
\r
\r
-#ifndef NDEBUG\r
- #define NDEBUG_ERROR\r
-#else\r
- #define NDEBUG_ERROR ___cut_NDEBUG_ERROR\r
-#endif\r
+ \r
+/**************************************************************************\r
+ <<< [static_assert] >>> \r
+***************************************************************************/\r
+#define static_assert( ConstantExpression, StringLiteral ) \\r
+ __pragma(warning(push)) \\r
+ __pragma(warning(disable:4127)) \\r
+ do { typedef char JOIN_SYMBOL( AssertionFailed_, __LINE__ )[(ConstantExpression) ? 1 : -1]; } while(0) \\r
+ __pragma(warning(pop))\r
+\r
+#define static_assert_global( ConstantExpression, StringLiteral ) \\r
+ __pragma(warning(push)) \\r
+ __pragma(warning(disable:4127)) \\r
+ typedef char JOIN_SYMBOL( AssertionFailed_, __LINE__ )[(ConstantExpression) ? 1 : -1] \\r
+ __pragma(warning(pop))\r
+\r
+ /* CERT secure coding standard DCL03-C */\r
+ /* If "ConstantExpression" is false, illegal array size error will be raised. */\r
+\r
\r
\r
-#ifndef dll_global_g_DebugBreakCount\r
- #define dll_global_g_DebugBreakCount /* [dll_global_g_DebugBreakCount_NotDLL] */\r
+#if __cplusplus\r
+ } /* End of C Symbol */ \r
#endif\r
\r
+/*=================================================================*/\r
+/* <<< [Error4_Inline/Error4_Inline.h] >>> */ \r
+/*=================================================================*/\r
+ \r
/***********************************************************************\r
- <<< [TestableDebugBreak] >>> \r
+ <<< [UNREFERENCED_VARIABLE] >>> \r
+ <<< [UNREFERENCED_VARIABLE_2] >>>\r
+ <<< [UNREFERENCED_VARIABLE_3] >>>\r
+ <<< [UNREFERENCED_VARIABLE_4] >>>\r
************************************************************************/\r
-#define TestableDebugBreak() ( g_DebugBreakCount++, (TestableDebugBreak_isEnabled() ? (DebugBreak(),0) : 0 ) )\r
-int TestableDebugBreak_isEnabled(void);\r
-dll_global_g_DebugBreakCount extern int g_bTestableDebugBreak_Disable;\r
-dll_global_g_DebugBreakCount extern int g_DebugBreakCount;\r
+#ifdef __linux__\r
+ #define UNREFERENCED_VARIABLE( x )\r
+ #define UNREFERENCED_VARIABLES( x )\r
+#else\r
+\r
+#define UNREFERENCED_VARIABLE( a1 ) UNREFERENCED_VARIABLE_Sub( &(a1) )\r
+#define UNREFERENCED_VARIABLE_2( a1,a2 ) UNREFERENCED_VARIABLE_2_Sub( &(a1), &(a2) )\r
+#define UNREFERENCED_VARIABLE_3( a1,a2,a3 ) UNREFERENCED_VARIABLE_3_Sub( &(a1), &(a2), &(a3) )\r
+#define UNREFERENCED_VARIABLE_4( a1,a2,a3,a4 ) UNREFERENCED_VARIABLE_4_Sub( &(a1), &(a2), &(a3), &(a4) )\r
+\r
+inline void UNREFERENCED_VARIABLE_Sub( const void* a1 ) { a1; }\r
+inline void UNREFERENCED_VARIABLE_2_Sub( const void* a1, const void* a2 ) { a1,a2; }\r
+inline void UNREFERENCED_VARIABLE_3_Sub( const void* a1, const void* a2, const void* a3 ) { a1,a2,a3; }\r
+inline void UNREFERENCED_VARIABLE_4_Sub( const void* a1, const void* a2, const void* a3, const void* a4 ) { a1,a2,a3,a4; }\r
+\r
+#endif\r
\r
\r
\r
-#if __cplusplus\r
- } /* End of C Symbol */ \r
+/*=================================================================*/\r
+/* <<< [Lock_1/Lock_1.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+/***********************************************************************\r
+ <<< [SingletonInitializerClass] >>> \r
+************************************************************************/\r
+typedef struct {\r
+ volatile LONG InitializeStep;\r
+} SingletonInitializerClass;\r
+\r
+#ifndef SingletonInitializerClass_FailSleepTime\r
+ #ifndef NDEBUG\r
+ #define SingletonInitializerClass_FailSleepTime 60000\r
+ #else\r
+ #define SingletonInitializerClass_FailSleepTime 0\r
+ #endif\r
#endif\r
\r
+bool SingletonInitializerClass_isFirst( SingletonInitializerClass* self );\r
+void SingletonInitializerClass_onFinishedInitialize( SingletonInitializerClass* self, int e );\r
+bool SingletonInitializerClass_isInitialized( SingletonInitializerClass* self );\r
+\r
\r
\r
/*=================================================================*/\r
-/* <<< [Error4/Error4.h] >>> */ \r
+/* <<< [Print/Print2.h] >>> */ \r
/*=================================================================*/\r
\r
#if __cplusplus\r
extern "C" { /* Start of C Symbol */ \r
#endif\r
+ \r
+/***********************************************************************\r
+ <<< [USE_printf_to] >>> \r
+************************************************************************/\r
+#define USE_printf_to_stdout 1\r
+#define USE_printf_to_debugger 2\r
+#define USE_printf_to_file 3\r
\r
\r
+ \r
/***********************************************************************\r
- <<< [errnum_t] >>> \r
+ <<< [PrintfCounterClass] >>> \r
************************************************************************/\r
-typedef int errnum_t; /* 0=no error */\r
+#if USE_PRINTF_COUNTER\r
+\r
+typedef struct _PrintfCounterClass PrintfCounterClass;\r
+struct _PrintfCounterClass {\r
+ int Count;\r
+ int BreakCount;\r
+ int BreakIndent;\r
+};\r
+extern PrintfCounterClass g_PrintfCounter;\r
\r
-#ifndef NO_ERROR /* same as windows.h */\r
- enum { NO_ERROR = 0 }; /* NO_ERROR symbol is for magic code warning only */\r
#endif\r
\r
-enum { E_CATEGORY_MASK = 0xFFFFFF00 }; /* E_CATEGORY_* */\r
-enum { E_OFFSET_MASK = 0x000000FF };\r
\r
-#ifndef E_CATEGORY_COMMON /* If not duplicated */\r
- #define E_CATEGORY_COMMON E_CATEGORY_COMMON\r
- enum { E_CATEGORY_COMMON = 0x00000400 }; /* 0x001, 0x400 .. 0x4FF : Reseved meaning by clib */\r
+ \r
+errnum_t vsprintf_r( char* s, size_t s_size, const char* format, va_list va ); \r
+ \r
+errnum_t vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va ); \r
+ \r
+/*[vstprintf_r]*/\r
+#if defined(_UNICODE) \r
+ #define vstprintf_r vswprintf_r\r
+#else\r
+ #define vstprintf_r vsprintf_r\r
#endif\r
+ \r
+errnum_t stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... ); \r
+ \r
+errnum_t stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last, \r
+ const TCHAR* src, const TCHAR* src_over );\r
+errnum_t stprintf_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,\r
+ const TCHAR* format, ... );\r
+ \r
+errnum_t ftcopy_part_r( FILE* OutputStream, const TCHAR* Str, const TCHAR* StrOver );\r
+ \r
+errnum_t OpenConsole( bool in_OpenIfNoConsole, bool* out_IsExistOrNewConsole );\r
\r
-#ifndef E_OTHERS\r
- #define E_OTHERS E_OTHERS\r
- enum { E_OTHERS = 1 };\r
+ \r
+#if __cplusplus\r
+ } /* End of C Symbol */ \r
#endif\r
\r
-enum { E_GET_LAST_ERROR = E_CATEGORY_COMMON | 0x01 }; /* 1025 */\r
-enum { E_HRESULT = E_CATEGORY_COMMON | 0x02 }; /* 1026 */\r
-enum { E_ERRNO = E_CATEGORY_COMMON | 0x03 }; /* 1027 */\r
-enum { E_UNKNOWN = E_CATEGORY_COMMON | 0x04 }; /* 1028 */\r
-enum { E_IN_ERROR = E_CATEGORY_COMMON | 0x05 }; /* 1029 */\r
-enum { E_IN_FINALLY = E_CATEGORY_COMMON | 0x06 }; /* 1030 */\r
-enum { E_INVALID_VALUE = E_CATEGORY_COMMON | 0x07 }; /* 1031 */\r
-enum { E_NOT_IMPLEMENT_YET = E_CATEGORY_COMMON | 0x09 }; /* 1033 */\r
-enum { E_ORIGINAL = E_CATEGORY_COMMON | 0x0A }; /* 1034 */\r
-enum { E_LIMITATION = E_CATEGORY_COMMON | 0x0F }; /* 1039 */\r
-enum { E_FEW_MEMORY = E_CATEGORY_COMMON | 0x10 }; /* 1040 */\r
-enum { E_FEW_ARRAY = E_CATEGORY_COMMON | 0x11 }; /* 1041 */\r
-enum { E_CANNOT_OPEN_FILE = E_CATEGORY_COMMON | 0x12 }; /* 1042 */\r
-enum { E_NOT_FOUND_DLL_FUNC = E_CATEGORY_COMMON | 0x13 }; /* 1043 */\r
-enum { E_BAD_COMMAND_ID = E_CATEGORY_COMMON | 0x14 }; /* 1044 */\r
-enum { E_NOT_FOUND_SYMBOL = E_CATEGORY_COMMON | 0x15 }; /* 1045 */\r
-enum { E_NO_NEXT = E_CATEGORY_COMMON | 0x16 }; /* 1046 */\r
-enum { E_ACCESS_DENIED = E_CATEGORY_COMMON | 0x17 }; /* 1047 */\r
-enum { E_PATH_NOT_FOUND = E_CATEGORY_COMMON | 0x18 }; /* 1048 */\r
-enum { E_OUT_OF_WRITABLE = E_CATEGORY_COMMON | 0x25 }; /* 1061 */\r
-enum { E_NOT_INIT_GLOBAL = E_CATEGORY_COMMON | 0x6B }; /* 1131 */\r
-enum { E_TIME_OUT = E_CATEGORY_COMMON | 0x70 }; /* 1136 */\r
-enum { E_DEBUG_BREAK = E_CATEGORY_COMMON | 0xDB }; /* 1243 */\r
-enum { E_EXIT_TEST = E_CATEGORY_COMMON | 0xE7 }; /* 1255 */\r
-enum { E_FIFO_OVER = E_CATEGORY_COMMON | 0xF0 }; /* 1264 */\r
+ \r
+/*=================================================================*/\r
+/* <<< [StrT_typedef/StrT_typedef.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+/***********************************************************************\r
+ <<< [NewStringsEnum] >>> \r
+************************************************************************/\r
+typedef enum _NewStringsEnum NewStringsEnum;\r
+enum _NewStringsEnum {\r
+ NewStringsEnum_NewPointersAndLinkCharacters = 0x06,\r
+ NewStringsEnum_NewPointersAndNewCharacters = 0x03,\r
+ NewStringsEnum_LinkCharacters = 0x04,\r
+ NewStringsEnum_NewPointers = 0x02,\r
+ NewStringsEnum_NewCharacters = 0x01,\r
+ NewStringsEnum_NoAllocate = 0x00\r
+};\r
+\r
+\r
+ \r
+/*=================================================================*/\r
+/* <<< [SetX/SetX.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+#ifndef __SETX_H \r
+#define __SETX_H\r
+\r
+#ifdef __cplusplus\r
+ extern "C" { /* Start of C Symbol */\r
+#endif\r
+\r
+ \r
+/******************************************************************\r
+ <<< Set4_typedef >>> \r
+*******************************************************************/\r
+\r
+typedef struct _Set4 Set4;\r
+typedef struct _Set4Iter Set4Iter;\r
+\r
+typedef int (*FuncType_create_in_set4)( void** pm, Set4* Set );\r
+ \r
+/***********************************************************************\r
+ <<< [Set2] >>> \r
+************************************************************************/\r
+typedef struct _Set2 Set2;\r
+struct _Set2 {\r
+ void* First;\r
+ void* Next;\r
+ void* Over;\r
+\r
+ #ifdef _DEBUG\r
+ void** PointerOfDebugArray; /* void<type> */\r
+ #endif\r
+};\r
+\r
+//[Set2_IteratorClass]\r
+typedef struct _Set2_IteratorClass Set2_IteratorClass;\r
+struct _Set2_IteratorClass {\r
+ Set2* Parent;\r
+ int ElementSize;\r
+ uint8_t* Current;\r
+};\r
+\r
+#define Set2_initConst( m ) ( (m)->First = NULL, (m)->Next = NULL )\r
+errnum_t Set2_init( Set2* m, int FirstSize );\r
+errnum_t Set2_finish( Set2* m, errnum_t e );\r
+#define Set2_isInited( m ) ( (m)->First != NULL )\r
+\r
+#define Set2_allocate( m, pp ) \\r
+ Set2_alloc_imp( m, (void*)(pp), sizeof(**(pp)) )\r
+\r
+#define Set2_alloc( m, pp, type ) \\r
+ Set2_alloc_imp( m, (void*)(pp), sizeof(type) )\r
+\r
+errnum_t Set2_alloc_imp( Set2* m, void* pm, size_t size );\r
+\r
+#define Set2_push( m, pp, type ) \\r
+ Set2_alloc_imp( m, (void*)(pp), sizeof(type) )\r
+\r
+#define Set2_pop( m, pp, type ) \\r
+ Set2_pop_imp( m, (void*)(pp), sizeof(type) )\r
+\r
+errnum_t Set2_pop_imp( Set2* m, void* pp, size_t size );\r
+\r
+#define Set2_free( m, pp, e ) \\r
+ Set2_free_imp( m, pp, sizeof(**(pp)), e )\r
+errnum_t Set2_free_imp( Set2* self, void* in_PointerOfPointer, size_t in_Size_ofElement, errnum_t e );\r
+\r
+#define Set2_freeLast( m, p, type, e ) \\r
+ ( ((char*)(m)->Next - sizeof(type) == (char*)(p)) ? \\r
+ (m)->Next = (p), (e) : \\r
+ ((e)?(e):E_OTHERS) )\r
+\r
+#define Set2_toEmpty( m ) \\r
+ ( (m)->Next = (m)->First, 0 )\r
+\r
+#define Set2_expandIfOverByAddr( m, OverAddrBasedOnNowFirst ) \\r
+ ( (void*)(OverAddrBasedOnNowFirst) <= (m)->Over ? 0 : \\r
+ Set2_expandIfOverByAddr_imp( m, OverAddrBasedOnNowFirst ) )\r
+\r
+#define Set2_expandIfOverByOffset( m, Size ) \\r
+ Set2_expandIfOverByAddr( m, (char*)(m)->First + (Size) )\r
+errnum_t Set2_expandIfOverByAddr_imp( Set2* m, void* OverAddrBasedOnNowFirst );\r
+\r
+#define Set2_allocMulti( m, out_pElem, ElemType, nElem ) \\r
+ Set2_allocMulti_sub( m, (void*)(out_pElem), sizeof(ElemType) * (nElem) )\r
+errnum_t Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize );\r
+\r
+#define Set2_forEach( self, Item, Item_Over, Type ) \\r
+ *(Item) = (Type*)( (self)->First ), *(Item_Over) = (Type*)( (self)->Next ); \\r
+ *(Item) < *(Item_Over); \\r
+ *(Item) += 1\r
+\r
+errnum_t Set2_getIterator( Set2* self, Set2_IteratorClass* out_Iterator, int ElementSize );\r
+errnum_t Set2_getDescendingIterator( Set2* self, Set2_IteratorClass* out_Iterator, int ElementSize );\r
+void* Set2_IteratorClass_getNext( Set2_IteratorClass* self );\r
+void* Set2_IteratorClass_getPrevious( Set2_IteratorClass* self );\r
+\r
+\r
+//[Set2_forEach2]\r
+#define Set2_forEach2( self, Iterator, out_Element ) \\r
+ Set2_forEach2_1( self, Iterator, out_Element, sizeof(**(out_Element)) ); \\r
+ Set2_forEach2_2( self, Iterator, out_Element ); \\r
+ Set2_forEach2_3( self, Iterator, out_Element )\r
+\r
+inline void Set2_forEach2_1( Set2* self, Set2_IteratorClass* Iterator, void* out_Element,\r
+ size_t ElementSize )\r
+{\r
+ Set2_getIterator( self, Iterator, ElementSize );\r
+ *(void**) out_Element = Set2_IteratorClass_getNext( Iterator );\r
+}\r
+\r
+inline bool Set2_forEach2_2( Set2* self, Set2_IteratorClass* Iterator, void* out_Element )\r
+{\r
+ UNREFERENCED_VARIABLE_2( self, Iterator );\r
+ return ( *(void**) out_Element != NULL );\r
+}\r
+\r
+inline void Set2_forEach2_3( Set2* self, Set2_IteratorClass* Iterator, void* out_Element )\r
+{\r
+ UNREFERENCED_VARIABLE( self );\r
+ *(void**) out_Element = Set2_IteratorClass_getNext( Iterator );\r
+}\r
+\r
+\r
+#define Set2_getArray( self, out_Array, out_Count ) \\r
+ ( ( *(void**)(out_Array) = (self)->First, \\r
+ *(out_Count) = ( (byte_t*) (self)->Next - (byte_t*) (self)->First ) / sizeof(**(out_Array))), 0 )\r
+\r
+#define Set2_refer( m, iElem, out_pElem ) \\r
+ Set2_ref_imp( m, iElem, out_pElem, sizeof(**(out_pElem)) )\r
+\r
+#define Set2_ref( m, iElem, out_pElem, ElemType ) \\r
+ Set2_ref_imp( m, iElem, out_pElem, sizeof(ElemType) )\r
+\r
+errnum_t Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize );\r
+\r
+#define Set2_isEmpty( m ) \\r
+ ( (m)->Next == (m)->First )\r
+\r
+#define Set2_getCount( m, Type ) \\r
+ ( ( (byte_t*)(m)->Next - (byte_t*)(m)->First ) / sizeof(Type) )\r
+\r
+#define Set2_getCountMax( m, Type ) \\r
+ ( ( (byte_t*)(m)->Over - (byte_t*)(m)->First ) / sizeof(Type) )\r
+\r
+#define Set2_checkPtrInArr( m, p ) \\r
+ ( (m)->First <= (p) && (p) < (m)->Over ? 0 : E_NOT_FOUND_SYMBOL )\r
+\r
+errnum_t Set2_separate( Set2* m, int NextSize, void** allocate_Array );\r
+\r
+#ifdef _DEBUG\r
+void Set2_setDebug( Set2* m, void* PointerOfDebugArray );\r
+#endif\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [Set2a] >>> \r
+************************************************************************/\r
+typedef struct _Set2 Set2a;\r
+\r
+void Set2a_initConst( Set2a* m, void* ArrInStack );\r
+int Set2a_init( Set2a* m, void* ArrInStack, size_t ArrInStack_Size );\r
+int Set2a_finish( Set2a* m, void* ArrInStack, int e );\r
+int Set2a_toEmpty( Set2a* m );\r
+//int Set2a_alloc( Set2a* m, void* ArrInStack, ClassA** out_p, Type ClassA );\r
+int Set2a_expandIfOverByAddr( Set2a* m, void* OverAddrBasedOnNowFirst );\r
+\r
+\r
+\r
+// for inside\r
+\r
+#define Set2a_initConst( m, ArrInStack ) \\r
+ ( (m)->First = (ArrInStack) )\r
+\r
+#define Set2a_finish( m, ArrInStack, e ) \\r
+ ( (m)->First == (ArrInStack) ? (e) : ( free( (m)->First ), (e) ) )\r
+\r
+#define Set2a_toEmpty( m ) \\r
+ Set2_toEmpty( m )\r
+\r
+#define Set2a_alloc( m, ArrInStack, out_Pointer, ClassA ) \\r
+ ( (void*)( (ClassA*)((m)->Next) + 1 ) <= (m)->Over ? \\r
+ ( *(out_Pointer) = (ClassA*)(m)->Next, (m)->Next = (ClassA*)((m)->Next) + 1, 0 ) : \\r
+ Set2a_alloc_imp( m, ArrInStack, out_Pointer, sizeof(ClassA) ) )\r
+\r
+int Set2a_alloc_imp( Set2a* m, void* ArrInStack, void* out_Pointer, size_t ElemSize );\r
+\r
+#define Set2a_expandIfOverByAddr( m, ArrInStack, OverAddrBasedOnNowFirst ) \\r
+ ( (void*)(OverAddrBasedOnNowFirst) <= (m)->Over ? 0 : \\r
+ Set2a_expandIfOverByAddr_imp( m, ArrInStack, OverAddrBasedOnNowFirst ) )\r
+\r
+int Set2a_expandIfOverByAddr_imp( Set2a* m, void* ArrInStack, void* OverAddrBasedOnNowFirst );\r
+\r
+\r
+ \r
+/******************************************************************\r
+ <<< [Set4] >>> \r
+*******************************************************************/\r
+struct _Set4 {\r
+ byte_t* FirstBlock;\r
+ byte_t* CurrentBlockFirst;\r
+ byte_t* CurrentBlockNext;\r
+ union {\r
+ byte_t* CurrentBlockOver;\r
+ byte_t** NextBlock;\r
+ } u;\r
+ size_t HeapSize;\r
+ size_t ElementSize;\r
+};\r
+\r
+struct _Set4Iter {\r
+ void* p;\r
+ void* Over;\r
+};\r
+\r
+/* errnum_t Set4_init( Set4* self, Type, int FirstHeapSize ); */\r
+/* errnum_t Set4_allocate( Set4* self, Type** out_ElementPointer ); */\r
+/* errnum_t Set4_free( Set4* self, Type** in_out_ElementPointer ); */\r
+/* Type* Set4_ref( Set4* self, int i, Type ); */\r
+\r
+\r
+/* Private */\r
+errnum_t Set4_init_imp( Set4* self, size_t in_ElementSize, size_t FirstHeapSize );\r
+errnum_t Set4_finish2_imp2( Set4* self );\r
+errnum_t Set4_finish2_imp( Set4* self, errnum_t e, size_t in_ElementSize, FinalizeFuncType in_Type_Finalize );\r
+errnum_t Set4_alloc_imp( Set4* self, void* out_ElementPointer, size_t in_ElementSize );\r
+errnum_t Set4_free_imp( Set4* self, void* in_out_ElementPointer, size_t in_ElementSize, errnum_t e );\r
+void* Set4_ref_imp( Set4* self, int i, int size );\r
+int Set4_getCount_imp( Set4* self, int size );\r
+void Set4_forEach_imp2( Set4* self, Set4Iter* p, int size );\r
+\r
+\r
+ \r
+/**************************************************************************\r
+ <<< [ListClass] Linked List >>> \r
+***************************************************************************/\r
+typedef struct _ListClass ListClass;\r
+typedef struct _ListElementClass ListElementClass;\r
+typedef struct _ListIteratorClass ListIteratorClass;\r
+\r
+/*[ListElementClass]*/\r
+struct _ListElementClass { /* This struct can be menbers of Data */\r
+ void* Data; /* Element Data */\r
+ ListClass* List; /* NULL = Not in a list */\r
+ ListElementClass* Next;\r
+ ListElementClass* Previous;\r
+};\r
+\r
+struct _ListClass {\r
+ void* Data; /* List owner. ListClass does not set this */\r
+ ListElementClass Terminator;\r
+ int Count;\r
+};\r
+\r
+/*[ListIteratorClass]*/\r
+struct _ListIteratorClass {\r
+ ListElementClass* Element;\r
+ ListElementClass ModifiedElement;\r
+};\r
+\r
+ void ListClass_initConst( ListClass* self );\r
+inline errnum_t ListClass_add( ListClass* self, ListElementClass* Element ); /* addFirst */\r
+ errnum_t ListClass_addAtIndex( ListClass* self, int Index, ListElementClass* Element );\r
+inline errnum_t ListClass_addFirst( ListClass* self, ListElementClass* Element );\r
+inline errnum_t ListClass_addLast( ListClass* self, ListElementClass* Element );\r
+inline int ListClass_getCount( ListClass* self );\r
+inline errnum_t ListClass_getData( ListClass* self, int Index, void* out_Data );\r
+ errnum_t ListClass_get( ListClass* self, int Index, ListElementClass** out_Element );\r
+ errnum_t ListClass_set( ListClass* self, int Index, ListElementClass* Element );\r
+ errnum_t ListClass_replace( ListClass* self, ListElementClass* RemovingElement, ListElementClass* AddingElement );\r
+inline errnum_t ListClass_getFirstData( ListClass* self, void* out_Data );\r
+inline errnum_t ListClass_getLastData( ListClass* self, void* out_Data );\r
+inline errnum_t ListClass_getFirst( ListClass* self, ListElementClass** out_Element );\r
+inline errnum_t ListClass_getLast( ListClass* self, ListElementClass** out_Element );\r
+ int ListClass_getIndexOfData( ListClass* self, void* Data );\r
+ int ListClass_getIndexOf( ListClass* self, ListElementClass* Element );\r
+ int ListClass_getLastIndexOfData( ListClass* self, void* Data );\r
+ errnum_t ListClass_getArray( ListClass* self, void* DataArray, size_t DataArraySize );\r
+ errnum_t ListClass_removeByIndex( ListClass* self, int Index );\r
+ errnum_t ListClass_remove( ListClass* self, ListElementClass* Element );\r
+inline errnum_t ListClass_removeFirst( ListClass* self );\r
+inline errnum_t ListClass_removeLast( ListClass* self );\r
+ errnum_t ListClass_clear( ListClass* self );\r
+inline errnum_t ListClass_push( ListClass* self, ListElementClass* Element );\r
+inline void* ListClass_popData( ListClass* self );\r
+inline ListElementClass* ListClass_pop( ListClass* self );\r
+inline errnum_t ListClass_enqueue( ListClass* self, ListElementClass* Element );\r
+inline void* ListClass_dequeueData( ListClass* self );\r
+inline ListElementClass* ListClass_dequeue( ListClass* self );\r
+inline errnum_t ListClass_getListIterator( ListClass* self, ListIteratorClass* out_Iterator );\r
+inline errnum_t ListClass_getDescendingListIterator( ListClass* self, ListIteratorClass* out_Iterator );\r
+\r
+inline void ListElementClass_initConst( ListElementClass* self, void* Data );\r
+\r
+void* ListIteratorClass_getNext( ListIteratorClass* self );\r
+void* ListIteratorClass_getPrevious( ListIteratorClass* self );\r
+errnum_t ListIteratorClass_replace( ListIteratorClass* self, ListElementClass* AddingElement );\r
+errnum_t ListIteratorClass_remove( ListIteratorClass* self );\r
+\r
+\r
+\r
+/* Implements of ListClass */\r
+errnum_t ListClass_addAt_Sub( ListElementClass* AddingElement, ListElementClass* Target );\r
+\r
+\r
+/*[ListClass_add]*/\r
+inline errnum_t ListClass_add( ListClass* self, ListElementClass* Element )\r
+{\r
+ return ListClass_addFirst( self, Element );\r
+}\r
+\r
+\r
+/*[ListClass_addFirst]*/\r
+inline errnum_t ListClass_addFirst( ListClass* self, ListElementClass* Element )\r
+{\r
+ return ListClass_addAt_Sub( Element, self->Terminator.Next );\r
+}\r
+\r
+\r
+/*[ListClass_addLast]*/\r
+inline errnum_t ListClass_addLast( ListClass* self, ListElementClass* Element )\r
+{\r
+ return ListClass_addAt_Sub( Element, &self->Terminator );\r
+}\r
+\r
+\r
+/*[ListClass_getCount]*/\r
+inline int ListClass_getCount( ListClass* self )\r
+{\r
+ return self->Count;\r
+}\r
+\r
+\r
+/*[ListClass_getData]*/\r
+inline errnum_t ListClass_getData( ListClass* self, int Index, void* out_Data )\r
+{\r
+ errnum_t e;\r
+ ListElementClass* target;\r
+\r
+ e= ListClass_get( self, Index, &target );\r
+ if ( e == 0 )\r
+ { *(void**) out_Data = target->Data; }\r
+ return e;\r
+}\r
+\r
+\r
+/*[ListClass_getFirstData]*/\r
+inline errnum_t ListClass_getFirstData( ListClass* self, void* out_Data )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return E_NOT_FOUND_SYMBOL;\r
+ }\r
+ else {\r
+ *(void**) out_Data = self->Terminator.Next->Data;\r
+ return 0;\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_getLastData]*/\r
+inline errnum_t ListClass_getLastData( ListClass* self, void* out_Data )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return E_NOT_FOUND_SYMBOL;\r
+ }\r
+ else {\r
+ *(void**) out_Data = self->Terminator.Previous->Data;\r
+ return 0;\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_getFirst]*/\r
+inline errnum_t ListClass_getFirst( ListClass* self, ListElementClass** out_Element )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return E_NOT_FOUND_SYMBOL;\r
+ }\r
+ else {\r
+ *out_Element = self->Terminator.Next;\r
+ return 0;\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_getLast]*/\r
+inline errnum_t ListClass_getLast( ListClass* self, ListElementClass** out_Element )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return E_NOT_FOUND_SYMBOL;\r
+ }\r
+ else {\r
+ *out_Element = self->Terminator.Previous;\r
+ return 0;\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_isExistData]*/\r
+inline bool ListClass_isExistData( ListClass* self, void* Data )\r
+{\r
+ return ( ListClass_getIndexOfData( self, Data ) != INVALID_ARRAY_INDEX );\r
+}\r
+\r
+\r
+/*[ListClass_removeFirst]*/\r
+inline errnum_t ListClass_removeFirst( ListClass* self )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return E_NOT_FOUND_SYMBOL;\r
+ }\r
+ else {\r
+ return ListClass_remove( self, self->Terminator.Next );\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_removeLast]*/\r
+inline errnum_t ListClass_removeLast( ListClass* self )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return E_NOT_FOUND_SYMBOL;\r
+ }\r
+ else {\r
+ return ListClass_remove( self, self->Terminator.Previous );\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_push]*/\r
+inline errnum_t ListClass_push( ListClass* self, ListElementClass* Element )\r
+{\r
+ return ListClass_addFirst( self, Element );\r
+}\r
+\r
+\r
+/*[ListClass_popData]*/\r
+inline void* ListClass_popData( ListClass* self )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return NULL;\r
+ }\r
+ else {\r
+ ListElementClass* element = self->Terminator.Next;\r
+\r
+ ListClass_remove( self, element );\r
+ return element->Data;\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_pop]*/\r
+inline ListElementClass* ListClass_pop( ListClass* self )\r
+{\r
+ if ( self->Count == 0 ) {\r
+ return NULL;\r
+ }\r
+ else {\r
+ ListElementClass* element = self->Terminator.Next;\r
+\r
+ ListClass_remove( self, element );\r
+ return element;\r
+ }\r
+}\r
+\r
+\r
+/*[ListClass_enqueue]*/\r
+inline errnum_t ListClass_enqueue( ListClass* self, ListElementClass* Element )\r
+{\r
+ return ListClass_addLast( self, Element );\r
+}\r
+\r
+\r
+/*[ListClass_dequeueData]*/\r
+inline void* ListClass_dequeueData( ListClass* self )\r
+{\r
+ return ListClass_popData( self );\r
+}\r
+\r
+\r
+/*[ListClass_dequeue]*/\r
+inline ListElementClass* ListClass_dequeue( ListClass* self )\r
+{\r
+ return ListClass_pop( self );\r
+}\r
+\r
+\r
+/*[ListClass_getListIterator]*/\r
+inline errnum_t ListClass_getListIterator( ListClass* self, ListIteratorClass* out_Iterator )\r
+{\r
+ out_Iterator->Element = &self->Terminator;\r
+ out_Iterator->ModifiedElement.List = NULL;\r
+ return 0;\r
+}\r
+\r
+\r
+/*[ListClass_getDescendingListIterator]*/\r
+inline errnum_t ListClass_getDescendingListIterator( ListClass* self, ListIteratorClass* out_Iterator )\r
+{\r
+ out_Iterator->Element = &self->Terminator;\r
+ out_Iterator->ModifiedElement.List = NULL;\r
+ return 0;\r
+}\r
+\r
+\r
+/*[ListElementClass_initConst]*/\r
+inline void ListElementClass_initConst( ListElementClass* self, void* Data )\r
+{\r
+ self->Data = Data;\r
+ self->List = NULL;\r
+\r
+ #ifndef NDEBUG\r
+ self->Next = NULL;\r
+ self->Previous = NULL;\r
+ #endif\r
+}\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [ListClass_forEach] >>> \r
+************************************************************************/\r
+#define ListClass_forEach( self, iterator, out_Element ) \\r
+ ListClass_forEach_1( self, iterator, out_Element ); \\r
+ ListClass_forEach_2( self, iterator, out_Element ); \\r
+ ListClass_forEach_3( self, iterator, out_Element )\r
+\r
+\r
+inline void ListClass_forEach_1( ListClass* self, ListIteratorClass* iterator, void* out_Element )\r
+{\r
+ ListClass_getListIterator( self, iterator );\r
+ *(void**) out_Element = ListIteratorClass_getNext( iterator );\r
+}\r
+\r
+\r
+inline bool ListClass_forEach_2( ListClass* self, ListIteratorClass* iterator, void* out_Element )\r
+{\r
+ UNREFERENCED_VARIABLE_2( self, iterator );\r
+ return ( *(void**) out_Element != NULL );\r
+}\r
+\r
+\r
+inline void ListClass_forEach_3( ListClass* self, ListIteratorClass* iterator, void* out_Element )\r
+{\r
+ UNREFERENCED_VARIABLE( self );\r
+ *(void**) out_Element = ListIteratorClass_getNext( iterator );\r
+}\r
+\r
+\r
+ \r
+/**************************************************************************\r
+ <<< [ListClass:ClassID] >>> \r
+***************************************************************************/\r
+errnum_t ListClass_finalizeWithVTable( ListClass* self, bool IsFreeElements, errnum_t e );\r
+errnum_t ListClass_printXML( ListClass* self, FILE* OutputStream );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [Variant_SuperClass] >>>\r
+************************************************************************/\r
+\r
+typedef struct _VariantClass VariantClass;\r
+\r
+typedef struct _Variant_SuperClass Variant_SuperClass;\r
+struct _Variant_SuperClass {\r
+\r
+ /* <Inherit parent="ClassID_SuperClass"> */\r
+ const ClassID_Class* ClassID;\r
+ /* </Inherit> */\r
+\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+};\r
+\r
+extern const ClassID_Class g_Variant_SuperClass_ID;\r
+errnum_t Variant_SuperClass_initialize( Variant_SuperClass* self, void* Parameter );\r
+errnum_t Variant_SuperClass_overwrite( Variant_SuperClass* self,\r
+ Variant_SuperClass* AddingElement );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [VariantClass] >>>\r
+- VariantClass* == Variant_SuperClass**\r
+************************************************************************/\r
+typedef struct _VariantClass VariantClass;\r
+ \r
+struct _VariantClass {\r
+ Variant_SuperClass* Object;\r
+ ListElementClass ListElement;\r
+};\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [VariantListClass] >>>\r
+************************************************************************/\r
+typedef struct _VariantListIteratorClass VariantListIteratorClass;\r
+typedef struct _Variant_SuperClass Variant_SuperClass;\r
+typedef struct _VariantListIteratorClass VariantListIteratorClass;\r
+\r
+typedef struct _VariantListClass VariantListClass;\r
+struct _VariantListClass {\r
+ ListClass /*<VariantClass>*/ List;\r
+};\r
+\r
+void VariantListClass_initConst( VariantListClass* self );\r
+/* VariantListClass_initialize is not exist */\r
+errnum_t VariantListClass_finalize( VariantListClass* self, errnum_t e );\r
+\r
+errnum_t VariantListClass_createElement( VariantListClass* self,\r
+ void* /*<Variant_SuperClass**>*/ out_ElementObject,\r
+ const ClassID_Class* ClassID, void* Parameter );\r
+\r
+errnum_t VariantListClass_destroyElement( VariantListClass* self,\r
+ void* /*<Variant_SuperClass**>*/ in_out_ElementObject, errnum_t e );\r
+\r
+errnum_t VariantListClass_getListIterator( VariantListClass* self,\r
+ VariantListIteratorClass* out_Iterator );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [VariantListIteratorClass] >>>\r
+************************************************************************/\r
+typedef struct _VariantListIteratorClass VariantListIteratorClass;\r
+struct _VariantListIteratorClass {\r
+ ListIteratorClass Iterator;\r
+};\r
+Variant_SuperClass* VariantListIteratorClass_getNext( VariantListIteratorClass* self );\r
+\r
+\r
+/*[VariantListClass_getListIterator]*/\r
+inline errnum_t VariantListClass_getListIterator( VariantListClass* self,\r
+ VariantListIteratorClass* out_Iterator )\r
+{\r
+ return ListClass_getListIterator( &self->List, &out_Iterator->Iterator );\r
+}\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [VariantListClass_forEach] >>>\r
+************************************************************************/\r
+#define VariantListClass_forEach( self, Iterator, out_Pointer ) \\r
+ VariantListClass_forEach_Sub1( self, Iterator, out_Pointer ); \\r
+ *(out_Pointer) != NULL; \\r
+ VariantListClass_forEach_Sub3( Iterator, out_Pointer )\r
+\r
+inline void VariantListClass_forEach_Sub1( VariantListClass* self,\r
+ VariantListIteratorClass* Iterator, void* out_Pointer )\r
+{\r
+ VariantListClass_getListIterator( self, Iterator );\r
+ *(void**) out_Pointer = VariantListIteratorClass_getNext( Iterator );\r
+}\r
+\r
+inline void VariantListClass_forEach_Sub3( \\r
+ VariantListIteratorClass* Iterator, void* out_Pointer )\r
+{\r
+ *(void**) out_Pointer = VariantListIteratorClass_getNext( Iterator );\r
+}\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PArray] >>> \r
+************************************************************************/\r
+typedef errnum_t (* CompareFuncType )( const void* ppLeft, const void* ppRight, const void* Param,\r
+ int* out_Result );\r
+\r
+int PArray_setFromArray( void* PointerArray, size_t PointerArraySize, void* out_ppRight,\r
+ void* SrcArray, size_t SrcArraySize, size_t SrcArrayElemSize );\r
+\r
+\r
+ \r
+errnum_t PArray_doShakerSort( const void* PointerArray, size_t PointerArraySize,\r
+ const void* ppLeft, const void* ppRight, CompareFuncType Compare, const void* Param );\r
+\r
+\r
+ \r
+errnum_t PArray_doBinarySearch( const void* PointerArray, size_t PointerArraySize,\r
+ const void* Key, CompareFuncType Compare, const void* Param,\r
+ int* out_FoundOrLeftIndex, int* out_CompareResult );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [DictionaryAA_Class] Dictionary using AA tree >>> \r
+************************************************************************/\r
+typedef struct _DictionaryAA_Class DictionaryAA_Class;\r
+typedef struct _DictionaryAA_NodeClass DictionaryAA_NodeClass;\r
+\r
+struct _DictionaryAA_Class {\r
+ DictionaryAA_NodeClass* Root;\r
+};\r
+\r
+\r
+/*[DictionaryAA_TraverseFuncType]*/\r
+typedef errnum_t (* DictionaryAA_TraverseFuncType )(\r
+ DictionaryAA_NodeClass* Node, void* UserParameter );\r
+\r
+void DictionaryAA_Class_initConst( DictionaryAA_Class* self );\r
+errnum_t DictionaryAA_Class_finalize( DictionaryAA_Class* self, errnum_t e );\r
+errnum_t DictionaryAA_Class_finalize2( DictionaryAA_Class* self, errnum_t e,\r
+ bool in_IsFreeItem, FinalizeFuncType in_Type_Finalize );\r
+/*errnum_t DictionaryAA_Class_freeAllKeysHeap( DictionaryAA_Class* self, errnum_t e );*/\r
+\r
+errnum_t DictionaryAA_Class_insert( DictionaryAA_Class* self, const TCHAR* Key,\r
+ DictionaryAA_NodeClass** out_Node );\r
+errnum_t DictionaryAA_Class_remove( DictionaryAA_Class* self, const TCHAR* Key );\r
+errnum_t DictionaryAA_Class_search( DictionaryAA_Class* self, const TCHAR* Key,\r
+ DictionaryAA_NodeClass** out_Node );\r
+bool DictionaryAA_Class_isExist( DictionaryAA_Class* self, const TCHAR* Key );\r
+errnum_t DictionaryAA_Class_traverse( DictionaryAA_Class* self,\r
+ DictionaryAA_TraverseFuncType Function, void* UserParameter );\r
+errnum_t DictionaryAA_Class_toEmpty( DictionaryAA_Class* self );\r
+errnum_t DictionaryAA_Class_getArray( DictionaryAA_Class* self,\r
+ TCHAR*** in_out_Strings, int* in_out_StringCount, NewStringsEnum in_HowToAllocate );\r
+errnum_t DictionaryAA_Class_print( DictionaryAA_Class* self, FILE* OutputStream );\r
+\r
+\r
+/*[DictionaryAA_Class_forEach]*/\r
+#define DictionaryAA_Class_forEach( in_out_Iterator, out_Node ) \\r
+ *(out_Node) = DictionaryAA_IteratorClass_getNext( in_out_Iterator ); \\r
+ *(out_Node) != NULL; \\r
+ *(out_Node) = DictionaryAA_IteratorClass_getNext( in_out_Iterator )\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [DictionaryAA_NodeClass] >>> \r
+************************************************************************/\r
+struct _DictionaryAA_NodeClass {\r
+ void* Item; /* User defined */\r
+\r
+ const TCHAR* Key; /* This is had by DictionaryAA_Class */\r
+ int Height;\r
+ DictionaryAA_NodeClass* Left;\r
+ DictionaryAA_NodeClass* Right;\r
+};\r
+\r
+extern DictionaryAA_NodeClass g_DictionaryAA_NullNode;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [DictionaryAA_IteratorClass] >>> \r
+************************************************************************/\r
+typedef struct _DictionaryAA_IteratorClass DictionaryAA_IteratorClass;\r
+struct _DictionaryAA_IteratorClass {\r
+ Set2 /*<DictionaryAA_NodeClass*>*/ Nodes;\r
+ DictionaryAA_NodeClass** NextNode;\r
+};\r
+\r
+void DictionaryAA_IteratorClass_initConst( DictionaryAA_IteratorClass* self );\r
+errnum_t DictionaryAA_IteratorClass_initialize( DictionaryAA_IteratorClass* self,\r
+ DictionaryAA_Class* Collection );\r
+errnum_t DictionaryAA_IteratorClass_finalize( DictionaryAA_IteratorClass* self, errnum_t e );\r
+\r
+DictionaryAA_NodeClass* DictionaryAA_IteratorClass_getNext(\r
+ DictionaryAA_IteratorClass* self );\r
+\r
+\r
+/*[DictionaryAA_IteratorClass_initConst]*/\r
+inline void DictionaryAA_IteratorClass_initConst( DictionaryAA_IteratorClass* self )\r
+{\r
+ Set2_initConst( &self->Nodes );\r
+}\r
+\r
+\r
+/*[DictionaryAA_IteratorClass_finalize]*/\r
+inline errnum_t DictionaryAA_IteratorClass_finalize( DictionaryAA_IteratorClass* self, errnum_t e )\r
+{\r
+ return Set2_finish( &self->Nodes, e );\r
+}\r
+\r
+\r
+ \r
+/*-------------------------------------------------------------------------*/\r
+/* <<<< ### (Set4) Class >>>> */ \r
+/*-------------------------------------------------------------------------*/\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_initConst] >>> \r
+*****************************************************************/\r
+#define Set4_initConst( self ) \\r
+ ( (self)->FirstBlock = NULL )\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_init] >>> \r
+*****************************************************************/\r
+#define Set4_init( self, type, HeapSize ) \\r
+ Set4_init_imp( self, sizeof(type), HeapSize )\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_finish] >>> \r
+*****************************************************************/\r
+#define Set4_finish( self, e, type, in_Type_Finalize ) \\r
+ ( (in_Type_Finalize) == NULL ? Set4_finish2_imp2( self ), e : \\r
+ ( Set4_finish2_imp( self, e, sizeof(type), in_Type_Finalize ), Set4_finish2_imp2( self ), e ) )\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_allocate] >>> \r
+*****************************************************************/\r
+#define Set4_allocate( self, out_ElementPointer ) \\r
+ Set4_alloc_imp( self, out_ElementPointer, sizeof(**(out_ElementPointer)) )\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_alloc] >>> \r
+*****************************************************************/\r
+#if 0\r
+#define Set4_alloc( self, pp, type ) \\r
+ Set4_alloc_imp( self, pp, sizeof(type) )\r
+#endif\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_free] >>> \r
+*****************************************************************/\r
+#define Set4_free( self, in_out_ElementPointer, e ) \\r
+ Set4_free_imp( self, in_out_ElementPointer, sizeof(**(in_out_ElementPointer)), e )\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_toEmpty] >>> \r
+*****************************************************************/\r
+#define Set4_toEmpty( self, type, type_finish ) \\r
+ ( Set4_finish2( self, type, type_finish ), \\r
+ (self)->FirstBlock = NULL, \\r
+ (self)->Next = (self)->CurrentBlockOver = &(self)->FirstBlock )\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_ref] >>> \r
+*****************************************************************/\r
+#define Set4_ref( self, i, type ) \\r
+ ( (type*) Set4_ref_imp( self, i, sizeof(type) ) )\r
+\r
+\r
+ \r
+/****************************************************************\r
+ <<< [Set4_getCount] >>> \r
+*****************************************************************/\r
+#define Set4_getCount( self, type ) \\r
+ Set4_getCount_imp( self, sizeof(type) )\r
+\r
+#if 0\r
+#define Set4_getN( self, type ) \\r
+ Set4_getCount_imp( self, sizeof(type) )\r
+#endif\r
\r
\r
\r
-/***********************************************************************\r
- <<< [SetBreakErrorID] >>> \r
-************************************************************************/\r
-#ifndef ERR2_ENABLE_ERROR_BREAK\r
- #if ! NDEBUG\r
- #define ERR2_ENABLE_ERROR_BREAK 1\r
- #else\r
- #define ERR2_ENABLE_ERROR_BREAK 0\r
- #endif\r
+/****************************************************************\r
+ <<< [Set4_forEach] >>> \r
+*****************************************************************/\r
+#define Set4_forEach( self, iter, ptr ) \\r
+ (iter)->p = NULL, Set4_forEach_imp2( self, iter, sizeof(**(ptr)) ); \\r
+ *(void**)(ptr) = (iter)->p, (iter)->p != NULL; \\r
+ Set4_forEach_imp2( self, iter, sizeof(**(ptr)) )\r
+\r
+#if 0\r
+#define Set4_forEach( self, iter, ptr, type ) \\r
+ (iter)->p = NULL, Set4_forEach_imp2( self, iter, sizeof(type) ); \\r
+ *(ptr) = (type*)(iter)->p, (iter)->p != NULL; \\r
+ Set4_forEach_imp2( self, iter, sizeof(type) )\r
#endif\r
\r
-#if ERR2_ENABLE_ERROR_BREAK\r
- /* "IF" is able to break at nearest code raising error */\r
- #define IF_D(x) IF(x)\r
- #define IF(x) \\r
- if( (x) && ( TryOnIfTrue_imp((const char*)__FILE__,__LINE__) ? (TestableDebugBreak(),1) : (1) ) )\r
+#define Set4_forEach_imp( self, ptr, size ) \\r
+ (ptr)->p = NULL, Set4_forEach_imp2( self, ptr, size ); \\r
+ (ptr)->p != NULL; \\r
+ Set4_forEach_imp2( self, ptr, size )\r
\r
- #define ASSERT_R( x, goto_err_or_Statement ) \\r
- __pragma(warning(push)) \\r
- __pragma(warning(disable:4127)) \\r
- do{ IF(!(x)) { goto_err_or_Statement; } } while(0) /* do-while is CERT standard PRE10-C */ \\r
- __pragma(warning(pop))\r
\r
- #define ASSERT_D( x, goto_err_or_Statement ) ASSERT_R( x, goto_err_or_Statement )\r
-#else\r
- #define IF(x) if(x)\r
- #define IF_D(x) \\r
- __pragma(warning(push)) \\r
- __pragma(warning(disable:4127)) \\r
- if(0) \\r
- __pragma(warning(pop))\r
+ \r
+/****************************************************************\r
+ <<< [Set4Iter_init] >>> \r
+*****************************************************************/\r
+#define Set4Iter_init( self, Set, pptr, type ) \\r
+ ( (self)->p = NULL, Set4_forEach_imp2( Set, self, sizeof(type) ), \\r
+ *(pptr) = (type*)((self)->p), ( (self)->p == NULL ? E_NO_NEXT : 0 ) )\r
\r
- #define ASSERT_R( x, goto_err_or_Statement ) \\r
- __pragma(warning(push)) \\r
- __pragma(warning(disable:4127)) \\r
- do{ if(!(x)) { goto_err_or_Statement; } }while(0) /* do-while is CERT standard PRE10-C */ \\r
- __pragma(warning(pop))\r
\r
- #define ASSERT_D( x, goto_err_or_Statement )\r
+ \r
+/****************************************************************\r
+ <<< [Set4Iter_next] >>> \r
+*****************************************************************/\r
+#define Set4Iter_next( self, Set, pptr, type ) \\r
+ ( Set4_forEach_imp2( Set, self, sizeof(type) ), \\r
+ *(pptr) = (type*)((self)->p), ( (self)->p == NULL ? E_NO_NEXT : 0 ) )\r
+\r
+\r
+ \r
+#ifdef __cplusplus\r
+ } /* End of C Symbol */ \r
+#endif\r
+#endif\r
+ \r
+/*=================================================================*/\r
+/* <<< [DebugTools/DebugTools.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+#if __cplusplus\r
+ extern "C" { /* Start of C Symbol */ \r
#endif\r
\r
\r
-#if ! ERR2_ENABLE_ERROR_BREAK\r
- inline void SetBreakErrorID( int ID ) { ID=ID; /* avoid warning */ }\r
- inline void ClearError() {}\r
- inline bool IsErrorMode() { return 0; }\r
- inline void IfErrThenBreak() {}\r
- typedef int ErrStackAreaClass; // dummy type\r
- #define PushErr( ErrStackArea ) UNREFERENCED_VARIABLES( ErrStackArea )\r
- #define PopErr( ErrStackArea ) UNREFERENCED_VARIABLES( ErrStackArea )\r
+#ifndef NDEBUG\r
+ #define NDEBUG_ERROR\r
#else\r
- void SetBreakErrorID( int ID );\r
- void ClearError(void);\r
- bool IsErrorMode(void);\r
- void IfErrThenBreak(void);\r
- typedef struct _Err2 ErrStackAreaClass;\r
- void PushErr( ErrStackAreaClass* ErrStackArea );\r
- void PopErr( ErrStackAreaClass* ErrStackArea );\r
+ #define NDEBUG_ERROR ___cut_NDEBUG_ERROR\r
+#endif\r
+\r
+ \r
+/**************************************************************************\r
+ <<< [DebugTools] >>> \r
+***************************************************************************/\r
+#ifndef NDEBUG\r
+ #define DEBUGTOOLS_USES 1\r
+#else\r
+ #define DEBUGTOOLS_USES 0\r
+#endif\r
\r
- int TryOnIfTrue_imp( const char* FilePath, int LineNum );\r
\r
- typedef struct _Err2 Err2;\r
- struct _Err2 {\r
- int ErrID;\r
- int BreakErrID;\r
- int IsErr;\r
- const char* FilePath;\r
- int LineNum;\r
- };\r
- dll_global_g_DebugBreakCount extern Err2 g_Err2;\r
+#if DEBUGTOOLS_USES\r
+typedef struct _DebugTools DebugTools;\r
+struct _DebugTools {\r
+ int m_BreakID;\r
+ int m_DisableBreakExceptID_plus1;\r
+ int m_ReturnValueOnBreak_minus1;\r
+ TCHAR* m_BreakByFName;\r
+};\r
+int Debug_setReturnValueOnBreak( int ID );\r
+int Debug_disableBreak( int iExceptID );\r
+int Debug_setBreakByFName( const TCHAR* Path );\r
+int Debug_onOpen( const TCHAR* Path );\r
#endif\r
\r
+ \r
+/***********************************************************************\r
+ <<< [HeapLogClass] >>> \r
+************************************************************************/\r
+void HeapLogClass_log( void* in_Address, size_t in_Size );\r
+int HeapLogClass_getID( const void* in_Address );\r
+void HeapLogClass_printID( const void* in_Address );\r
+void HeapLogClass_addWatch( int in_IndexNum, int in_AllocatedID, ptrdiff_t in_Offset,\r
+ uint32_t in_BreakValue, bool in_IsPrintf );\r
+void HeapLogClass_watch( int in_IndexNum );\r
+void* HeapLogClass_getWatchingAddress( int in_IndexNum );\r
+void HeapLogClass_finalize(void);\r
+\r
+enum { HeapLogClass_NotAllocatedID = -1 };\r
+\r
+\r
+ \r
+/**************************************************************************\r
+ <<< [g_DebugVar] >>> \r
+***************************************************************************/\r
+extern int g_DebugVar[10];\r
+\r
\r
\r
+/*[dll_global_g_DebugBreakCount]*/\r
+#ifndef dll_global_g_DebugBreakCount\r
+ #define dll_global_g_DebugBreakCount\r
+#endif\r
+ \r
/***********************************************************************\r
- <<< [ErrorMessage] >>> \r
+ <<< [TestableDebugBreak] >>> \r
************************************************************************/\r
-void Error4_printf( const TCHAR* format, ... );\r
-void Error4_getErrStr( int ErrNum, TCHAR* out_ErrStr, size_t ErrStrSize );\r
-void Error4_clear( int err_num );\r
-errnum_t SaveWindowsLastError(void);\r
+#define TestableDebugBreak() ( TestableDebugBreak_Sub() ? (DebugBreakR(),0) : 0 )\r
+int TestableDebugBreak_Sub(void);\r
+\r
+void SetTestableDebugBreak( bool IsEnableBreak );\r
+int GetDebugBreakCount(void);\r
+\r
+\r
+ \r
+#if __cplusplus\r
+ } /* End of C Symbol */ \r
+#endif\r
+\r
+\r
+ \r
+/*=================================================================*/\r
+/* <<< [StrT/StrT.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+#if __cplusplus\r
+ extern "C" { /* Start of C Symbol */ \r
+#endif\r
+\r
+errnum_t StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
+errnum_t StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
+TCHAR* StrT_chr( const TCHAR* String, TCHAR Key );\r
+TCHAR* StrT_chrs( const TCHAR* s, const TCHAR* keys );\r
+TCHAR* StrT_rstr( const TCHAR* String, const TCHAR* SearchStart, const TCHAR* Keyword,\r
+ void* NullConfig );\r
+TCHAR* StrT_chrNext( const TCHAR* in_Start, TCHAR in_KeyCharactor );\r
+TCHAR* StrT_skip( const TCHAR* s, const TCHAR* keys );\r
+TCHAR* StrT_rskip( const TCHAR* String, const TCHAR* SearchStart, const TCHAR* Keys,\r
+ void* NullConfig );\r
+bool StrT_isCIdentifier( TCHAR Character );\r
+TCHAR* StrT_searchOverOfCIdentifier( const TCHAR* Text );\r
+TCHAR* StrT_searchOverOfIdiom( const TCHAR* Text );\r
+int StrT_cmp_part( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
+ const TCHAR* StringB );\r
+int StrT_cmp_i_part( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
+ const TCHAR* StringB );\r
+int StrT_cmp_part2( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
+ const TCHAR* StringB_Start, const TCHAR* StringB_Over );\r
+#define TwoChar8( Character1, Character2 ) \\r
+ ( (Character1) + ( (Character2) << 8 ) )\r
+#define FourChar8( Character1, Character2, Character3, Character4 ) \\r
+ ( (Character1) + ( (Character2) << 8 ) + ( (Character3) << 16 ) + ( (Character4) << 24 ) )\r
\r
+inline errnum_t StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src )\r
+{\r
+ return stcpy_part_r( Dst, DstSize, _tcschr( Dst, _T('\0') ), NULL, Src, NULL );\r
+}\r
+\r
+\r
+ \r
+int StrT_searchPartStringIndex( const TCHAR* in_String, const TCHAR* in_StringOver,\r
+ const TCHAR** in_StringsArray, uint_fast32_t in_StringsArrayLength,\r
+ int in_DefaultIndex );\r
+ \r
+int StrT_searchPartStringIndexI( const TCHAR* in_String, const TCHAR* in_StringOver,\r
+ const TCHAR** in_StringsArray, uint_fast32_t in_StringsArrayLength,\r
+ int in_DefaultIndex );\r
+ \r
+errnum_t StrT_convStrToId( const TCHAR* str, const TCHAR** strs, const int* ids, int n, int default_id ); \r
+errnum_t StrT_convStrLeftToId( const TCHAR* Str, const TCHAR** Strs, const size_t* Lens, const int* Ids,\r
+ int CountOfStrs, TCHAR* Separeters, int DefaultId, TCHAR** out_PosOfLastOfStr );\r
+void* StrT_convPartStrToPointer( const TCHAR* StringStart, const TCHAR* StringOver,\r
+ const NameOnlyClass* Table, size_t TableSize, void* Default );\r
+TCHAR* StrT_convertNumToStr( int Number, const NameAndNumClass* Table, int TableCount,\r
+ const TCHAR* DefaultStr );\r
+ \r
+//[GetStringSizeFromPointer]\r
+inline size_t GetStringSizeFromPointer( void* String, size_t StringSize, void* Pointer )\r
+{\r
+ return (uintptr_t) String + StringSize - (uintptr_t) Pointer;\r
+}\r
\r
\r
/***********************************************************************\r
- <<< [DEBUG_TRUE, DEBUG_FALSE] >>> \r
+ <<< [StrT_Malloc] >>> \r
************************************************************************/\r
-#if ! NDEBUG\r
- #define DEBUG_TRUE 1\r
- #define DEBUG_FALSE 0\r
-#else\r
- #define DEBUG_TRUE __cut_on_debug =\r
- #define DEBUG_FALSE 0\r
+errnum_t MallocAndCopyString( const TCHAR** out_NewString, const TCHAR* SourceString );\r
+errnum_t MallocAndCopyString_char( const TCHAR** out_NewString, const char* SourceString );\r
+errnum_t MallocAndCopyStringByLength( const TCHAR** out_NewString, const TCHAR* SourceString,\r
+ unsigned CountOfCharacter );\r
+\r
+#ifndef _UNICODE\r
+ #define MallocAndCopyString_char MallocAndCopyString\r
#endif\r
\r
+errnum_t StrHS_insert( TCHAR** in_out_WholeString,\r
+ int in_TargetIndexInWholeString, int* out_NextWholeInWholeString,\r
+ const TCHAR* in_InsertString );\r
+errnum_t StrHS_printf( TCHAR** in_out_String, const TCHAR* in_Format, ... );\r
+errnum_t StrHS_printfV( TCHAR** in_out_String, const TCHAR* in_Format, va_list in_VaList );\r
+errnum_t StrHS_printfPart( TCHAR** in_out_String,\r
+ int in_IndexInString, int* out_NextIndexInString,\r
+ const TCHAR* in_Format, ... );\r
+errnum_t StrHS_printfPartV( TCHAR** in_out_String,\r
+ int in_IndexInString, int* out_NextIndexInString,\r
+ const TCHAR* in_Format, va_list in_VaList );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [StrT_Edit] >>> \r
+************************************************************************/\r
+errnum_t StrT_cutPart( TCHAR* in_out_String, TCHAR* in_StartOfCut, TCHAR* in_OverOfCut );\r
+errnum_t StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str );\r
+errnum_t StrT_cutLastOf( TCHAR* in_out_Str, TCHAR Charactor );\r
+errnum_t StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str, const TCHAR* CommentSign );\r
+errnum_t StrT_insert( TCHAR* in_out_WholeString, size_t in_MaxSize_of_WholeString,\r
+ TCHAR* in_out_Target_in_WholeString, TCHAR** out_NextTarget_in_WholeString,\r
+ const TCHAR* in_InsertString );\r
+errnum_t StrT_meltCmdLine( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pLine );\r
+errnum_t StrT_getExistSymbols( unsigned* out, bool bCase, const TCHAR* Str, const TCHAR* Symbols, ... );\r
+errnum_t StrT_replace1( TCHAR* in_out_String, TCHAR FromCharacter, TCHAR ToCharacter,\r
+ unsigned Opt );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [StrT_Edit2] >>> \r
+************************************************************************/\r
+errnum_t StrT_replace( TCHAR* Out, size_t OutSize, const TCHAR* In,\r
+ const TCHAR* FromStr, const TCHAR* ToStr, unsigned Opt );\r
+errnum_t StrT_changeToXML_Attribute( TCHAR* out_Str, size_t StrSize, const TCHAR* InputStr );\r
+errnum_t StrT_resumeFromXML_Attribute( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* XML_Attr );\r
+errnum_t StrT_changeToXML_Text( TCHAR* out_Str, size_t StrSize, const TCHAR* InputStr );\r
+\r
+enum { STR_1TIME = 1 };\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [W3CDTF] >>> \r
+************************************************************************/\r
+enum { W3CDTF_MAX_LENGTH = 27+3 }; /* \8f¬\90\943\8c\85 */\r
+enum { W3CDTF_CURRENT_TIME_ZONE = 9999 };\r
+\r
+errnum_t W3CDTF_fromSYSTEMTIME( TCHAR* out_W3CDTF, size_t W3CDTF_ByteSize,\r
+ const SYSTEMTIME* Time, int TimeZoneMinute );\r
+errnum_t W3CDTF_toSYSTEMTIME( const TCHAR* String, SYSTEMTIME* out_Time, int* out_BiasMinute );\r
+errnum_t W3CDTF_getTimeZoneDesignator( TCHAR* out_TZD, size_t TZD_ByteSize,\r
+ int BiasMinute );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [StrT_Path] >>> \r
+************************************************************************/\r
+enum { StrT_LocalPathMaxSize = 4096 };\r
+enum { MAX_LOCAL_PATH = 4096 };\r
+TCHAR* StrT_refFName( const TCHAR* s );\r
+TCHAR* StrT_refExt( const TCHAR* s );\r
+void StrT_cutFragmentInPath( TCHAR* in_out_Path );\r
+bool StrT_isFullPath( const TCHAR* s );\r
+\r
+errnum_t StrT_getFullPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+ TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
+errnum_t StrT_allocateFullPath( TCHAR** out_FullPath, const TCHAR* StepPath, TCHAR* BasePath );\r
+errnum_t StrT_getStepPath( TCHAR* out_StepPath, size_t StepPathSize,\r
+ const TCHAR* FullPath, const TCHAR* BasePath );\r
+errnum_t StrT_getParentFullPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+ TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
+errnum_t StrT_getBaseName_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+ TCHAR** out_StrLast, const TCHAR* SrcPath );\r
+errnum_t StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,\r
+ const TCHAR* BasePath, const TCHAR* AddName );\r
+errnum_t StrT_encodeToValidPath( TCHAR* out_Path, size_t in_OutPathSize, const TCHAR* in_Path, bool in_IsName );\r
+\r
+inline errnum_t StrT_getFullPath( TCHAR* out_FullPath, size_t FullPathSize,\r
+ const TCHAR* StepPath, const TCHAR* BasePath )\r
+{\r
+ return StrT_getFullPath_part( out_FullPath, FullPathSize, out_FullPath,\r
+ NULL, StepPath, BasePath );\r
+}\r
+\r
+inline errnum_t StrT_getParentFullPath( TCHAR* Str, size_t StrSize,\r
+ const TCHAR* SrcPath, const TCHAR* BasePath )\r
+{\r
+ return StrT_getParentFullPath_part( Str, StrSize, Str, NULL, SrcPath, BasePath );\r
+}\r
+\r
+inline errnum_t StrT_getBaseName( TCHAR* Str, size_t StrSize, const TCHAR* SrcPath )\r
+{\r
+ return StrT_getBaseName_part( Str, StrSize, Str, NULL, SrcPath );\r
+}\r
+\r
+\r
+ \r
+/**************************************************************************\r
+ <<< [Strs] >>> \r
+***************************************************************************/\r
+typedef struct _Strs Strs;\r
+struct _Strs {\r
+ byte_t* MemoryAddress; /* first memory = [ TCHAR* FirstStr | elem[] ], other memory = [ elem[] ] */\r
+ byte_t* MemoryOver;\r
+ byte_t* NextElem; /* elem = [ TCHAR* NextStr | TCHAR[] ] */\r
+ TCHAR** PointerToNextStrInPrevElem; /* first = &FirstStr, other = &NextStr */\r
+ TCHAR** Prev_PointerToNextStrInPrevElem;\r
+\r
+ Strs* FirstOfStrs;\r
+ Strs* NextStrs;\r
+};\r
+\r
+void Strs_initConst( Strs* m );\r
+errnum_t Strs_init( Strs* m );\r
+errnum_t Strs_finish( Strs* m, errnum_t e );\r
+errnum_t Strs_toEmpty( Strs* m );\r
+bool Strs_isInited( Strs* m );\r
+errnum_t Strs_add( Strs* m, const TCHAR* Str, const TCHAR** out_pAlloc );\r
+errnum_t Strs_addBinary( Strs* m, const TCHAR* Str, const TCHAR* StrOver, const TCHAR** out_AllocStr );\r
+errnum_t Strs_freeLast( Strs* m, TCHAR* AllocStr );\r
+errnum_t Strs_toEmpty( Strs* m );\r
+/* for ( Strs_forEach( Strs* m, TCHAR** in_out_Str ) ); */\r
+TCHAR* Strx_getFirst( Strs* m );\r
+TCHAR* Strx_getNext( Strs* m, TCHAR* Str );\r
+\r
+\r
+#define Strs_initConst( m ) ( (m)->MemoryAddress = NULL )\r
+#define Strs_isInited( m ) ( (m)->MemoryAddress != NULL )\r
+\r
+#define Strs_forEach( m, pStr ) \\r
+ *(pStr) = Strs_getFirst( m ); \\r
+ *(pStr) != NULL; \\r
+ *(pStr) = Strs_getNext( m, *(pStr) )\r
+\r
+#define Strs_getFirst( m ) \\r
+ ( *(TCHAR**) (m)->FirstOfStrs->MemoryAddress )\r
+\r
+#define Strs_getNext( m, p ) \\r
+ ( *( (TCHAR**)(p) - 1 ) )\r
+\r
+#define Strs_getFreeAddr( m ) ( (TCHAR*)( (m)->NextElem + sizeof(TCHAR*) ) )\r
+#define Strs_getFreeSize( m ) ( (m)->MemoryOver - (byte_t*)(m)->NextElem - sizeof(TCHAR*) )\r
+#define Strs_getFreeCount( m ) ( Strs_getFreeSize( m ) / sizeof(TCHAR) )\r
+#define Strs_expandCount( m, c ) ( Strs_expandSize( (m), (c) * sizeof(TCHAR) ) )\r
+errnum_t Strs_expandSize( Strs* m, size_t FreeSize );\r
+errnum_t Strs_commit( Strs* m, TCHAR* StrOver );\r
+errnum_t Strs_allocateArray( Strs* self, TCHAR*** out_PointerArray, int* out_Count );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [StrArr] >>> \r
+************************************************************************/\r
+typedef struct _StrArr StrArr;\r
+struct _StrArr {\r
+ Set2 Array; // array of TCHAR*\r
+ Strs Chars;\r
+};\r
+\r
+errnum_t StrArr_init( StrArr* m );\r
+errnum_t StrArr_finish( StrArr* m, errnum_t e );\r
+\r
+errnum_t StrArr_add( StrArr* m, const TCHAR* Str, int* out_I );\r
+errnum_t StrArr_commit( StrArr* m );\r
+errnum_t StrArr_fillTo( StrArr* m, int n, const TCHAR* Str );\r
+errnum_t StrArr_toEmpty( StrArr* m );\r
+\r
+#define StrArr_initConst( m ) Set2_initConst( &(m)->Array )\r
+#define StrArr_getFreeAddr( m ) Strs_getFreeAddr( &(m)->Chars )\r
+#define StrArr_getFreeSize( m ) Strs_getFreeSize( &(m)->Chars )\r
+#define StrArr_getFreeCount( m ) Strs_getFreeCount( &(m)->Chars )\r
+#define StrArr_expandSize( m, sz ) Strs_expandSize( &(m)->Chars, sz )\r
+#define StrArr_expandCount( m, c ) Strs_expandCount( &(m)->Chars, c )\r
+#define StrArr_getArray( m ) ((TCHAR**)(m)->Array.First)\r
+//#define StrArr_getN( m ) Set2_getCount( &(m)->Array, TCHAR* )\r
+#define StrArr_getCount( m ) Set2_getCount( &(m)->Array, TCHAR* )\r
+\r
\r
\r
/***********************************************************************\r
- <<< [DEBUG_CODE] >>> \r
+ <<< [StrArr_forEach] >>> \r
************************************************************************/\r
-#if ! NDEBUG\r
- #define DEBUG_CODE( expression ) \\r
- __pragma(warning(push)) \\r
- __pragma(warning(disable:4127)) \\r
- do { expression; } while(0) /* do-while is CERT standard PRE10-C */ \\r
- __pragma(warning(pop))\r
-#else\r
- #define DEBUG_CODE( expression ) /* no execute */\r
-#endif\r
+#define StrArr_forEach( self, Iterator, out_String ) \\r
+ StrArr_forEach_1( self, Iterator, out_String ); \\r
+ StrArr_forEach_2( Iterator ); \\r
+ StrArr_forEach_3( Iterator, out_String )\r
+\r
+/*[StrArrIterator]*/\r
+typedef struct _StrArrIterator StrArrIterator;\r
+struct _StrArrIterator {\r
+ const TCHAR** Pointer;\r
+ const TCHAR** PointerOver;\r
+};\r
\r
+inline void StrArr_forEach_1( StrArr* self, StrArrIterator* Iterator, const TCHAR** out_String )\r
+{\r
+ Iterator->Pointer = (const TCHAR**) self->Array.First;\r
+ Iterator->PointerOver = (const TCHAR**) self->Array.Next;\r
+ *out_String = *Iterator->Pointer;\r
+}\r
\r
- \r
-/***********************************************************************\r
- <<< [CHECK_ARG] >>> \r
-************************************************************************/\r
-#ifndef CHECK_ARG\r
- #define CHECK_ARG 1\r
-#endif\r
+inline bool StrArr_forEach_2( StrArrIterator* Iterator )\r
+{\r
+ return Iterator->Pointer < Iterator->PointerOver;\r
+}\r
\r
-/*[GetIsCheckArg][SetIsCheckArg]*/\r
-#if CHECK_ARG\r
-extern bool g_IsCheckArg;\r
-inline bool GetIsCheckArg(void) { return g_IsCheckArg; }\r
-inline void SetIsCheckArg( bool IsCheckArg ) { g_IsCheckArg = IsCheckArg; }\r
-#endif\r
+inline void StrArr_forEach_3( StrArrIterator* Iterator, const TCHAR** out_String )\r
+{\r
+ Iterator->Pointer += 1;\r
+ *out_String = *Iterator->Pointer;\r
+}\r
\r
\r
\r
/***********************************************************************\r
- <<< [INVALID_VALUE] >>> \r
+ <<< [CSV] >>> \r
************************************************************************/\r
-enum { INVALID_VALUE = 0xDEDEDEDE };\r
+errnum_t StrT_meltCSV( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pCSV );\r
+errnum_t StrArr_parseCSV( StrArr* m, const TCHAR* CSVLine );\r
+errnum_t StrT_parseCSV_f( const TCHAR* StringOfCSV, bit_flags32_t* out_ReadFlags, const TCHAR* Types, ... );\r
\r
\r
\r
/***********************************************************************\r
- <<< [DUMMY_INITIAL_VALUE] >>> \r
+ <<< [StrFile] Read Class >>> \r
************************************************************************/\r
-#ifndef NDEBUG\r
- enum { DUMMY_INITIAL_VALUE = 0xDEDEDEDE };\r
- enum { DUMMY_INITIAL_VALUE_8BIT = 0xDE };\r
- enum { DUMMY_INITIAL_VALUE_16BIT = 0xDEDE };\r
- #ifdef _UNICODE\r
- enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDEDE };\r
- #else\r
- enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDE - 0x100 }; /* 0x100 is to change to signed type */\r
- #endif\r
- /* Disable VC++ warning C4701 : local variable may be used without having been initialized */\r
- /* 0xDEDEDEDE means "not initialized" */\r
+ \r
+typedef struct _StrFile StrFile;\r
+struct _StrFile {\r
+ void* Buffer;\r
+ size_t BufferSize;\r
+ bool IsBufferInHeap;\r
+ bool IsTextMode;\r
+ int OffsetToHeapBlockFirst;\r
+ int CharSize;\r
+ void* Pointer; // (void*)0xFFFFFFFF = EOF\r
+};\r
+\r
+#define StrFile StrFile_BlackBox\r
+ \r
+typedef struct _StrFile_BlackBox StrFile;\r
+struct _StrFile_BlackBox {\r
+ uint8_t BlackBox[24];\r
+};\r
+ \r
+#undef StrFile\r
+static_assert_global( sizeof(StrFile) == sizeof(StrFile_BlackBox), "" );\r
+ \r
+enum {\r
+ STR_FILE_READ = 0,\r
+\r
+ STR_FILE_CHAR = 0x00,\r
+ STR_FILE_WCHAR = 0x10,\r
+#ifdef _UNICODE\r
+ STR_FILE_TCHAR = 0x10,\r
#else\r
- enum { DUMMY_INITIAL_VALUE = 0 };\r
- enum { DUMMY_INITIAL_VALUE_8BIT = 0 };\r
- enum { DUMMY_INITIAL_VALUE_16BIT = 0 };\r
- enum { DUMMY_INITIAL_VALUE_TCHAR = 0 };\r
- /* 0 reduces code size */\r
+ STR_FILE_TCHAR = 0x00,\r
#endif\r
\r
+ STR_FILE_TEXT = 0x00,\r
+ STR_FILE_BINARY = 0x01,\r
+};\r
+\r
+void StrFile_initConst( StrFile* self );\r
+errnum_t StrFile_init_fromStr( StrFile* self, TCHAR* LinkStr );\r
+errnum_t StrFile_init_fromSizedStructInStream( StrFile* self, HANDLE* Stream );\r
+errnum_t StrFile_init_withBuf( StrFile* self, void* LinkBuffer, size_t LinkBufferSize, int Flags );\r
+errnum_t StrFile_finish( StrFile* self, errnum_t e );\r
+errnum_t StrFile_isInited( StrFile* self );\r
+\r
+errnum_t StrFile_readLine( StrFile* self, TCHAR* out_Line, size_t LineSize );\r
+bool StrFile_isAtEndOfStream( StrFile* self );\r
+\r
\r
\r
/***********************************************************************\r
- <<< [MEMSET_TO_NOT_INIT] >>> \r
+ <<< [StrFile] Write Class >>> \r
************************************************************************/\r
-#ifndef USE_MEMSET_TO_NOT_INIT\r
- #if ! NDEBUG\r
- #define USE_MEMSET_TO_NOT_INIT 1\r
- #else\r
- #define USE_MEMSET_TO_NOT_INIT 0\r
- #endif\r
-#endif\r
\r
-#if USE_MEMSET_TO_NOT_INIT\r
- #define MEMSET_TO_NOT_INIT( Address, ByteSize ) memset( Address, 0xDE, ByteSize )\r
+errnum_t StrFile_init_toHeap( StrFile* self, int Flags );\r
+errnum_t StrFile_write( StrFile* self, const TCHAR* Text );\r
+errnum_t StrFile_writeBinary( StrFile* self, const void* Data, size_t DataSize );\r
+errnum_t StrFile_expandIfOver( StrFile* self, size_t DataSize );\r
+errnum_t StrFile_peekWrittenString( StrFile* self, TCHAR** out_String );\r
+errnum_t StrFile_peekWrittenStringW( StrFile* self, wchar_t** out_String );\r
+errnum_t StrFile_peekWrittenStringA( StrFile* self, char** out_String );\r
+errnum_t StrFile_pickupSizedStruct( StrFile* m, SizedStruct** out_Struct );\r
+errnum_t StrFile_moveSizedStructToStream( StrFile* self, HANDLE Stream );\r
+errnum_t StrFile_setPointer( StrFile* self, int OffsetOfPointer );\r
+errnum_t StrFile_getPointer( StrFile* self, int* out_OffsetOfPointer );\r
+\r
+\r
+#ifdef _UNICODE\r
+#define StrFile_peekWrittenString StrFile_peekWrittenStringW\r
#else\r
- #define MEMSET_TO_NOT_INIT( Address, ByteSize )\r
+#define StrFile_peekWrittenString StrFile_peekWrittenStringA\r
#endif\r
\r
- \r
-/***********************************************************************\r
- <<< [NAME_STR] >>> \r
-************************************************************************/\r
-#ifndef NAME_STR\r
- #if ! NDEBUG\r
- #define NAME_STR 1\r
- #else\r
- #define NAME_STR 0\r
- #endif\r
-#endif\r
\r
\r
/***********************************************************************\r
- <<< [UNREFERENCED_VARIABLES] >>> \r
+ <<< [SearchStringByBM_Class] >>> \r
************************************************************************/\r
-#ifdef __linux__\r
- #define UNREFERENCED_VARIABLE( x )\r
- #define UNREFERENCED_VARIABLES( x )\r
-#else\r
- #define UNREFERENCED_VARIABLE( x ) x = x\r
- #define UNREFERENCED_VARIABLES( x ) x\r
-#endif\r
+typedef struct _SearchStringByBM_Class SearchStringByBM_Class;\r
+struct _SearchStringByBM_Class {\r
+ const TCHAR* TextString;\r
+ int TextStringLength;\r
+ const TCHAR* Keyword;\r
+ int KeywordLastIndex;\r
+ int KeywordLastPosition; /* Index of TextString */\r
+ int* SkipArray;\r
+ TCHAR SkipArray_MinCharacter;\r
+ TCHAR SkipArray_MaxCharacter;\r
+};\r
+\r
+void SearchStringByBM_Class_initConst( SearchStringByBM_Class* self );\r
+errnum_t SearchStringByBM_Class_initialize( SearchStringByBM_Class* self,\r
+ const TCHAR* TextString, const TCHAR* Keyword );\r
+errnum_t SearchStringByBM_Class_initializeFromPart( SearchStringByBM_Class* self,\r
+ const TCHAR* TextString, size_t TextString_Length, const TCHAR* Keyword );\r
+errnum_t SearchStringByBM_Class_finalize( SearchStringByBM_Class* self, errnum_t e );\r
+errnum_t SearchStringByBM_Class_search( SearchStringByBM_Class* self, int* out_KeywordIndex );\r
+\r
+\r
+enum { SearchString_NotFound = -1 }; /*[SearchString_NotFound]*/\r
\r
\r
\r
/***********************************************************************\r
- <<< [Error4_VariablesClass] >>> \r
+ <<< [SearchStringByAC_Class] >>> \r
************************************************************************/\r
-typedef struct _Error4_VariablesClass Error4_VariablesClass;\r
-struct _Error4_VariablesClass {\r
- DWORD WindowsLastError;\r
+enum { SearchStringByAC_Fail = 0 }; /*[SearchStringByAC_Fail]*/\r
+enum { SearchStringByAC_RootState = 0 }; /*[SearchStringByAC_RootState]*/\r
+#if 0\r
+enum { SearchStringByAC_MaxCharacterCode = 0xFFFF }; /*[SearchStringByAC_MaxCharacterCode]*/\r
+#else\r
+enum { SearchStringByAC_MaxCharacterCode = 0xFF }; /*[SearchStringByAC_MaxCharacterCode]*/\r
+#endif\r
+typedef int16_t (* AC_GotoFunctionType )[ SearchStringByAC_MaxCharacterCode + 1 ];\r
+ /* Array of next_state[state][character] */\r
+\r
+typedef struct _SearchStringByAC_Class SearchStringByAC_Class;\r
+struct _SearchStringByAC_Class {\r
+ int StateNum;\r
+ const TCHAR* TextString;\r
+ unsigned TextStringLength;\r
+ int TextStringIndex;\r
+ const TCHAR** FoundKeywords;\r
+ int FoundKeywordsCount;\r
+ int FoundKeywordIndex;\r
+\r
+ Set2 GoToFunction; /* <AC_GotoFunctionType> Next state[ state ][ character ] */\r
+ int* FailureFunction; /* Next state[ state ] */\r
+ const TCHAR*** OutputFunction; /* TCHAR* OutputFunction.Keyword[ state ][ count ] */\r
+ int* OutputCount; /* int OutputFunction.Count[ state ] */\r
+ int16_t StateCount; /* newstate + 1 */\r
};\r
\r
-Error4_VariablesClass* Get_Error4_Variables(void);\r
-\r
-#ifdef _DEBUG\r
- extern Error4_VariablesClass* g_Error4_Variables;\r
-#endif\r
+void SearchStringByAC_Class_initConst( SearchStringByAC_Class* self );\r
+errnum_t SearchStringByAC_Class_initialize( SearchStringByAC_Class* self,\r
+ const TCHAR* TextString, const TCHAR** KeywordArray, size_t KeywordArrayCount );\r
+errnum_t SearchStringByAC_Class_initializeFromPart( SearchStringByAC_Class* self,\r
+ const TCHAR* TextString, size_t TextString_Length,\r
+ const TCHAR** KeywordArray, size_t KeywordArrayCount );\r
+errnum_t SearchStringByAC_Class_finalize( SearchStringByAC_Class* self, errnum_t e );\r
+errnum_t SearchStringByAC_Class_search( SearchStringByAC_Class* self,\r
+ int* out_TextStringIndex, TCHAR** out_Keyword );\r
+errnum_t SearchStringByAC_Class_setTextString( SearchStringByAC_Class* self,\r
+ const TCHAR* TextString );\r
+errnum_t SearchStringByAC_Class_setTextStringFromPart( SearchStringByAC_Class* self,\r
+ const TCHAR* TextString, size_t TextString_Length );\r
+inline const TCHAR* SearchStringByAC_Class_getTextString( SearchStringByAC_Class* self )\r
+ { return self->TextString; }\r
\r
\r
\r
#if __cplusplus\r
} /* End of C Symbol */ \r
#endif\r
+\r
\r
/*=================================================================*/\r
/* <<< [CRT_plus_2/CRT_plus_2.h] >>> */ \r
/*=================================================================*/\r
\r
/***********************************************************************\r
- <<< [MallocMemory] >>> \r
+ <<< [HeapMemory_allocate] >>> \r
+ <<< [HeapMemory_allocateArray] >>> \r
************************************************************************/\r
-inline errnum_t MallocMemory( void* out_MemoryAddress, size_t MemorySize )\r
+\r
+#define HeapMemory_allocate( out_Pointer ) \\r
+ HeapMemory_allocateBytes( out_Pointer, sizeof( **(out_Pointer) ) )\r
+\r
+#define HeapMemory_allocateArray( out_Pointer, Count ) \\r
+ HeapMemory_allocateBytes( out_Pointer, sizeof( **(out_Pointer) ) * (Count) )\r
+\r
+inline errnum_t HeapMemory_allocateBytes( void* out_Pointer, size_t MemorySize )\r
{\r
- void** out = (void**) out_MemoryAddress;\r
+ void** out = (void**) out_Pointer;\r
\r
*out = malloc( MemorySize );\r
\r
}\r
\r
\r
+/*[MallocMemory]*/\r
+inline errnum_t MallocMemory( void* out_MemoryAddress, size_t MemorySize )\r
+{\r
+ return HeapMemory_allocateBytes( out_MemoryAddress, MemorySize );\r
+}\r
+\r
+\r
\r
/***********************************************************************\r
- <<< [FreeMemory] >>> \r
+ <<< [HeapMemory_free] >>> \r
************************************************************************/\r
-inline errnum_t FreeMemory( void* in_out_MemoryAddress, errnum_t e )\r
+inline errnum_t HeapMemory_free( const void* in_out_MemoryAddress, errnum_t e )\r
{\r
void* address = *(void**) in_out_MemoryAddress;\r
\r
}\r
\r
\r
- \r
-/*=================================================================*/\r
-/* <<< [Print/Print2.h] >>> */ \r
-/*=================================================================*/\r
- \r
-#if __cplusplus\r
- extern "C" { /* Start of C Symbol */ \r
-#endif\r
- \r
-/***********************************************************************\r
- <<< [USE_printf_to] >>> \r
-************************************************************************/\r
-#define USE_printf_to_stdout 1\r
-#define USE_printf_to_debugger 2\r
-#define USE_printf_to_file 3\r
+/*[FreeMemory]*/\r
+inline errnum_t FreeMemory( const void* in_out_MemoryAddress, errnum_t e )\r
+{\r
+ return HeapMemory_free( in_out_MemoryAddress, e );\r
+}\r
\r
\r
\r
-/***********************************************************************\r
- <<< [PrintfCounterClass] >>> \r
-************************************************************************/\r
-#if USE_PRINTF_COUNTER\r
-\r
-typedef struct _PrintfCounterClass PrintfCounterClass;\r
-struct _PrintfCounterClass {\r
- int Count;\r
- int BreakCount;\r
- int BreakIndent;\r
+/**************************************************************************\r
+ <<< [Interface] >>> \r
+***************************************************************************/\r
+typedef struct _VTableDefine VTableDefine; /*[VTableDefine]*/\r
+struct _VTableDefine {\r
+ int m_IMethod;\r
+ void* m_method;\r
};\r
-extern PrintfCounterClass g_PrintfCounter;\r
-\r
-#endif\r
-\r
\r
- \r
-/***********************************************************************\r
- <<< [printf_to_debugger] >>> \r
-************************************************************************/\r
-void printf_to_debugger( const char* fmt, ... );\r
-void wprintf_to_debugger( const wchar_t* fmt, ... );\r
+#define VTable_Obj( i ) ( (void*) ( (char*)(i) - (*(i))->m_Offset ) ) /*[VTable_Obj]*/\r
+#define VTable_Method( i, m_method ) (*(i))->m_method /*[VTable_Method]*/\r
\r
-#ifndef USE_printf_to\r
- #ifdef __linux__\r
- #define USE_printf_to USE_printf_to_stdout\r
- #else\r
- #define USE_printf_to USE_printf_to_debugger\r
- #endif\r
+#ifdef __cplusplus\r
+extern "C" {\r
#endif\r
\r
-#if USE_printf_to == USE_printf_to_debugger\r
- #define printf printf_to_debugger\r
- #define wprintf wprintf_to_debugger\r
+errnum_t DefaultFunction( void* a );\r
+errnum_t DefaultFunction_NotImplementYet( void* a );\r
+//errnum_t DefaultFunction_Finish( void* a, errnum_t e );\r
+errnum_t DefaultFunction_Finalize( void* a, errnum_t e );\r
\r
- #undef _tprintf\r
- #if UNICODE\r
- #define _tprintf wprintf_to_debugger\r
- #else\r
- #define _tprintf printf_to_debugger\r
- #endif\r
-#endif\r
+errnum_t VTableDefine_overwrite( VTableDefine* aVTable, size_t aVTable_ByteSize, int iMethod, void* Func );\r
\r
- \r
-errnum_t vsprintf_r( char* s, size_t s_size, const char* format, va_list va ); \r
- \r
-errnum_t vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va ); \r
- \r
-/*[vstprintf_r]*/\r
-#if defined(_UNICODE) \r
- #define vstprintf_r vswprintf_r\r
-#else\r
- #define vstprintf_r vsprintf_r\r
-#endif\r
- \r
-errnum_t stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... ); \r
- \r
-errnum_t stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last, \r
- const TCHAR* src, const TCHAR* src_over );\r
-errnum_t stprintf_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,\r
- const TCHAR* format, ... );\r
- \r
-#if __cplusplus\r
- } /* End of C Symbol */ \r
+#ifdef __cplusplus\r
+}\r
#endif\r
\r
+\r
\r
/*=================================================================*/\r
-/* <<< [SetX/SetX.h] >>> */ \r
+/* <<< [Error4/Error4.h] >>> */ \r
/*=================================================================*/\r
\r
-#ifndef __SETX_H \r
-#define __SETX_H\r
-\r
-#ifdef __cplusplus\r
- extern "C" { /* Start of C Symbol */\r
+#if __cplusplus\r
+ extern "C" { /* Start of C Symbol */ \r
#endif\r
\r
+\r
\r
/***********************************************************************\r
- <<< [Set2] >>> \r
+ <<< [SetBreakErrorID] >>> \r
************************************************************************/\r
-typedef struct _Set2 Set2;\r
-struct _Set2 {\r
- void* First;\r
- void* Next;\r
- void* Over;\r
+#ifndef ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+ #if ! NDEBUG\r
+ #define ENABLE_ERROR_BREAK_IN_ERROR_CLASS 1\r
+ #else\r
+ #define ENABLE_ERROR_BREAK_IN_ERROR_CLASS 0\r
+ #endif\r
+#endif\r
\r
- #ifdef _DEBUG\r
- void** PointerOfDebugArray; /* void<type> */\r
+#ifndef ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS\r
+ #if ! NDEBUG\r
+ #define ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS 1\r
+ #else\r
+ #define ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS 0\r
#endif\r
-};\r
+#endif\r
\r
-#define Set2_initConst( m ) ( (m)->First = NULL, (m)->Next = NULL )\r
-int Set2_init( Set2* m, int FirstSize );\r
-int Set2_finish( Set2* m, int e );\r
-#define Set2_isInited( m ) ( (m)->First != NULL )\r
+#ifndef IS_MULTI_THREAD_ERROR_CLASS\r
+ \r
+ #define IS_MULTI_THREAD_ERROR_CLASS 0 /*[IS_MULTI_THREAD_ERROR_CLASS]:single*/\r
+ \r
+#endif\r
\r
-#define Set2_alloc( m, pp, type ) \\r
- Set2_alloc_imp( m, (void*)(pp), sizeof(type) )\r
+#ifndef NDEBUG\r
+ #define ERR2_ENABLE_ERROR_LOG 1\r
+#else\r
+ #define ERR2_ENABLE_ERROR_LOG 0\r
+#endif\r
\r
-int Set2_alloc_imp( Set2* m, void* pm, size_t size );\r
+/*[dll_global_g_Error]*/\r
+#ifndef dll_global_g_Error\r
+ #define dll_global_g_Error\r
+#endif\r
\r
-#define Set2_freeLast( m, p, type, e ) \\r
- ( ((char*)(m)->Next - sizeof(type) == (char*)(p)) ? \\r
- (m)->Next = (p), (e) : \\r
- ((e)?(e):E_OTHERS) )\r
\r
-#define Set2_toEmpty( m ) \\r
- ( (m)->Next = (m)->First, 0 )\r
+#if ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+ /*[IF][IF_D][ASSERT_R][ASSERT_D]*/\r
+ /* "IF" is able to break at nearest code raising error */\r
+ #define IF_D(x) IF(x)\r
+ #define IF(x) \\r
+ if( (x) && ( OnRaisingError_Sub((const char*)__FILE__,__LINE__) ? (DebugBreakR(),1) : (1) ) )\r
\r
-#define Set2_expandIfOverByAddr( m, OverAddrBasedOnNowFirst ) \\r
- ( (void*)(OverAddrBasedOnNowFirst) <= (m)->Over ? 0 : \\r
- Set2_expandIfOverByAddr_imp( m, OverAddrBasedOnNowFirst ) )\r
+ #define ASSERT_R( x, goto_err_or_Statement ) \\r
+ __pragma(warning(push)) \\r
+ __pragma(warning(disable:4127)) \\r
+ do{ IF(!(x)) { goto_err_or_Statement; } } while(0) /* do-while is CERT standard PRE10-C */ \\r
+ __pragma(warning(pop))\r
\r
-#define Set2_expandIfOverByOffset( m, Size ) \\r
- Set2_expandIfOverByAddr( m, (char*)(m)->First + (Size) )\r
-int Set2_expandIfOverByAddr_imp( Set2* m, void* OverAddrBasedOnNowFirst );\r
+ #define ASSERT_D( x, goto_err_or_Statement ) ASSERT_R( x, goto_err_or_Statement )\r
+#else\r
+ #define IF(x) if(x)\r
+ #define IF_D(x) \\r
+ __pragma(warning(push)) \\r
+ __pragma(warning(disable:4127)) \\r
+ if(0) \\r
+ __pragma(warning(pop))\r
\r
-#define Set2_allocMulti( m, out_pElem, ElemType, nElem ) \\r
- Set2_allocMulti_sub( m, (void*)(out_pElem), sizeof(ElemType) * (nElem) )\r
-int Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize );\r
+ #define ASSERT_R( x, goto_err_or_Statement ) \\r
+ __pragma(warning(push)) \\r
+ __pragma(warning(disable:4127)) \\r
+ do{ if(!(x)) { goto_err_or_Statement; } }while(0) /* do-while is CERT standard PRE10-C */ \\r
+ __pragma(warning(pop))\r
\r
-#define Set2_forEach( self, Item, Item_Over, Type ) \\r
- *(Item) = (Type*)( (self)->First ), *(Item_Over) = (Type*)( (self)->Next ); \\r
- *(Item) < *(Item_Over); \\r
- *(Item) += 1\r
+ #define ASSERT_D( x, goto_err_or_Statement )\r
+#endif\r
\r
-#define Set2_ref( m, iElem, out_pElem, ElemType ) \\r
- Set2_ref_imp( m, iElem, out_pElem, sizeof(ElemType) )\r
\r
-int Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize );\r
+void DebugBreakR(void);\r
+#if ! ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+ inline void SetBreakErrorID( int ID ) { ID=ID; /* avoid warning */ }\r
+ inline void ClearError() {}\r
+ inline void IfErrThenBreak() {}\r
+ typedef int ErrStackAreaClass; // dummy type\r
+ inline void PushErr( ErrStackAreaClass* ErrStackArea ) { UNREFERENCED_VARIABLE( ErrStackArea ); }\r
+ inline void PopErr( ErrStackAreaClass* ErrStackArea ) { UNREFERENCED_VARIABLE( ErrStackArea ); }\r
+#else\r
+ void SetBreakErrorID( int ID );\r
+ void ClearError(void);\r
+ void IfErrThenBreak(void);\r
+ typedef struct _ErrorClass ErrStackAreaClass;\r
+ void PushErr( ErrStackAreaClass* ErrStackArea );\r
+ void PopErr( ErrStackAreaClass* ErrStackArea );\r
\r
-#define Set2_getCount( m, Type ) \\r
- ( (Type*)(m)->Next - (Type*)(m)->First )\r
+ bool OnRaisingError_Sub( const char* FilePath, int LineNum );\r
\r
-#define Set2_checkPtrInArr( m, p ) \\r
- ( (m)->First <= (p) && (p) < (m)->Over ? 0 : E_NOT_FOUND_SYMBOL )\r
+ typedef struct _ErrorClass ErrorClass; /*[ErrorClass]*/\r
+ struct _ErrorClass {\r
+ bool IsError;\r
+ #if ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS\r
+ int ErrorID;\r
+ #endif\r
+ int BreakErrorID;\r
+ const char* FilePath;\r
+ int LineNum;\r
\r
-int Set2_separate( Set2* m, int NextSize, void** allocate_Array );\r
+ #if IS_MULTI_THREAD_ERROR_CLASS\r
+ FinalizerClass Finalizer;\r
+ #if ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS\r
+ DWORD ThreadID;\r
+ int GlobalErrorID;\r
+ #endif\r
+ #endif\r
+ };\r
+ errnum_t ErrorClass_finalize( ErrorClass* self, errnum_t e );\r
\r
-#ifdef _DEBUG\r
-void Set2_setDebug( Set2* m, void** PointerOfDebugArray );\r
+ #if ! IS_MULTI_THREAD_ERROR_CLASS\r
+ dll_global_g_Error extern ErrorClass g_Error;\r
+ #endif\r
#endif\r
\r
+errnum_t MergeError( errnum_t e, errnum_t ee );\r
+void ErrorLog_add( errnum_t e );\r
+\r
+\r
\r
-#ifdef __cplusplus\r
- } /* End of C Symbol */ \r
-#endif\r
-#endif\r
+/***********************************************************************\r
+ <<< [ErrorMessage] >>> \r
+************************************************************************/\r
+void Error4_printf( const TCHAR* format, ... );\r
+void Error4_getErrStr( int ErrNum, TCHAR* out_ErrStr, size_t ErrStrSize );\r
+void Error4_clear( int err_num );\r
+errnum_t SaveWindowsLastError(void);\r
+\r
+\r
\r
-/*=================================================================*/\r
-/* <<< [StrT/StrT.h] >>> */ \r
-/*=================================================================*/\r
+/***********************************************************************\r
+ <<< [stdio] >>> \r
+************************************************************************/\r
+void Error4_showToStdErr( int err_num );\r
+void Error4_showToStdIO( FILE* out, int err_num );\r
+\r
+\r
\r
-#if __cplusplus\r
- extern "C" { /* Start of C Symbol */ \r
+/***********************************************************************\r
+ <<< [DEBUG_TRUE, DEBUG_FALSE] >>> \r
+************************************************************************/\r
+#if ! NDEBUG\r
+ #define DEBUG_TRUE 1\r
+ #define DEBUG_FALSE 0\r
+#else\r
+ #define DEBUG_TRUE __cut_on_debug =\r
+ #define DEBUG_FALSE 0\r
#endif\r
\r
-errnum_t StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
-errnum_t StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
-TCHAR* StrT_chrs( const TCHAR* s, const TCHAR* keys );\r
-TCHAR* StrT_skip( const TCHAR* s, const TCHAR* keys );\r
\r
-inline errnum_t StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src )\r
-{\r
- return stcpy_part_r( Dst, DstSize, _tcschr( Dst, _T('\0') ), NULL, Src, NULL );\r
-}\r
+ \r
+/***********************************************************************\r
+ <<< [DEBUG_CODE] >>> \r
+************************************************************************/\r
+#if ! NDEBUG\r
+ #define DEBUG_CODE( expression ) \\r
+ __pragma(warning(push)) \\r
+ __pragma(warning(disable:4127)) \\r
+ do { expression; } while(0) /* do-while is CERT standard PRE10-C */ \\r
+ __pragma(warning(pop))\r
+#else\r
+ #define DEBUG_CODE( expression ) /* no execute */\r
+#endif\r
\r
\r
\r
/***********************************************************************\r
- <<< [StrT_Malloc] >>> \r
+ <<< [CHECK_ARG] >>> \r
************************************************************************/\r
-errnum_t MallocAndCopyString( TCHAR** out_NewString, const TCHAR* SourceString );\r
-errnum_t MallocAndCopyString_char( TCHAR** out_NewString, const char* SourceString );\r
-errnum_t MallocAndCopyStringByLength( TCHAR** out_NewString, const TCHAR* SourceString,\r
- unsigned CountOfCharacter );\r
+#ifndef CHECK_ARG\r
+ #define CHECK_ARG 1\r
+#endif\r
\r
-#ifndef _UNICODE\r
- #define MallocAndCopyString_char MallocAndCopyString\r
+/*[GetIsCheckArg][SetIsCheckArg]*/\r
+#if CHECK_ARG\r
+extern bool g_IsCheckArg;\r
+inline bool GetIsCheckArg(void) { return g_IsCheckArg; }\r
+inline void SetIsCheckArg( bool IsCheckArg ) { g_IsCheckArg = IsCheckArg; }\r
#endif\r
\r
+\r
\r
/***********************************************************************\r
- <<< [StrT_Edit] >>> \r
+ <<< [INVALID_VALUE] >>> \r
************************************************************************/\r
-errnum_t StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str );\r
-errnum_t StrT_cutLastOf( TCHAR* in_out_Str, TCHAR Charactor );\r
-errnum_t StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str, const TCHAR* CommentSign );\r
-errnum_t StrT_meltCmdLine( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pLine );\r
-errnum_t StrT_getExistSymbols( unsigned* out, bool bCase, const TCHAR* Str, const TCHAR* Symbols, ... );\r
-errnum_t StrT_replace1( TCHAR* in_out_String, TCHAR FromCharacter, TCHAR ToCharacter,\r
- unsigned Opt );\r
+enum { INVALID_VALUE = 0xDEDEDEDE };\r
\r
\r
\r
/***********************************************************************\r
- <<< [StrT_Path] >>> \r
+ <<< [DUMMY_INITIAL_VALUE] >>> \r
************************************************************************/\r
-enum { StrT_LocalPathMaxSize = 4096 };\r
-enum { MAX_LOCAL_PATH = 4096 };\r
-TCHAR* StrT_refFName( const TCHAR* s );\r
-TCHAR* StrT_refExt( const TCHAR* s );\r
-bool StrT_isAbsPath( const TCHAR* s );\r
-\r
-errnum_t StrT_getAbsPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
- TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
-errnum_t StrT_getStepPath( TCHAR* out_StepPath, size_t StepPathSize,\r
- const TCHAR* AbsPath, const TCHAR* BasePath );\r
-errnum_t StrT_getParentAbsPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
- TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
-errnum_t StrT_getBaseName_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
- TCHAR** out_StrLast, const TCHAR* SrcPath );\r
-errnum_t StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,\r
- const TCHAR* BasePath, const TCHAR* AddName );\r
+#ifndef NDEBUG\r
+ enum { DUMMY_INITIAL_VALUE = 0xDEDEDEDE };\r
+ enum { DUMMY_INITIAL_VALUE_8BIT = 0xDE };\r
+ enum { DUMMY_INITIAL_VALUE_16BIT = 0xDEDE };\r
+ #ifdef _UNICODE\r
+ enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDEDE };\r
+ #else\r
+ enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDE - 0x100 }; /* 0x100 is to change to signed type */\r
+ #endif\r
+ /* Disable VC++ warning C4701 : local variable may be used without having been initialized */\r
+ /* 0xDEDEDEDE means "not initialized" */\r
+#else\r
+ enum { DUMMY_INITIAL_VALUE = 0 };\r
+ enum { DUMMY_INITIAL_VALUE_8BIT = 0 };\r
+ enum { DUMMY_INITIAL_VALUE_16BIT = 0 };\r
+ enum { DUMMY_INITIAL_VALUE_TCHAR = 0 };\r
+ /* 0 reduces code size */\r
+#endif\r
\r
-inline errnum_t StrT_getAbsPath( TCHAR* out_AbsPath, size_t AbsPathSize,\r
- const TCHAR* StepPath, const TCHAR* BasePath )\r
-{\r
- return StrT_getAbsPath_part( out_AbsPath, AbsPathSize, out_AbsPath, NULL, StepPath, BasePath );\r
-}\r
\r
-inline errnum_t StrT_getParentAbsPath( TCHAR* Str, size_t StrSize,\r
- const TCHAR* SrcPath, const TCHAR* BasePath )\r
-{\r
- return StrT_getParentAbsPath_part( Str, StrSize, Str, NULL, SrcPath, BasePath );\r
-}\r
+ \r
+/***********************************************************************\r
+ <<< [DISCARD_STRUCT] >>> \r
+ <<< [DISCARD_ARRAY] >>> \r
+ <<< [DISCARD_BYTES] >>> \r
+ <<< [MEMSET_TO_NOT_INIT] >>> \r
+************************************************************************/\r
+#ifndef ENABLE_DISCARD_STRUCT\r
+ #if ! NDEBUG\r
+ #define ENABLE_DISCARD_STRUCT 1\r
+ #else\r
+ #define ENABLE_DISCARD_STRUCT 0\r
+ #endif\r
+#endif\r
\r
-inline errnum_t StrT_getBaseName( TCHAR* Str, size_t StrSize, const TCHAR* SrcPath )\r
-{\r
- return StrT_getBaseName_part( Str, StrSize, Str, NULL, SrcPath );\r
-}\r
+#if USE_MEMSET_TO_NOT_INIT\r
+ #define DISCARD_STRUCT( TypedAddress ) \\r
+ memset( TypedAddress, 0xDE, sizeof(*(TypedAddress)) )\r
+ #define DISCARD_ARRAY( TypedAddress, Count ) \\r
+ memset( TypedAddress, 0xDE, sizeof(*(TypedAddress)) * (Count) )\r
+ #define DISCARD_BYTES( Address, ByteSize ) memset( Address, 0xDE, ByteSize )\r
+// #define MEMSET_TO_NOT_INIT( Address, ByteSize ) memset( Address, 0xDE, ByteSize )\r
+#else\r
+ #define DISCARD_STRUCT( Address ) __noop()\r
+ #define DISCARD_ARRAY( Address, Count ) __noop()\r
+ #define DISCARD_BYTES( Address, ByteSize ) __noop()\r
+// #define MEMSET_TO_NOT_INIT( Address, ByteSize ) __noop()\r
+#endif\r
\r
\r
\r
-/**************************************************************************\r
- <<< [Strs] >>> \r
-***************************************************************************/\r
-typedef struct _Strs Strs;\r
-struct _Strs {\r
- char* MemoryAddress; /* first memory = [ TCHAR* FirstStr | elem[] ], other memory = [ elem[] ] */\r
- char* MemoryOver;\r
- char* NextElem; /* elem = [ TCHAR* NextStr | TCHAR[] ] */\r
- TCHAR** PointerToNextStrInPrevElem; /* first = &FirstStr, other = &NextStr */\r
- TCHAR** Prev_PointerToNextStrInPrevElem;\r
+/***********************************************************************\r
+ <<< [NAME_STR] >>> \r
+************************************************************************/\r
+#ifndef NAME_STR\r
+ #if ! NDEBUG\r
+ #define NAME_STR 1\r
+ #else\r
+ #define NAME_STR 0\r
+ #endif\r
+#endif\r
\r
- Strs* FirstOfStrs;\r
- Strs* NextStrs;\r
+ \r
+/***********************************************************************\r
+ <<< [Error4_VariablesClass] >>> \r
+************************************************************************/\r
+typedef struct _Error4_VariablesClass Error4_VariablesClass;\r
+struct _Error4_VariablesClass {\r
+ DWORD WindowsLastError;\r
};\r
\r
-void Strs_initConst( Strs* m );\r
-errnum_t Strs_init( Strs* m );\r
-errnum_t Strs_finish( Strs* m, errnum_t e );\r
-errnum_t Strs_toEmpty( Strs* m );\r
-bool Strs_isInited( Strs* m );\r
-errnum_t Strs_add( Strs* m, const TCHAR* Str, const TCHAR** out_pAlloc );\r
-errnum_t Strs_addBinary( Strs* m, const TCHAR* Str, const TCHAR* StrOver, const TCHAR** out_AllocStr );\r
-errnum_t Strs_freeLast( Strs* m, TCHAR* AllocStr );\r
-errnum_t Strs_toEmpty( Strs* m );\r
-/* for ( Strs_forEach( Strs* m, TCHAR** in_out_Str ) ); */\r
-TCHAR* Strx_getFirst( Strs* m );\r
-TCHAR* Strx_getNext( Strs* m, TCHAR* Str );\r
+Error4_VariablesClass* Get_Error4_Variables(void);\r
\r
+#ifdef _DEBUG\r
+ extern Error4_VariablesClass* g_Error4_Variables;\r
+#endif\r
\r
-#define Strs_initConst( m ) ( (m)->MemoryAddress = NULL )\r
-#define Strs_isInited( m ) ( (m)->MemoryAddress != NULL )\r
\r
-#define Strs_forEach( m, pStr ) \\r
- *(pStr) = Strs_getFirst( m ); \\r
- *(pStr) != NULL; \\r
- *(pStr) = Strs_getNext( m, *(pStr) )\r
+ \r
+#if __cplusplus\r
+ } /* End of C Symbol */ \r
+#endif\r
+ \r
+/*=================================================================*/\r
+/* <<< [Expat/Expat_incude.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+#ifndef __EXPAT_H\r
+#define __EXPAT_H\r
\r
-#define Strs_getFirst( m ) \\r
- ( *(TCHAR**) (m)->FirstOfStrs->MemoryAddress )\r
+#define XML_STATIC /* [SETTING] define or not define. if not define, deploy libexpat(w).dll */\r
\r
-#define Strs_getNext( m, p ) \\r
- ( *( (TCHAR**)(p) - 1 ) )\r
\r
-#define Strs_getFreeAddr( m ) ( (TCHAR*)( (m)->NextElem + sizeof(TCHAR*) ) )\r
-#define Strs_getFreeSize( m ) ( (m)->MemoryOver - (char*)(m)->NextElem - sizeof(TCHAR*) )\r
-#define Strs_getFreeCount( m ) ( Strs_getFreeSize( m ) / sizeof(TCHAR) )\r
-#define Strs_expandCount( m, c ) ( Strs_expandSize( (m), (c) * sizeof(TCHAR) ) )\r
-errnum_t Strs_expandSize( Strs* m, size_t FreeSize );\r
-errnum_t Strs_commit( Strs* m, TCHAR* StrOver );\r
+// reference: README.txt : * Special note about MS VC++ and runtime libraries\r
+#if _UNICODE\r
+ #define XML_UNICODE_WCHAR_T\r
+ #if defined(XML_STATIC)\r
+ #if _MT\r
+ #if _DLL // Visual C++ /MD option, MSVCP**.DLL\r
+ #pragma comment(lib, "libexpatwMD.lib") // not supplied\r
+ #else // Visual C++ /MT option\r
\r
- \r
-/***********************************************************************\r
- <<< [StrArr] >>> \r
-************************************************************************/\r
-typedef struct _StrArr StrArr;\r
-struct _StrArr {\r
- Set2 Array; // array of TCHAR*\r
- Strs Chars;\r
-};\r
+ #pragma comment(lib, "libexpatwMT.lib")\r
\r
-errnum_t StrArr_init( StrArr* m );\r
-errnum_t StrArr_finish( StrArr* m, errnum_t e );\r
+ #ifndef NDEBUG\r
+ #pragma comment(linker,"/NODEFAULTLIB:LIBCMT" )\r
+ #endif\r
+ #endif\r
+ #else\r
+ #pragma comment(lib, "libexpatwML.lib") // not supplied\r
+ #endif\r
+ #else // DLL version\r
\r
-errnum_t StrArr_add( StrArr* m, const TCHAR* Str, int* out_I );\r
-errnum_t StrArr_commit( StrArr* m );\r
-errnum_t StrArr_fillTo( StrArr* m, int n, const TCHAR* Str );\r
-errnum_t StrArr_toEmpty( StrArr* m );\r
+ #pragma comment(lib, "libexpatw.lib") // libexpatw.dll, including multi thread static runtime library\r
\r
-#define StrArr_initConst( m ) Set2_initConst( &(m)->Array )\r
-#define StrArr_getFreeAddr( m ) Strs_getFreeAddr( &(m)->Chars )\r
-#define StrArr_getFreeSize( m ) Strs_getFreeSize( &(m)->Chars )\r
-#define StrArr_getFreeCount( m ) Strs_getFreeCount( &(m)->Chars )\r
-#define StrArr_expandSize( m, sz ) Strs_expandSize( &(m)->Chars, sz )\r
-#define StrArr_expandCount( m, c ) Strs_expandCount( &(m)->Chars, c )\r
-#define StrArr_getArray( m ) ((TCHAR**)(m)->Array.First)\r
-#define StrArr_getN( m ) Set2_getCount( &(m)->Array, TCHAR* )\r
+ #endif\r
+#else\r
+ #if defined(XML_STATIC)\r
+ #if _MT\r
+ #if _DLL // Visual C++ /MD option, MSVCP**.DLL\r
+ #pragma comment(lib, "libexpatMD.lib") // not supplied\r
+ #else // Visual C++ /MT option\r
+\r
+ #pragma comment(lib, "libexpatMT.lib")\r
+\r
+ #ifndef NDEBUG\r
+ # pragma comment(linker,"/NODEFAULTLIB:LIBCMT" )\r
+ #endif\r
+ #endif\r
+ #else\r
+ #pragma comment(lib, "libexpatML.lib") // not supplied\r
+ #endif\r
+ #else // DLL version\r
\r
+ #pragma comment(lib, "libexpat.lib") // libexpat.dll, including multi thread static runtime library\r
\r
- \r
-/***********************************************************************\r
- <<< [CSV] >>> \r
-************************************************************************/\r
-errnum_t StrT_meltCSV( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pCSV );\r
-errnum_t StrArr_parseCSV( StrArr* m, const TCHAR* CSVLine );\r
+ #endif\r
+#endif\r
\r
+#include <expat.h> \r
\r
- \r
-#if __cplusplus\r
- } /* End of C Symbol */ \r
-#endif\r
\r
+#endif\r
\r
/*=================================================================*/\r
/* <<< [FileT/FileT.h] >>> */ \r
/* FileT_CallByNestFindData */ \r
typedef struct {\r
void* CallerArgument;\r
- TCHAR* AbsPath; // abstruct path\r
+ TCHAR* FullPath; // abstruct path\r
TCHAR* StepPath;\r
TCHAR* FileName;\r
DWORD FileAttributes;\r
<<< [FileT_Read] >>> \r
************************************************************************/\r
int FileT_openForRead( FILE** out_pFile, const TCHAR* path );\r
-int FileT_close( FILE* File, int e );\r
+// int FileT_close( FILE* File, int e );\r
+errnum_t FileT_closeAndNULL( FILE** in_out_File, errnum_t e );\r
+\r
+\r
+ \r
+errnum_t FileT_readAll( FILE* File, TCHAR** out_Text, size_t* out_TextLength );\r
\r
\r
\r
/***********************************************************************\r
<<< [FileT_Write] >>> \r
************************************************************************/\r
-int FileT_openForWrite( FILE** out_pFile, const TCHAR* Path, int Flags );\r
+int FileT_openForWrite( FILE** out_pFile, const TCHAR* Path, bit_flags_fast32_t Flags );\r
\r
enum { F_Unicode = 1, F_Append = 2 };\r
\r
int FileT_copy( const TCHAR* SrcPath, const TCHAR* DstPath );\r
int FileT_mkdir( const TCHAR* Path );\r
int FileT_del( const TCHAR* Path );\r
-int FileT_writePart( FILE* File, TCHAR* Start, TCHAR* Over );\r
+int FileT_writePart( FILE* File, const TCHAR* Start, TCHAR* Over );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [FileT_WinAPI] >>> \r
+************************************************************************/\r
+int FileT_readSizedStruct_WinAPI( HANDLE* Stream, void** out_SizedStruct );\r
+int FileT_writeSizedStruct_WinAPI( HANDLE* Stream, SizedStruct* OutputSizedStruct );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [FileFormatEnum] >>> \r
+************************************************************************/\r
+typedef enum {\r
+ FILE_FORMAT_NOT_EXIST = 0, /* File does not exist */\r
+ FILE_FORMAT_NO_BOM = 1,\r
+ FILE_FORMAT_UNICODE = 2,\r
+ FILE_FORMAT_UTF_8 = 3,\r
+} FileFormatEnum;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+* Function: FileT_readUnicodeFileBOM\r
+************************************************************************/\r
+errnum_t FileT_readUnicodeFileBOM( const TCHAR* Path, FileFormatEnum* out_Format );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+* Function: FileT_cutFFFE\r
+************************************************************************/\r
+errnum_t FileT_cutFFFE( const TCHAR* in_InputPath, const TCHAR* in_OutputPath, bool in_IsAppend );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [ParseXML2] >>>\r
+************************************************************************/\r
+typedef struct _ParseXML2_ConfigClass ParseXML2_ConfigClass;\r
+typedef struct _ParseXML2_StatusClass ParseXML2_StatusClass;\r
+typedef errnum_t (* ParseXML2_CallbackType )( ParseXML2_StatusClass* Status );\r
+\r
+struct _ParseXML2_ConfigClass {\r
+ BitField Flags; /* F_ParseXML2_Delegate | F_ParseXML2_OnStartElement ... */\r
+ void* Delegate; /* Flags|= F_ParseXML2_Delegate, if enabled */\r
+ ParseXML2_CallbackType OnStartElement; /* Flags|= F_ParseXML2_OnStartElement, if enabled */\r
+ ParseXML2_CallbackType OnEndElement; /* Flags|= F_ParseXML2_OnEndElement, if enabled */\r
+ ParseXML2_CallbackType OnText; /* Flags|= F_ParseXML2_OnText, if enabled */\r
+};\r
+enum {\r
+ F_ParseXML2_Delegate = 0x0001,\r
+ F_ParseXML2_OnStartElement = 0x0004,\r
+ F_ParseXML2_OnEndElement = 0x0008,\r
+ F_ParseXML2_OnText = 0x0010,\r
+};\r
+\r
+struct _ParseXML2_StatusClass {\r
+ void* Delegate;\r
+ int LineNum;\r
+ int Depth; /* Root XML element is 0 */\r
+ int PreviousCallbackType; /* e.g.) F_ParseXML2_OnStartElement. Initial value is 0 */\r
+\r
+ TCHAR* XPath;\r
+ TCHAR* TagName;\r
+ union {\r
+ struct {\r
+ const XML_Char** Attributes; /* for ParseXML2_StatusClass_getAttribute */\r
+ } OnStartElement;\r
+\r
+ struct { /* for ParseXML2_StatusClass_mallocCopyText */\r
+ const TCHAR* Text; /* not NULL terminated */\r
+ int TextLength;\r
+ } OnText;\r
+ } u;\r
+};\r
+\r
+errnum_t ParseXML2( const TCHAR* XML_Path, ParseXML2_ConfigClass* in_out_Config );\r
+errnum_t ParseXML2_StatusClass_getAttribute( ParseXML2_StatusClass* self,\r
+ const TCHAR* AttributeName, TCHAR** out_AttribyteValue );\r
+errnum_t ParseXML2_StatusClass_mallocCopyText( ParseXML2_StatusClass* self,\r
+ TCHAR** out_Text );\r
+\r
+enum { E_XML_PARSER = 0x3101 };\r
\r
\r
\r
typedef struct _Writables Writables;\r
\r
errnum_t AppKey_newWritable( AppKey** in_out_m, Writables** out_Writable, ... );\r
+errnum_t AppKey_newWritable_byArray( AppKey** in_out_m, Writables** out_Writable,\r
+ TCHAR** in_Paths, int in_PathCount );\r
void AppKey_initGlobal_const(void);\r
errnum_t AppKey_finishGlobal( errnum_t e );\r
errnum_t AppKey_addNewWritableFolder( const TCHAR* Path );\r
+errnum_t AppKey_addWritableFolder( AppKey* m, const TCHAR* Path );\r
errnum_t AppKey_checkWritable( const TCHAR* Path );\r
\r
\r
\r
errnum_t Writables_delete( Writables* m, errnum_t e );\r
\r
-errnum_t Writables_add( Writables* m, AppKey* Key, TCHAR* Path );\r
-errnum_t Writables_remove( Writables* m, TCHAR* Path );\r
+errnum_t Writables_add( Writables* m, AppKey* Key, const TCHAR* Path );\r
+errnum_t Writables_remove( Writables* m, const TCHAR* Path );\r
\r
errnum_t Writables_enable( Writables* m );\r
errnum_t Writables_disable( Writables* m, errnum_t e );\r
#endif\r
\r
/*=================================================================*/\r
+/* <<< [IniFile2/IniFile2.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+#if __cplusplus\r
+ extern "C" { /* Start of C Symbol */ \r
+#endif\r
+ \r
+bool IniStr_isLeft( const TCHAR* line, const TCHAR* symbol ); \r
+ \r
+TCHAR* IniStr_refRight( const TCHAR* line, bool bTrimRight ); \r
+ \r
+#if __cplusplus\r
+ } /* End of C Symbol */ \r
+#endif\r
+\r
+ \r
+/*=================================================================*/\r
/* <<< [Locale/Locale.h] >>> */ \r
/*=================================================================*/\r
\r
extern char* g_LocaleSymbol;\r
int Locale_init(void);\r
int Locale_isInited(void);\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [FileTime] >>> \r
+************************************************************************/\r
+\r
+#define FILETIME_addDays( pAnsTime, pBaseTime, plus ) \\r
+ ( *(ULONGLONG*)(pAnsTime) = *(ULONGLONG*)(pBaseTime) \\r
+ + (plus) * ((LONGLONG)(24*60*60)*(1000*1000*10)) )\r
+\r
+#define FILETIME_addHours( pAnsTime, pBaseTime, plus ) \\r
+ ( *(ULONGLONG*)(pAnsTime) = *(ULONGLONG*)(pBaseTime) \\r
+ + (plus) * ((LONGLONG)(60*60)*(1000*1000*10)) )\r
+\r
+#define FILETIME_addMinutes( pAnsTime, pBaseTime, plus ) \\r
+ ( *(ULONGLONG*)(pAnsTime) = *(ULONGLONG*)(pBaseTime) \\r
+ + (plus) * ((LONGLONG)(60)*(1000*1000*10)) )\r
+\r
+#define FILETIME_addSeconds( pAnsTime, pBaseTime, plus ) \\r
+ ( *(ULONGLONG*)(pAnsTime) = *(ULONGLONG*)(pBaseTime) \\r
+ + (plus) * ((LONGLONG)(1000*1000*10)) )\r
+\r
+#define FILETIME_sub( pLeftTime, pRightTime ) \\r
+ ( *(ULONGLONG*)(pLeftTime) - *(ULONGLONG*)(pRightTime) )\r
+\r
+\r
\r
#if __cplusplus\r
} /* End of C Symbol */ \r
\r
\r
/*=================================================================*/\r
+/* <<< [Parse2/Parse2.h] >>> */ \r
+/*=================================================================*/\r
+ \r
+/***********************************************************************\r
+ <<< [E_CATEGORY_PARSER2] >>> \r
+************************************************************************/\r
+#ifndef E_CATEGORY_PARSER2 /* If not duplicated */\r
+ #define E_CATEGORY_PARSER2 E_CATEGORY_PARSER2\r
+ enum { E_CATEGORY_PARSER2 = 0x00000600 };\r
+#endif\r
+\r
+enum { E_NOT_FOUND_PARTNER_BRACKET = E_CATEGORY_PARSER2 | 0x01 }; /*[E_NOT_FOUND_PARTNER_BRACKET]*/\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [ParsedRangeClass] >>> \r
+************************************************************************/\r
+typedef struct _ParsedRangeClass ParsedRangeClass;\r
+struct _ParsedRangeClass {\r
+\r
+ /* <Inherit parent="Variant_SuperClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ /* </Inherit> */\r
+\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+};\r
+extern const ClassID_Class g_ParsedRangeClass_ID;\r
+\r
+void ParsedRangeClass_initConst( ParsedRangeClass* self );\r
+\r
+int ParsedRanges_compareByStart( const void* _a1, const void* _a2 );\r
+\r
+#ifndef NDEBUG\r
+void ParsedRangeClass_onInitializedForDebug( ParsedRangeClass* self );\r
+#else\r
+inline void ParsedRangeClass_onInitializedForDebug( ParsedRangeClass* self )\r
+{\r
+ UNREFERENCED_VARIABLE( self );\r
+}\r
+#endif\r
+\r
+\r
+ \r
+errnum_t ParsedRanges_write_by_Cut(\r
+ Set2* /*<ParsedRangeClass>*/ CutRanges,\r
+ const TCHAR* Text, FILE* OutFile );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [LineNumberIndexClass] >>> \r
+************************************************************************/\r
+typedef struct _LineNumberIndexClass LineNumberIndexClass;\r
+struct _LineNumberIndexClass {\r
+ Set2 /*<const TCHAR*>*/ LeftsOfLine;\r
+};\r
+\r
+void LineNumberIndexClass_initConst( LineNumberIndexClass* self );\r
+errnum_t LineNumberIndexClass_initialize( LineNumberIndexClass* self, const TCHAR* Text );\r
+errnum_t LineNumberIndexClass_finalize( LineNumberIndexClass* self, errnum_t e );\r
+errnum_t LineNumberIndexClass_searchLineNumber( LineNumberIndexClass* self, const TCHAR* Position,\r
+ int* out_LineNumber );\r
+int LineNumberIndexClass_getCountOfLines( LineNumberIndexClass* self );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [SyntaxSubNodeClass] >>> \r
+************************************************************************/\r
+typedef struct _SyntaxSubNodeClass_IDClass SyntaxSubNodeClass_IDClass;\r
+typedef struct _SyntaxNodeClass SyntaxNodeClass;\r
+\r
+\r
+typedef struct _SyntaxSubNodeClass SyntaxSubNodeClass;\r
+struct _SyntaxSubNodeClass {\r
+\r
+ /* <Inherit parent="ParsedRangeClass"> */\r
+ const ClassID_Class* ClassID;\r
+ const FinalizerVTableClass* FinalizerVTable;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ /* </Inherit> */\r
+\r
+ const PrintXML_VTableClass* PrintXML_VTable;\r
+ SyntaxNodeClass* Parent;\r
+ ListElementClass SubNodeListElement; /* for ".Parent" */\r
+};\r
+\r
+extern const ClassID_Class g_SyntaxSubNodeClass_ID;\r
+errnum_t SyntaxSubNodeClass_printXML( SyntaxSubNodeClass* self, FILE* OutputStream );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [SyntaxNodeClass] >>> \r
+************************************************************************/\r
+typedef struct _SyntaxNodeClass_IDClass SyntaxNodeClass_IDClass;\r
+\r
+typedef struct _SyntaxNodeClass SyntaxNodeClass;\r
+struct _SyntaxNodeClass {\r
+\r
+ /* <Inherit parent="SyntaxSubNodeClass"> */\r
+ const ClassID_Class* ClassID;\r
+ const FinalizerVTableClass* FinalizerVTable;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const PrintXML_VTableClass* PrintXML_VTable;\r
+ SyntaxNodeClass* Parent;\r
+ ListElementClass SubNodeListElement; /* for ".Parent" */\r
+ /* </Inherit> */\r
+\r
+ ListClass SubNodeList;\r
+ ListElementClass ListElement; /* Next and previous in source file */\r
+};\r
+\r
+errnum_t Delete_SyntaxNodeList( ListClass* /*<SyntaxNodeClass*>*/ NodeList, errnum_t e );\r
+\r
+extern const ClassID_Class g_SyntaxNodeClass_ID;\r
+void SyntaxNodeClass_initConst( SyntaxNodeClass* self );\r
+errnum_t SyntaxNodeClass_printXML( SyntaxNodeClass* self, FILE* OutputStream );\r
+errnum_t SyntaxNodeClass_addSubNode( SyntaxNodeClass* self, SyntaxSubNodeClass* SubNode );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_DirectiveClass] >>> \r
+************************************************************************/\r
+\r
+typedef struct _PP_DirectiveClass PP_DirectiveClass;\r
+typedef struct _PP_SharpIfClass PP_SharpIfClass;\r
+typedef struct _PP_SharpElseClass PP_SharpElseClass;\r
+typedef struct _PP_SharpEndifClass PP_SharpEndifClass;\r
+typedef struct _PP_SharpIfdefClass PP_SharpIfdefClass;\r
+typedef struct _PP_SharpIfndefClass PP_SharpIfndefClass;\r
+\r
+\r
+typedef struct _PP_DirectiveClass PP_DirectiveClass;\r
+struct _PP_DirectiveClass {\r
+\r
+ /* <Inherit parent="ParsedRangeClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start; /* Left of a line having the direvtive */\r
+ const TCHAR* Over;\r
+ /* </Inherit> */\r
+\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+};\r
+extern const ClassID_Class g_PP_DirectiveClass_ID;\r
+\r
+\r
+errnum_t Parse_PP_Directive( const TCHAR* Text,\r
+ Set2* /*<PP_DirectiveClass*>*/ DirectivePointerArray );\r
+errnum_t Delete_PP_Directive( Set2* DirectivePointerArray, errnum_t e );\r
+\r
+\r
+void PP_DirectiveClass_initConst( PP_DirectiveClass* self );\r
+\r
+\r
+ \r
+errnum_t ParsedRanges_getCut_by_PP_Directive(\r
+ Set2* /*<ParsedRangeClass>*/ CutRanges,\r
+ Set2* /*<PP_DirectiveClass*>*/ DirectivePointerArray,\r
+ const TCHAR* Symbol, bool IsCutDefine );\r
+\r
+\r
+ \r
+errnum_t CutPreprocessorDirectives_from_C_LanguageToken(\r
+ ListClass* /*<C_LanguageTokenClass*>*/ TokenList,\r
+ Set2* /*<PP_DirectiveClass*>*/ Directives );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpDefineClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpDefineClass_IDClass PP_SharpDefineClass_IDClass;\r
+\r
+typedef struct _PP_SharpDefineClass PP_SharpDefineClass;\r
+struct _PP_SharpDefineClass {\r
+\r
+ /* <Inherit parent="PP_DirectiveClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ /* </Inherit> */\r
+\r
+ const TCHAR* Symbol_Start;\r
+ const TCHAR* Symbol_Over;\r
+};\r
+\r
+extern const ClassID_Class g_PP_SharpDefineClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpIncludeClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpIncludeClass_IDClass PP_SharpIncludeClass_IDClass;\r
+\r
+typedef struct _PP_SharpIncludeClass PP_SharpIncludeClass;\r
+struct _PP_SharpIncludeClass {\r
+\r
+ /* <Inherit parent="PP_DirectiveClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ /* </Inherit> */\r
+\r
+ const TCHAR* Path_Start;\r
+ const TCHAR* Path_Over;\r
+ TCHAR PathBracket; /* _T('<') or _T('"') */\r
+};\r
+\r
+extern const ClassID_Class g_PP_SharpIncludeClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpIfClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpIfClass_IDClass PP_SharpIfClass_IDClass;\r
+\r
+typedef struct _PP_SharpIfClass PP_SharpIfClass;\r
+struct _PP_SharpIfClass {\r
+\r
+ /* <Inherit parent="PP_DirectiveClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ /* </Inherit> */\r
+\r
+ PP_DirectiveClass* NextDirective;\r
+ PP_SharpEndifClass* EndDirective;\r
+};\r
+\r
+extern const ClassID_Class g_PP_SharpIfClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpElseClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpElseClass PP_SharpElseClass;\r
+struct _PP_SharpElseClass {\r
+\r
+ /* <Inherit parent="PP_DirectiveClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ /* </Inherit> */\r
+\r
+ PP_SharpIfClass* StartDirective;\r
+ PP_SharpEndifClass* EndDirective;\r
+};\r
+extern const ClassID_Class g_PP_SharpElseClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpEndifClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpEndifClass PP_SharpEndifClass;\r
+struct _PP_SharpEndifClass {\r
+\r
+ /* <Inherit parent="PP_DirectiveClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ /* </Inherit> */\r
+\r
+ PP_SharpIfClass* StartDirective;\r
+ PP_DirectiveClass* PreviousDirective;\r
+};\r
+extern const ClassID_Class g_PP_SharpEndifClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpIfdefClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpIfdefClass PP_SharpIfdefClass;\r
+struct _PP_SharpIfdefClass {\r
+\r
+ /* <Inherit parent="PP_SharpIfClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ PP_DirectiveClass* NextDirective;\r
+ PP_SharpEndifClass* EndDirective;\r
+ /* </Inherit> */\r
+\r
+ const TCHAR* Symbol_Start;\r
+ const TCHAR* Symbol_Over;\r
+};\r
+extern const ClassID_Class g_PP_SharpIfdefClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [PP_SharpIfndefClass] >>> \r
+************************************************************************/\r
+typedef struct _PP_SharpIfndefClass PP_SharpIfndefClass;\r
+struct _PP_SharpIfndefClass {\r
+\r
+ /* <Inherit parent="PP_SharpIfdefClass"> */\r
+ const ClassID_Class* ClassID;\r
+ FinalizerVTableClass* FinalizerVTable;\r
+ VariantClass* StaticAddress;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const TCHAR* DirectiveName_Start;\r
+ const TCHAR* DirectiveName_Over;\r
+ PP_DirectiveClass* NextDirective;\r
+ PP_SharpEndifClass* EndDirective;\r
+ const TCHAR* Symbol_Start;\r
+ const TCHAR* Symbol_Over;\r
+ /* </Inherit> */\r
+};\r
+extern const ClassID_Class g_PP_SharpIfndefClass_ID;\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [C_LanguageTokenEnum] >>> \r
+************************************************************************/\r
+typedef enum _C_LanguageTokenEnum C_LanguageTokenEnum;\r
+enum _C_LanguageTokenEnum {\r
+ gc_TokenOfOther = 0,\r
+ gc_TokenOfNumber = 0xA1,\r
+ gc_TokenOfCIdentifier = 0xA2,\r
+ gc_TokenOfString = 0xA3,\r
+ gc_TokenOfChar = 0xA4,\r
+\r
+ gc_TokenOf_28 = '(',\r
+ gc_TokenOf_29 = ')',\r
+ gc_TokenOf_7B = '{',\r
+ gc_TokenOf_7D = '}',\r
+ gc_TokenOf_5B = '[',\r
+ gc_TokenOf_5D = ']',\r
+ gc_TokenOf_3A = ':',\r
+ gc_TokenOf_3B = ';',\r
+ gc_TokenOf_2A = '*',\r
+ gc_TokenOf_0A = '\n',\r
+ gc_TokenOf_3D = '=',\r
+ gc_TokenOf_2E = '.',\r
+ gc_TokenOf_26 = '&',\r
+ gc_TokenOf_2B = '+',\r
+ gc_TokenOf_2D = '-',\r
+ gc_TokenOf_7E = '~',\r
+ gc_TokenOf_21 = '!',\r
+ gc_TokenOf_2F = '/',\r
+ gc_TokenOf_25 = '%',\r
+ gc_TokenOf_3E = '>',\r
+ gc_TokenOf_3C = '<',\r
+ gc_TokenOf_5E = '^',\r
+ gc_TokenOf_7C = '|',\r
+ gc_TokenOf_3F = '?',\r
+ gc_TokenOf_2C = ',',\r
+ gc_TokenOf_2A2F = TwoChar8( '/', '*' ),\r
+ gc_TokenOf_2F2A = TwoChar8( '*', '/' ),\r
+ gc_TokenOf_2F2F = TwoChar8( '/', '/' ),\r
+ gc_TokenOf_3E2D = TwoChar8( '-', '>' ),\r
+ gc_TokenOf_2B2B = TwoChar8( '+', '+' ),\r
+ gc_TokenOf_2D2D = TwoChar8( '-', '-' ),\r
+ gc_TokenOf_3C3C = TwoChar8( '<', '<' ),\r
+ gc_TokenOf_3E3E = TwoChar8( '>', '>' ),\r
+ gc_TokenOf_3D3E = TwoChar8( '>', '=' ),\r
+ gc_TokenOf_3D3C = TwoChar8( '<', '=' ),\r
+ gc_TokenOf_3D3D = TwoChar8( '=', '=' ),\r
+ gc_TokenOf_3D21 = TwoChar8( '!', '=' ),\r
+ gc_TokenOf_2626 = TwoChar8( '&', '&' ),\r
+ gc_TokenOf_7C7C = TwoChar8( '|', '|' ),\r
+ gc_TokenOf_3D2B = TwoChar8( '+', '=' ),\r
+ gc_TokenOf_3D2D = TwoChar8( '-', '=' ),\r
+ gc_TokenOf_3D2A = TwoChar8( '*', '=' ),\r
+ gc_TokenOf_3D2F = TwoChar8( '/', '=' ),\r
+ gc_TokenOf_3D25 = TwoChar8( '%', '=' ),\r
+ /* <<= */\r
+ /* >>= */\r
+ gc_TokenOf_3D26 = TwoChar8( '&', '=' ),\r
+ gc_TokenOf_3D7C = TwoChar8( '|', '=' ),\r
+ gc_TokenOf_3D5E = TwoChar8( '^', '=' ),\r
+};\r
+\r
+TCHAR* C_LanguageTokenEnum_convertToStr( C_LanguageTokenEnum Value );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [C_LanguageTokenClass] >>> \r
+************************************************************************/\r
+typedef struct _C_LanguageTokenClass_IDClass C_LanguageTokenClass_IDClass;\r
+\r
+typedef struct _C_LanguageTokenClass C_LanguageTokenClass;\r
+struct _C_LanguageTokenClass {\r
+\r
+ /* <Inherit parent="SyntaxSubNodeClass"> */\r
+ const ClassID_Class* ClassID;\r
+ const FinalizerVTableClass* FinalizerVTable;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const PrintXML_VTableClass* PrintXML_VTable;\r
+ SyntaxNodeClass* Parent;\r
+ ListElementClass SubNodeListElement; /* for ".Parent" */\r
+ /* </Inherit> */\r
+\r
+ C_LanguageTokenEnum TokenType;\r
+ ListElementClass ListElement; /* Next and previous in source file */\r
+ SyntaxNodeClass* ParentBlock;\r
+};\r
+\r
+extern const ClassID_Class g_C_LanguageTokenClass_ID;\r
+void C_LanguageTokenClass_initConst( C_LanguageTokenClass* self );\r
+errnum_t C_LanguageTokenClass_printXML( C_LanguageTokenClass* self, FILE* OutputStream );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NaturalDocsDefinitionClass] >>> \r
+************************************************************************/\r
+typedef struct _NaturalDocsDefinitionClass NaturalDocsDefinitionClass;\r
+struct _NaturalDocsDefinitionClass {\r
+ const TCHAR* Name; /* Has */\r
+ const TCHAR* NameStart;\r
+ const TCHAR* NameOver;\r
+\r
+ const TCHAR* Brief; /* Has */\r
+ const TCHAR* BriefStart;\r
+ const TCHAR* BriefOver;\r
+};\r
+\r
+void NaturalDocsDefinitionClass_initConst( NaturalDocsDefinitionClass* self );\r
+errnum_t NaturalDocsDefinitionClass_finalize( NaturalDocsDefinitionClass* self, errnum_t e );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NaturalDocsDescriptionTypeEnum] >>> \r
+************************************************************************/\r
+typedef enum _NaturalDocsDescriptionTypeEnum NaturalDocsDescriptionTypeEnum;\r
+enum _NaturalDocsDescriptionTypeEnum {\r
+ NaturalDocsDescriptionType_Unknown,\r
+ NaturalDocsDescriptionType_SubTitle,\r
+ NaturalDocsDescriptionType_Paragraph,\r
+ NaturalDocsDescriptionType_Code,\r
+ NaturalDocsDescriptionType_DefinitionList,\r
+\r
+ NaturalDocsDescriptionType_Count\r
+};\r
+\r
+const TCHAR* NaturalDocsDescriptionTypeEnum_to_String( int in, const TCHAR* in_OutOfRange );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NaturalDocsDescriptionClass] >>> \r
+************************************************************************/\r
+typedef struct _NaturalDocsDescriptionClass NaturalDocsDescriptionClass;\r
+struct _NaturalDocsDescriptionClass {\r
+ NaturalDocsDescriptionTypeEnum Type;\r
+\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+\r
+ union {\r
+ void* Unknown;\r
+ NaturalDocsDefinitionClass* Definition;\r
+ } u;\r
+};\r
+\r
+void NaturalDocsDescriptionClass_initConst( NaturalDocsDescriptionClass* self );\r
+errnum_t NaturalDocsDescriptionClass_finalize( NaturalDocsDescriptionClass* self, errnum_t e );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NaturalDocsParserConfigClass] >>> \r
+************************************************************************/\r
+typedef struct _NaturalDocsParserConfigClass NaturalDocsParserConfigClass;\r
+struct _NaturalDocsParserConfigClass {\r
+ bit_flags_fast32_t Flags; /*<NaturalDocsParserConfigEnum>*/\r
+ TCHAR** AdditionalKeywords;\r
+ int AdditionalKeywordsLength;\r
+ int AdditionalKeywordsEndsScopesFirstIndex;\r
+ int AdditionalKeywordsEndsScopesLength;\r
+};\r
+typedef enum _NaturalDocsParserConfigEnum NaturalDocsParserConfigEnum;\r
+enum _NaturalDocsParserConfigEnum {\r
+ NaturalDocsParserConfig_AdditionalKeywords = 0x0001,\r
+ NaturalDocsParserConfig_AdditionalKeywordsLength = 0x0002,\r
+ NaturalDocsParserConfig_AdditionalKeywordsEndsScopesFirstIndex = 0x0004,\r
+ NaturalDocsParserConfig_AdditionalKeywordsEndsScopesLength = 0x0008,\r
+};\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NaturalDocsHeaderClass] >>> \r
+************************************************************************/\r
+typedef struct _NaturalDocsHeaderClass NaturalDocsHeaderClass;\r
+struct _NaturalDocsHeaderClass {\r
+ const TCHAR* Keyword; /* Has */\r
+ const TCHAR* KeywordStart;\r
+ const TCHAR* KeywordOver;\r
+\r
+ const TCHAR* Name; /* Has */\r
+ const TCHAR* NameStart;\r
+ const TCHAR* NameOver;\r
+\r
+ const TCHAR* BriefNoIndent;\r
+ const TCHAR* Brief; /* Has */\r
+ const TCHAR* BriefStart;\r
+ const TCHAR* BriefOver;\r
+\r
+ const TCHAR* ArgumentsLabel;\r
+ Set2 Arguments; /*<NaturalDocsDefinitionClass>*/ /* Has */\r
+\r
+ const TCHAR* ReturnValueLabel;\r
+ const TCHAR* ReturnValue; /* Has */\r
+ const TCHAR* ReturnValueStart;\r
+ const TCHAR* ReturnValueOver;\r
+\r
+ const TCHAR* Descriptions; /* Has */\r
+ const TCHAR* DescriptionsStart;\r
+ const TCHAR* DescriptionsOver;\r
+\r
+ Set2 DescriptionItems; /*<NaturalDocsDescriptionClass>*/ /* Has */\r
+};\r
+\r
+void NaturalDocsHeaderClass_initConst( NaturalDocsHeaderClass* self );\r
+errnum_t NaturalDocsHeaderClass_finalize( NaturalDocsHeaderClass* self, errnum_t e );\r
+\r
+errnum_t ParseNaturalDocsComment( const TCHAR* in_SourceStart, const TCHAR* in_SourceOver,\r
+ NaturalDocsHeaderClass** out_NaturalDocsHeader, NaturalDocsParserConfigClass* config );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [NaturalCommentClass] >>> \r
+************************************************************************/\r
+typedef struct _NaturalCommentClass NaturalCommentClass;\r
+struct _NaturalCommentClass {\r
+\r
+ /* <Inherit parent="SyntaxNodeClass"> */\r
+ const ClassID_Class* ClassID;\r
+ const FinalizerVTableClass* FinalizerVTable;\r
+ const TCHAR* Start;\r
+ const TCHAR* Over;\r
+ const PrintXML_VTableClass* PrintXML_VTable;\r
+ SyntaxNodeClass* Parent;\r
+ ListElementClass SubNodeListElement; /* for ".Parent" */\r
+ ListClass SubNodeList;\r
+ ListElementClass ListElement; /* Next and previous in source file */\r
+ /* </Inherit> */\r
+\r
+ int StartLineNum;\r
+ int LastLineNum;\r
+ NaturalDocsHeaderClass* NaturalDocsHeader;\r
+ NaturalCommentClass* ParentComment;\r
+};\r
+\r
+extern const ClassID_Class g_NaturalCommentClass_ID;\r
+void NaturalCommentClass_initConst( NaturalCommentClass* self );\r
+errnum_t NaturalCommentClass_finalize( NaturalCommentClass* self, errnum_t e );\r
+errnum_t NaturalCommentClass_printXML( NaturalCommentClass* self, FILE* OutputStream );\r
+\r
+\r
+errnum_t MakeNaturalComments_C_Language( ListClass* /*<C_LanguageTokenClass*>*/ TokenList,\r
+ LineNumberIndexClass* LineNumbers,\r
+ ListClass* /*<NaturalCommentClass*>*/ TopSyntaxNodeList,\r
+ NaturalDocsParserConfigClass* config );\r
+\r
+\r
+ \r
+/***********************************************************************\r
+ <<< [Parse_C_Language] >>> \r
+************************************************************************/\r
+errnum_t LexicalAnalize_C_Language( const TCHAR* Text,\r
+ ListClass* /*<C_LanguageTokenClass*>*/ TokenList );\r
+errnum_t CutComment_C_LanguageToken( ListClass* /*<C_LanguageTokenClass*>*/ TokenList );\r
+errnum_t Delete_C_LanguageToken( ListClass* /*<C_LanguageTokenClass*>*/ TokenList, errnum_t e );\r
+ \r
+errnum_t CutCommentC_1( const TCHAR* in_InputPath, const TCHAR* in_OutputPath );\r
+errnum_t CopyWithoutComment_C_Language( ListClass* in_Tokens, TCHAR* in_Text, FILE* in_OutStream );\r
+ \r
+/*=================================================================*/\r
/* <<< [PlatformSDK_plus/PlatformSDK_plus.h] >>> */ \r
/*=================================================================*/\r
\r
bool GetCommandLineExist( const TCHAR* Name, bool bCase );\r
\r
#if ! _UNICODE\r
- #define GetCommandLineNamedC8 GetCommandLineNamed\r
+ #define GetCommandLineNamedC8 GetCommandLineNamed\r
+#endif\r
+\r
+ \r
+errnum_t GetProcessInformation( DWORD in_ProcessID, PROCESSENTRY32* out_Info );\r
+ \r
+/* [CloseHandleInFin] */ \r
+#if ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+ #define CloseHandleInFin( h, e ) \\r
+ ( \\r
+ ( (h) == INVALID_HANDLE_VALUE || (h) == NULL || CloseHandle( h ) ) ? \\r
+ (e) : \\r
+ ( \\r
+ ( OnRaisingError_Sub((const char*)__FILE__,__LINE__) ) ? \\r
+ (DebugBreakR(), E_OTHERS) : \\r
+ (E_OTHERS) \\r
+ ) \\r
+ )\r
+#else\r
+ #define CloseHandleInFin( h, e ) \\r
+ ( \\r
+ ( (h) == INVALID_HANDLE_VALUE || (h) == NULL || CloseHandle( h ) ) ? \\r
+ (e) : \\r
+ (E_OTHERS) \\r
+ )\r
#endif\r
\r
+\r
\r
/* [env] */ \r
#define env( Str, StrSize, Input ) \\r
- env_part( Str, StrSize, Str, NULL, Input )\r
+ env_part( Str, StrSize, Str, NULL, Input )\r
int env_part( TCHAR* Str, unsigned StrSize, TCHAR* StrStart, TCHAR** out_StrLast,\r
- const TCHAR* Input );\r
+ const TCHAR* Input );\r
int env_malloc( TCHAR** out_Value, size_t* out_ValueLen, const TCHAR* Name );\r
\r
\r
#define USE_GLOBALS 1\r
\r
void Globals_initConst(void);\r
-int Globals_init(void);\r
-int Globals_finish( int e );\r
+int Globals_initialize(void);\r
+int Globals_finalize( int e );\r
\r
#if NDEBUG\r
#define get_InitedObject( m, isInited ) (m)\r
#else\r
- #define get_InitedObject( m, isInited ) ( isInited( m ) ? (m) : (DebugBreak(), (m)) )\r
+ #define get_InitedObject( m, isInited ) ( isInited( m ) ? (m) : (DebugBreakR(), (m)) )\r
#endif\r
\r
\r