00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00047 #ifndef FASTFORMAT_INCL_FASTFORMAT_H_FASTFORMAT
00048 #define FASTFORMAT_INCL_FASTFORMAT_H_FASTFORMAT
00049
00050
00051
00052
00053
00054 #ifndef FASTFORMAT_DOCUMENTATION_SKIP_SECTION
00055 # define FASTFORMAT_VER_FASTFORMAT_H_FASTFORMAT_MAJOR 1
00056 # define FASTFORMAT_VER_FASTFORMAT_H_FASTFORMAT_MINOR 19
00057 # define FASTFORMAT_VER_FASTFORMAT_H_FASTFORMAT_REVISION 3
00058 # define FASTFORMAT_VER_FASTFORMAT_H_FASTFORMAT_EDIT 69
00059 #endif
00060
00077 #ifndef FASTFORMAT_DOCUMENTATION_SKIP_SECTION
00078 # define FASTFORMAT_VER_0_1_1 0x00010100
00079 # define FASTFORMAT_VER_0_1_2 0x00010200
00080 # define FASTFORMAT_VER_0_1_3 0x00010300
00081 # define FASTFORMAT_VER_0_1_4 0x00010400
00082 # define FASTFORMAT_VER_0_1_5 0x00010500
00083 # define FASTFORMAT_VER_0_1_6 0x00010600
00084 # define FASTFORMAT_VER_0_1_7 0x000107ff
00085 # define FASTFORMAT_VER_0_1_8 0x000108ff
00086 # define FASTFORMAT_VER_0_1_9 0x000109ff
00087 # define FASTFORMAT_VER_0_1_10 0x00010aff
00088 # define FASTFORMAT_VER_0_1_11 0x00010bff
00089 # define FASTFORMAT_VER_0_1_12 0x00010cff
00090 # define FASTFORMAT_VER_0_2_1_ALPHA_1 0x00020101
00091 # define FASTFORMAT_VER_0_2_1_ALPHA_2 0x00020102
00092 # define FASTFORMAT_VER_0_2_1_ALPHA_3 0x00020103
00093 # define FASTFORMAT_VER_0_2_1_ALPHA_4 0x00020104
00094 # define FASTFORMAT_VER_0_2_1_ALPHA_5 0x00020105
00095 # define FASTFORMAT_VER_0_2_1_ALPHA_6 0x00020106
00096 # define FASTFORMAT_VER_0_2_1_ALPHA_7 0x00020107
00097 # define FASTFORMAT_VER_0_2_1_ALPHA_8 0x00020108
00098 # define FASTFORMAT_VER_0_2_1_ALPHA_9 0x00020109
00099 # define FASTFORMAT_VER_0_2_1_ALPHA_10 0x0002010a
00100 # define FASTFORMAT_VER_0_2_1_ALPHA_11 0x0002010b
00101 # define FASTFORMAT_VER_0_2_1_ALPHA_12 0x0002010c
00102 # define FASTFORMAT_VER_0_2_1_BETA_1 0x00020181
00103 # define FASTFORMAT_VER_0_2_1_BETA_3 0x00020183
00104 # define FASTFORMAT_VER_0_2_1_BETA_4 0x00020184
00105 # define FASTFORMAT_VER_0_2_1_BETA_5 0x00020185
00106 # define FASTFORMAT_VER_0_2_1_BETA_6 0x00020186
00107 # define FASTFORMAT_VER_0_2_1_BETA_7 0x00020187
00108 # define FASTFORMAT_VER_0_2_1_BETA_8 0x00020188
00109 # define FASTFORMAT_VER_0_2_1_BETA_9 0x00020189
00110 # define FASTFORMAT_VER_0_2_1_BETA_10 0x0002018a
00111 # define FASTFORMAT_VER_0_2_1 0x000201ff
00112 # define FASTFORMAT_VER_0_3_1_ALPHA_1 0x00030101
00113 # define FASTFORMAT_VER_0_3_1_BETA_1 0x00030181
00114 # define FASTFORMAT_VER_0_3_1_BETA_2 0x00030182
00115 # define FASTFORMAT_VER_0_3_1_BETA_3 0x00030183
00116 # define FASTFORMAT_VER_0_3_1_BETA_4 0x00030184
00117 # define FASTFORMAT_VER_0_3_1_BETA_5 0x00030185
00118 # define FASTFORMAT_VER_0_3_2_BETA_1 0x00030281
00119 # define FASTFORMAT_VER_0_3_2_BETA_2 0x00030282
00120 # define FASTFORMAT_VER_0_3_2_BETA_3 0x00030283
00121 # define FASTFORMAT_VER_0_3_2_BETA_4 0x00030284
00122 # define FASTFORMAT_VER_0_3_2 0x000302ff
00123 # define FASTFORMAT_VER_0_3_3 0x000303ff
00124 # define FASTFORMAT_VER_0_3_4 0x000304ff
00125 # define FASTFORMAT_VER_0_4_1 0x00040101
00126 # define FASTFORMAT_VER_0_4_2 0x000402ff
00127 # define FASTFORMAT_VER_0_4_3 0x000403ff
00128 # define FASTFORMAT_VER_0_4_4 0x000404ff
00129 #endif
00130
00131 #define FASTFORMAT_VER_MAJOR 0
00132 #define FASTFORMAT_VER_MINOR 4
00133 #define FASTFORMAT_VER_REVISION 4
00134
00135 #define FASTFORMAT_VER FASTFORMAT_VER_0_4_4
00136
00137
00138
00139
00140
00141 #include <stddef.h>
00142
00143
00144
00145
00146
00147
00148
00149 #ifndef FASTFORMAT_USE_WIDE_STRINGS
00150 # if defined(_WIN32) && \
00151 defined(UNICODE) && \
00152 defined(_UNICODE)
00153 # define FASTFORMAT_USE_WIDE_STRINGS
00154 # endif
00155 #endif
00156
00157
00158
00159
00160
00161 #ifdef FASTFORMAT_USE_WIDE_STRINGS
00162 # ifndef _WCHAR_T_DEFINED
00163 # include <wchar.h>
00164 # endif
00165 #endif
00166
00167 #include <fastformat/internal/string_encoding.h>
00168
00169
00170
00171
00172
00173 #if !defined(__cplusplus) && \
00174 !defined(FASTFORMAT_DOCUMENTATION_SKIP_SECTION) && \
00175 !defined(FASTFORMAT_NO_NAMESPACE)
00176 # define FASTFORMAT_NO_NAMESPACE
00177 #endif
00178
00179 #if !defined(FASTFORMAT_NO_NAMESPACE)
00180
00185 namespace fastformat
00186 {
00187 #endif
00188
00189
00190
00191
00192
00193 #include <fastformat/internal/shim_macros.h>
00194
00195
00196
00197
00198
00239 #if !defined(FASTFORMAT_DECLSPEC)
00240 # define FASTFORMAT_DECLSPEC
00241 #endif
00242
00243 #if defined(__cplusplus) || \
00244 defined(FASTFORMAT_DOCUMENTATION_SKIP_SECTION)
00245 # define FASTFORMAT_EXTERN_C extern "C"
00246 #else
00247 # define FASTFORMAT_EXTERN_C extern
00248 #endif
00249
00250 #if !defined(FASTFORMAT_CALLCONV)
00251 # define FASTFORMAT_CALLCONV
00252 #endif
00253
00254 #if defined(FASTFORMAT_DOCUMENTATION_SKIP_SECTION) || \
00255 !defined(FASTFORMAT_CALL)
00256 # define FASTFORMAT_CALL(rt) FASTFORMAT_DECLSPEC FASTFORMAT_EXTERN_C rt FASTFORMAT_CALLCONV
00257 #endif
00258
00259
00260
00261
00262
00269 #ifdef FASTFORMAT_USE_WIDE_STRINGS
00270 typedef wchar_t ff_char_t;
00271 #else
00272 typedef char ff_char_t;
00273 #endif
00274
00277 struct ff_string_slice_t
00278 {
00279 size_t len;
00280 ff_char_t const* ptr;
00281 };
00282 #ifndef __cplusplus
00283 typedef struct ff_string_slice_t ff_string_slice_t;
00284 #endif
00285
00286 #if !defined(FASTFORMAT_NO_NAMESPACE)
00287
00289 typedef ff_string_slice_t string_slice_t;
00290 #endif
00291
00295 struct ff_format_element_t;
00296 #ifndef __cplusplus
00297 typedef struct ff_format_element_t ff_format_element_t;
00298 #endif
00299
00300 #if !defined(FASTFORMAT_NO_NAMESPACE)
00301
00303 typedef ff_format_element_t format_element_t;
00304 #endif
00305
00306
00307
00308
00309
00314 enum ff_parse_code_t
00315 {
00316 FF_PARSECODE_SUCCESS = 0
00317 , FF_PARSECODE_INCOMPLETEREPLACEMENT = 1
00318 , FF_PARSECODE_INVALIDINDEX = 2
00319 };
00320 #ifndef __cplusplus
00321 typedef struct ff_parse_code_t ff_parse_code_t;
00322 #endif
00323
00324 #if !defined(FASTFORMAT_NO_NAMESPACE)
00325
00327 typedef ff_parse_code_t parse_code_t;
00328 #endif
00329
00330
00335 enum ff_replacement_code_t
00336 {
00337 FF_REPLACEMENTCODE_SUCCESS = 0
00338 , FF_REPLACEMENTCODE_MISSING_ARGUMENT = 1
00339 , FF_REPLACEMENTCODE_UNREFERENCED_ARGUMENT = 2
00340 };
00341 #ifndef __cplusplus
00342 typedef struct ff_replacement_code_t ff_replacement_code_t;
00343 #endif
00344
00345 #if !defined(FASTFORMAT_NO_NAMESPACE)
00346
00348 typedef ff_replacement_code_t replacement_code_t;
00349 #endif
00350
00351
00387 typedef int (FASTFORMAT_CALLCONV* fastformat_illformedHandler_t)(
00388 void* param
00389 , ff_parse_code_t code
00390 , ff_char_t const* format
00391 , size_t formatLen
00392 , size_t replacementIndex
00393 , ff_char_t const* defect
00394 , size_t defectLen
00395 , int parameterIndex
00396 , void* reserved0
00397 , size_t reserved1
00398 , void* reserved2
00399 );
00400
00401 #if !defined(FASTFORMAT_NO_NAMESPACE)
00402
00404 typedef fastformat_illformedHandler_t illformedHandler_t;
00405 #endif
00406
00412 struct ff_illformed_handler_info_t
00413 {
00414 fastformat_illformedHandler_t handler;
00415 void* param;
00416 };
00417
00418 #if !defined(FASTFORMAT_NO_NAMESPACE)
00419
00421 typedef ff_illformed_handler_info_t illformed_handler_info_t;
00422 #endif
00423
00471 typedef int (FASTFORMAT_CALLCONV* fastformat_mismatchedHandler_t)(
00472 void* param
00473 , ff_replacement_code_t code
00474 , size_t numParameters
00475 , int parameterIndex
00476 , ff_string_slice_t* slice
00477 , void* reserved0
00478 , size_t reserved1
00479 , void* reserved2
00480 );
00481
00482 #if !defined(FASTFORMAT_NO_NAMESPACE)
00483
00485 typedef fastformat_mismatchedHandler_t mismatchedHandler_t;
00486 #endif
00487
00493 struct ff_mismatched_handler_info_t
00494 {
00495 fastformat_mismatchedHandler_t handler;
00496 void* param;
00497 };
00498
00499 #if !defined(FASTFORMAT_NO_NAMESPACE)
00500
00502 typedef ff_mismatched_handler_info_t mismatched_handler_info_t;
00503 #endif
00504
00505
00506
00507
00508
00531 FASTFORMAT_CALL(int) fastformat_init(void);
00532
00552 FASTFORMAT_CALL(void) fastformat_uninit(void);
00553
00554 #ifndef FASTFORMAT_DOCUMENTATION_SKIP_SECTION
00555 FASTFORMAT_CALL(void) fastformat_exitProcess(int code);
00556 #endif
00557
00567 FASTFORMAT_CALL(ff_char_t const*) fastformat_getInitCodeString(int code);
00568
00576 FASTFORMAT_CALL(size_t) fastformat_getInitCodeStringLength(int code);
00577
00578 #ifndef FASTFORMAT_NO_NAMESPACE
00579
00583 inline int init()
00584 {
00585 return fastformat_init();
00586 }
00587
00592 inline void uninit()
00593 {
00594 fastformat_uninit();
00595 }
00596
00601 inline ff_char_t const* getInitCodeString(int code)
00602 {
00603 return fastformat_getInitCodeString(code);
00604 }
00605
00610 inline size_t getInitCodeStringLength(int code)
00611 {
00612 return fastformat_getInitCodeStringLength(code);
00613 }
00614 #endif
00615
00616
00617
00618
00619
00626 FASTFORMAT_CALL(ff_illformed_handler_info_t) fastformat_getProcessIllformedHandler(void);
00627
00637 FASTFORMAT_CALL(ff_illformed_handler_info_t) fastformat_setProcessIllformedHandler(fastformat_illformedHandler_t handler, void* param);
00638
00645 FASTFORMAT_CALL(ff_illformed_handler_info_t) fastformat_getThreadIllformedHandler(void);
00646
00656 FASTFORMAT_CALL(ff_illformed_handler_info_t) fastformat_setThreadIllformedHandler(fastformat_illformedHandler_t handler, void* param);
00657
00658
00665 FASTFORMAT_CALL(ff_mismatched_handler_info_t) fastformat_getProcessMismatchedHandler(void);
00666
00676 FASTFORMAT_CALL(ff_mismatched_handler_info_t) fastformat_setProcessMismatchedHandler(fastformat_mismatchedHandler_t handler, void* param);
00677
00684 FASTFORMAT_CALL(ff_mismatched_handler_info_t) fastformat_getThreadMismatchedHandler(void);
00685
00695 FASTFORMAT_CALL(ff_mismatched_handler_info_t) fastformat_setThreadMismatchedHandler(fastformat_mismatchedHandler_t handler, void* param);
00696
00697
00698
00699
00700
00711 FASTFORMAT_CALL(size_t) fastformat_calculateNumberOfRequiredReplacements(
00712 ff_char_t const* format
00713 , size_t cchFormat
00714 );
00715
00740 FASTFORMAT_CALL(unsigned) fastformat_parseFormat(
00741 ff_char_t const* format
00742 , size_t cchFormat
00743 , ff_format_element_t* formatElements
00744 , size_t numFormatElements
00745 , fastformat_illformedHandler_t handler
00746 , void* param
00747 );
00748
00754 FASTFORMAT_CALL(size_t) fastformat_fillReplacements(
00755 ff_string_slice_t* resultElements
00756 , ff_format_element_t const* formatElements
00757 , size_t numElements
00758 , ff_string_slice_t const* arguments
00759 , size_t numArguments
00760 , fastformat_mismatchedHandler_t handler
00761 , void* param
00762 , size_t* pnumResultElements
00763 );
00764
00768 FASTFORMAT_CALL(size_t) fastformat_accumulateSliceLengths(
00769 size_t numSlices
00770 , ff_string_slice_t const* slices
00771 );
00772
00773
00774
00775
00776
00788 FASTFORMAT_CALL(unsigned) fastformat_lookupPattern(
00789 ff_char_t const* pattern
00790 , size_t cchPattern
00791 , ff_format_element_t const** elements
00792 );
00793
00794 #ifndef FASTFORMAT_DOCUMENTATION_SKIP_SECTION
00795 FASTFORMAT_CALL(ff_char_t const*) fastformat_getSpacesSlice(size_t len);
00796 FASTFORMAT_CALL(ff_char_t const*) fastformat_getHashesSlice(size_t len);
00797 #endif
00798
00799
00800
00801
00802
00806 FASTFORMAT_CALL(ff_string_slice_t) fastformat_getNewlineForPlatform(void);
00807
00808
00809
00810
00811
00812 #ifndef FASTFORMAT_NO_NAMESPACE
00813
00818 inline ff_illformed_handler_info_t getProcessIllformedHandler()
00819 {
00820 return fastformat_getProcessIllformedHandler();
00821 }
00822
00827 inline ff_illformed_handler_info_t setProcessIllformedHandler(illformedHandler_t handler, void* param)
00828 {
00829 return fastformat_setProcessIllformedHandler(handler, param);
00830 }
00831
00836 inline ff_illformed_handler_info_t getThreadIllformedHandler()
00837 {
00838 return fastformat_getThreadIllformedHandler();
00839 }
00840
00845 inline ff_illformed_handler_info_t setThreadIllformedHandler(illformedHandler_t handler, void* param)
00846 {
00847 return fastformat_setThreadIllformedHandler(handler, param);
00848 }
00849
00854 inline ff_mismatched_handler_info_t getProcessMismatchedHandler()
00855 {
00856 return fastformat_getProcessMismatchedHandler();
00857 }
00858
00863 inline ff_mismatched_handler_info_t setProcessMismatchedHandler(mismatchedHandler_t handler, void* param)
00864 {
00865 return fastformat_setProcessMismatchedHandler(handler, param);
00866 }
00867
00872 inline ff_mismatched_handler_info_t getThreadMismatchedHandler()
00873 {
00874 return fastformat_getThreadMismatchedHandler();
00875 }
00876
00881 inline ff_mismatched_handler_info_t setThreadMismatchedHandler(mismatchedHandler_t handler, void* param)
00882 {
00883 return fastformat_setThreadMismatchedHandler(handler, param);
00884 }
00885
00890 inline string_slice_t getNewlineForPlatform()
00891 {
00892 return fastformat_getNewlineForPlatform();
00893 }
00894
00895 #endif
00896
00897
00898
00899
00900
00901 # ifndef FASTFORMAT_DOCUMENTATION_SKIP_SECTION
00902
00903
00904
00905
00906
00907
00908 FASTFORMAT_CALL(void*) fastformat_malloc(size_t cb);
00909 # endif
00910
00911
00912
00913
00914
00916 #ifdef FASTFORMAT_USE_WIDE_STRINGS
00917 inline wchar_t const* c_str_data_w(
00918 #else
00919 inline char const* c_str_data_a(
00920 #endif
00921 ff_string_slice_t const& slice
00922 )
00923 {
00924 return slice.ptr;
00925 }
00926
00928 inline ff_char_t const* c_str_data(
00929 ff_string_slice_t const& slice
00930 )
00931 {
00932 #ifdef FASTFORMAT_USE_WIDE_STRINGS
00933 return c_str_data_w(slice);
00934 #else
00935 return c_str_data_a(slice);
00936 #endif
00937 }
00938
00940 #ifdef FASTFORMAT_USE_WIDE_STRINGS
00941 inline size_t c_str_len_w(
00942 #else
00943 inline size_t c_str_len_a(
00944 #endif
00945 ff_string_slice_t const& slice
00946 )
00947 {
00948 return slice.len;
00949 }
00950
00952 inline size_t c_str_len(
00953 ff_string_slice_t const& slice
00954 )
00955 {
00956 #ifdef FASTFORMAT_USE_WIDE_STRINGS
00957 return c_str_len_w(slice);
00958 #else
00959 return c_str_len_a(slice);
00960 #endif
00961 }
00962
00963
00964
00965
00966
00967 #if !defined(FASTFORMAT_NO_NAMESPACE)
00968
00972 namespace util
00973 {}
00974
00982 namespace filters
00983 {}
00984
00988 namespace iterators
00989 {}
00990
00997 namespace sinks
00998 {}
00999
01005 namespace internal
01006 {}
01007
01008 }
01009
01010
01011 # ifndef _STLSOFT_NO_NAMESPACE
01012 namespace stlsoft
01013 {
01014 # endif
01015
01016 # ifdef FASTFORMAT_USE_WIDE_STRINGS
01017 using ::fastformat::c_str_data_w;
01018 using ::fastformat::c_str_len_w;
01019 # else
01020 using ::fastformat::c_str_data_a;
01021 using ::fastformat::c_str_len_a;
01022 # endif
01023 using ::fastformat::c_str_data;
01024 using ::fastformat::c_str_len;
01025
01026 # ifndef _STLSOFT_NO_NAMESPACE
01027 }
01028 # endif
01029
01030
01031 #else
01032
01033 # ifndef _STLSOFT_NO_NAMESPACE
01034 namespace stlsoft
01035 {
01036
01037 # ifdef FASTFORMAT_USE_WIDE_STRINGS
01038 inline wchar_t const* c_str_data_w(
01039 # else
01040 inline char const* c_str_data_a(
01041 # endif
01042 ff_string_slice_t const& slice
01043 )
01044 {
01045 return slice.ptr;
01046 }
01047
01048 inline ff_char_t const* c_str_data(
01049 ff_string_slice_t const& slice
01050 )
01051 {
01052 return slice.ptr;
01053 }
01054
01055 # ifdef FASTFORMAT_USE_WIDE_STRINGS
01056 inline size_t c_str_len_w(
01057 # else
01058 inline size_t c_str_len_a(
01059 # endif
01060 ff_string_slice_t const& slice
01061 )
01062 {
01063 return slice.len;
01064 }
01065
01066 inline size_t c_str_len(
01067 ff_string_slice_t const& slice
01068 )
01069 {
01070 return slice.len;
01071 }
01072
01073 }
01074 # endif
01075
01076 #endif
01077
01078
01079
01080
01081
01082 #ifdef STLSOFT_CF_PRAGMA_ONCE_SUPPORT
01083 # pragma once
01084 #endif
01085
01086
01087
01088 #endif
01089
01090