Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/utrace.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 // © 2016 and later: Unicode, Inc. and others. | |
2 // License & terms of use: http://www.unicode.org/copyright.html | |
3 /* | |
4 ******************************************************************************* | |
5 * | |
6 * Copyright (C) 2003-2013, International Business Machines | |
7 * Corporation and others. All Rights Reserved. | |
8 * | |
9 ******************************************************************************* | |
10 * file name: utrace.h | |
11 * encoding: UTF-8 | |
12 * tab size: 8 (not used) | |
13 * indentation:4 | |
14 * | |
15 * created on: 2003aug06 | |
16 * created by: Markus W. Scherer | |
17 * | |
18 * Definitions for ICU tracing/logging. | |
19 * | |
20 */ | |
21 | |
22 #ifndef __UTRACE_H__ | |
23 #define __UTRACE_H__ | |
24 | |
25 #include <stdarg.h> | |
26 #include "unicode/utypes.h" | |
27 | |
28 /** | |
29 * \file | |
30 * \brief C API: Definitions for ICU tracing/logging. | |
31 * | |
32 * This provides API for debugging the internals of ICU without the use of | |
33 * a traditional debugger. | |
34 * | |
35 * By default, tracing is disabled in ICU. If you need to debug ICU with | |
36 * tracing, please compile ICU with the --enable-tracing configure option. | |
37 */ | |
38 | |
39 U_CDECL_BEGIN | |
40 | |
41 /** | |
42 * Trace severity levels. Higher levels increase the verbosity of the trace output. | |
43 * @see utrace_setLevel | |
44 * @stable ICU 2.8 | |
45 */ | |
46 typedef enum UTraceLevel { | |
47 /** Disable all tracing @stable ICU 2.8*/ | |
48 UTRACE_OFF=-1, | |
49 /** Trace error conditions only @stable ICU 2.8*/ | |
50 UTRACE_ERROR=0, | |
51 /** Trace errors and warnings @stable ICU 2.8*/ | |
52 UTRACE_WARNING=3, | |
53 /** Trace opens and closes of ICU services @stable ICU 2.8*/ | |
54 UTRACE_OPEN_CLOSE=5, | |
55 /** Trace an intermediate number of ICU operations @stable ICU 2.8*/ | |
56 UTRACE_INFO=7, | |
57 /** Trace the maximum number of ICU operations @stable ICU 2.8*/ | |
58 UTRACE_VERBOSE=9 | |
59 } UTraceLevel; | |
60 | |
61 /** | |
62 * These are the ICU functions that will be traced when tracing is enabled. | |
63 * @stable ICU 2.8 | |
64 */ | |
65 typedef enum UTraceFunctionNumber { | |
66 UTRACE_FUNCTION_START=0, | |
67 UTRACE_U_INIT=UTRACE_FUNCTION_START, | |
68 UTRACE_U_CLEANUP, | |
69 | |
70 #ifndef U_HIDE_DEPRECATED_API | |
71 /** | |
72 * One more than the highest normal collation trace location. | |
73 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. | |
74 */ | |
75 UTRACE_FUNCTION_LIMIT, | |
76 #endif // U_HIDE_DEPRECATED_API | |
77 | |
78 UTRACE_CONVERSION_START=0x1000, | |
79 UTRACE_UCNV_OPEN=UTRACE_CONVERSION_START, | |
80 UTRACE_UCNV_OPEN_PACKAGE, | |
81 UTRACE_UCNV_OPEN_ALGORITHMIC, | |
82 UTRACE_UCNV_CLONE, | |
83 UTRACE_UCNV_CLOSE, | |
84 UTRACE_UCNV_FLUSH_CACHE, | |
85 UTRACE_UCNV_LOAD, | |
86 UTRACE_UCNV_UNLOAD, | |
87 | |
88 #ifndef U_HIDE_DEPRECATED_API | |
89 /** | |
90 * One more than the highest normal collation trace location. | |
91 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. | |
92 */ | |
93 UTRACE_CONVERSION_LIMIT, | |
94 #endif // U_HIDE_DEPRECATED_API | |
95 | |
96 UTRACE_COLLATION_START=0x2000, | |
97 UTRACE_UCOL_OPEN=UTRACE_COLLATION_START, | |
98 UTRACE_UCOL_CLOSE, | |
99 UTRACE_UCOL_STRCOLL, | |
100 UTRACE_UCOL_GET_SORTKEY, | |
101 UTRACE_UCOL_GETLOCALE, | |
102 UTRACE_UCOL_NEXTSORTKEYPART, | |
103 UTRACE_UCOL_STRCOLLITER, | |
104 UTRACE_UCOL_OPEN_FROM_SHORT_STRING, | |
105 UTRACE_UCOL_STRCOLLUTF8, /**< @stable ICU 50 */ | |
106 | |
107 #ifndef U_HIDE_DEPRECATED_API | |
108 /** | |
109 * One more than the highest normal collation trace location. | |
110 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. | |
111 */ | |
112 UTRACE_COLLATION_LIMIT, | |
113 #endif // U_HIDE_DEPRECATED_API | |
114 | |
115 #ifndef U_HIDE_DRAFT_API | |
116 | |
117 /** | |
118 * The lowest resource/data location. | |
119 * @draft ICU 65 | |
120 */ | |
121 UTRACE_UDATA_START=0x3000, | |
122 | |
123 /** | |
124 * Indicates that a value was read from a resource bundle. Provides three | |
125 * C-style strings to UTraceData: type, file name, and resource path. The | |
126 * possible types are: | |
127 * | |
128 * - "string" (a string value was accessed) | |
129 * - "binary" (a binary value was accessed) | |
130 * - "intvector" (a integer vector value was accessed) | |
131 * - "int" (a signed integer value was accessed) | |
132 * - "uint" (a unsigned integer value was accessed) | |
133 * - "get" (a path was loaded, but the value was not accessed) | |
134 * - "getalias" (a path was loaded, and an alias was resolved) | |
135 * | |
136 * @draft ICU 65 | |
137 */ | |
138 UTRACE_UDATA_RESOURCE=UTRACE_UDATA_START, | |
139 | |
140 /** | |
141 * Indicates that a resource bundle was opened. | |
142 * | |
143 * Provides one C-style string to UTraceData: file name. | |
144 * @draft ICU 65 | |
145 */ | |
146 UTRACE_UDATA_BUNDLE, | |
147 | |
148 /** | |
149 * Indicates that a data file was opened, but not *.res files. | |
150 * | |
151 * Provides one C-style string to UTraceData: file name. | |
152 * | |
153 * @draft ICU 65 | |
154 */ | |
155 UTRACE_UDATA_DATA_FILE, | |
156 | |
157 /** | |
158 * Indicates that a *.res file was opened. | |
159 * | |
160 * This differs from UTRACE_UDATA_BUNDLE because a res file is typically | |
161 * opened only once per application runtime, but the bundle corresponding | |
162 * to that res file may be opened many times. | |
163 * | |
164 * Provides one C-style string to UTraceData: file name. | |
165 * | |
166 * @draft ICU 65 | |
167 */ | |
168 UTRACE_UDATA_RES_FILE, | |
169 | |
170 #endif // U_HIDE_DRAFT_API | |
171 | |
172 #ifndef U_HIDE_INTERNAL_API | |
173 /** | |
174 * One more than the highest normal resource/data trace location. | |
175 * @internal The numeric value may change over time, see ICU ticket #12420. | |
176 */ | |
177 UTRACE_RES_DATA_LIMIT, | |
178 #endif // U_HIDE_INTERNAL_API | |
179 | |
180 #ifndef U_HIDE_DRAFT_API | |
181 /** | |
182 * The lowest break iterator location. | |
183 * @draft ICU 67 | |
184 */ | |
185 UTRACE_UBRK_START=0x4000, | |
186 | |
187 /** | |
188 * Indicates that a character instance of break iterator was created. | |
189 * | |
190 * @draft ICU 67 | |
191 */ | |
192 UTRACE_UBRK_CREATE_CHARACTER = UTRACE_UBRK_START, | |
193 | |
194 /** | |
195 * Indicates that a word instance of break iterator was created. | |
196 * | |
197 * @draft ICU 67 | |
198 */ | |
199 UTRACE_UBRK_CREATE_WORD, | |
200 | |
201 /** | |
202 * Indicates that a line instance of break iterator was created. | |
203 * | |
204 * Provides one C-style string to UTraceData: the lb value ("", | |
205 * "loose", "strict", or "normal"). | |
206 * | |
207 * @draft ICU 67 | |
208 */ | |
209 UTRACE_UBRK_CREATE_LINE, | |
210 | |
211 /** | |
212 * Indicates that a sentence instance of break iterator was created. | |
213 * | |
214 * @draft ICU 67 | |
215 */ | |
216 UTRACE_UBRK_CREATE_SENTENCE, | |
217 | |
218 /** | |
219 * Indicates that a title instance of break iterator was created. | |
220 * | |
221 * @draft ICU 67 | |
222 */ | |
223 UTRACE_UBRK_CREATE_TITLE, | |
224 | |
225 /** | |
226 * Indicates that an internal dictionary break engine was created. | |
227 * | |
228 * Provides one C-style string to UTraceData: the script code of what | |
229 * the break engine cover ("Hani", "Khmr", "Laoo", "Mymr", or "Thai"). | |
230 * | |
231 * @draft ICU 67 | |
232 */ | |
233 UTRACE_UBRK_CREATE_BREAK_ENGINE, | |
234 | |
235 #endif // U_HIDE_DRAFT_API | |
236 | |
237 #ifndef U_HIDE_INTERNAL_API | |
238 /** | |
239 * One more than the highest normal break iterator trace location. | |
240 * @internal The numeric value may change over time, see ICU ticket #12420. | |
241 */ | |
242 UTRACE_UBRK_LIMIT, | |
243 #endif // U_HIDE_INTERNAL_API | |
244 | |
245 } UTraceFunctionNumber; | |
246 | |
247 /** | |
248 * Setter for the trace level. | |
249 * @param traceLevel A UTraceLevel value. | |
250 * @stable ICU 2.8 | |
251 */ | |
252 U_STABLE void U_EXPORT2 | |
253 utrace_setLevel(int32_t traceLevel); | |
254 | |
255 /** | |
256 * Getter for the trace level. | |
257 * @return The UTraceLevel value being used by ICU. | |
258 * @stable ICU 2.8 | |
259 */ | |
260 U_STABLE int32_t U_EXPORT2 | |
261 utrace_getLevel(void); | |
262 | |
263 /* Trace function pointers types ----------------------------- */ | |
264 | |
265 /** | |
266 * Type signature for the trace function to be called when entering a function. | |
267 * @param context value supplied at the time the trace functions are set. | |
268 * @param fnNumber Enum value indicating the ICU function being entered. | |
269 * @stable ICU 2.8 | |
270 */ | |
271 typedef void U_CALLCONV | |
272 UTraceEntry(const void *context, int32_t fnNumber); | |
273 | |
274 /** | |
275 * Type signature for the trace function to be called when exiting from a function. | |
276 * @param context value supplied at the time the trace functions are set. | |
277 * @param fnNumber Enum value indicating the ICU function being exited. | |
278 * @param fmt A formatting string that describes the number and types | |
279 * of arguments included with the variable args. The fmt | |
280 * string has the same form as the utrace_vformat format | |
281 * string. | |
282 * @param args A variable arguments list. Contents are described by | |
283 * the fmt parameter. | |
284 * @see utrace_vformat | |
285 * @stable ICU 2.8 | |
286 */ | |
287 typedef void U_CALLCONV | |
288 UTraceExit(const void *context, int32_t fnNumber, | |
289 const char *fmt, va_list args); | |
290 | |
291 /** | |
292 * Type signature for the trace function to be called from within an ICU function | |
293 * to display data or messages. | |
294 * @param context value supplied at the time the trace functions are set. | |
295 * @param fnNumber Enum value indicating the ICU function being exited. | |
296 * @param level The current tracing level | |
297 * @param fmt A format string describing the tracing data that is supplied | |
298 * as variable args | |
299 * @param args The data being traced, passed as variable args. | |
300 * @stable ICU 2.8 | |
301 */ | |
302 typedef void U_CALLCONV | |
303 UTraceData(const void *context, int32_t fnNumber, int32_t level, | |
304 const char *fmt, va_list args); | |
305 | |
306 /** | |
307 * Set ICU Tracing functions. Installs application-provided tracing | |
308 * functions into ICU. After doing this, subsequent ICU operations | |
309 * will call back to the installed functions, providing a trace | |
310 * of the use of ICU. Passing a NULL pointer for a tracing function | |
311 * is allowed, and inhibits tracing action at points where that function | |
312 * would be called. | |
313 * <p> | |
314 * Tracing and Threads: Tracing functions are global to a process, and | |
315 * will be called in response to ICU operations performed by any | |
316 * thread. If tracing of an individual thread is desired, the | |
317 * tracing functions must themselves filter by checking that the | |
318 * current thread is the desired thread. | |
319 * | |
320 * @param context an uninterpreted pointer. Whatever is passed in | |
321 * here will in turn be passed to each of the tracing | |
322 * functions UTraceEntry, UTraceExit and UTraceData. | |
323 * ICU does not use or alter this pointer. | |
324 * @param e Callback function to be called on entry to a | |
325 * a traced ICU function. | |
326 * @param x Callback function to be called on exit from a | |
327 * traced ICU function. | |
328 * @param d Callback function to be called from within a | |
329 * traced ICU function, for the purpose of providing | |
330 * data to the trace. | |
331 * | |
332 * @stable ICU 2.8 | |
333 */ | |
334 U_STABLE void U_EXPORT2 | |
335 utrace_setFunctions(const void *context, | |
336 UTraceEntry *e, UTraceExit *x, UTraceData *d); | |
337 | |
338 /** | |
339 * Get the currently installed ICU tracing functions. Note that a null function | |
340 * pointer will be returned if no trace function has been set. | |
341 * | |
342 * @param context The currently installed tracing context. | |
343 * @param e The currently installed UTraceEntry function. | |
344 * @param x The currently installed UTraceExit function. | |
345 * @param d The currently installed UTraceData function. | |
346 * @stable ICU 2.8 | |
347 */ | |
348 U_STABLE void U_EXPORT2 | |
349 utrace_getFunctions(const void **context, | |
350 UTraceEntry **e, UTraceExit **x, UTraceData **d); | |
351 | |
352 | |
353 | |
354 /* | |
355 * | |
356 * ICU trace format string syntax | |
357 * | |
358 * Format Strings are passed to UTraceData functions, and define the | |
359 * number and types of the trace data being passed on each call. | |
360 * | |
361 * The UTraceData function, which is supplied by the application, | |
362 * not by ICU, can either forward the trace data (passed via | |
363 * varargs) and the format string back to ICU for formatting into | |
364 * a displayable string, or it can interpret the format itself, | |
365 * and do as it wishes with the trace data. | |
366 * | |
367 * | |
368 * Goals for the format string | |
369 * - basic data output | |
370 * - easy to use for trace programmer | |
371 * - sufficient provision for data types for trace output readability | |
372 * - well-defined types and binary portable APIs | |
373 * | |
374 * Non-goals | |
375 * - printf compatibility | |
376 * - fancy formatting | |
377 * - argument reordering and other internationalization features | |
378 * | |
379 * ICU trace format strings contain plain text with argument inserts, | |
380 * much like standard printf format strings. | |
381 * Each insert begins with a '%', then optionally contains a 'v', | |
382 * then exactly one type character. | |
383 * Two '%' in a row represent a '%' instead of an insert. | |
384 * The trace format strings need not have \n at the end. | |
385 * | |
386 * | |
387 * Types | |
388 * ----- | |
389 * | |
390 * Type characters: | |
391 * - c A char character in the default codepage. | |
392 * - s A NUL-terminated char * string in the default codepage. | |
393 * - S A UChar * string. Requires two params, (ptr, length). Length=-1 for nul term. | |
394 * - b A byte (8-bit integer). | |
395 * - h A 16-bit integer. Also a 16 bit Unicode code unit. | |
396 * - d A 32-bit integer. Also a 20 bit Unicode code point value. | |
397 * - l A 64-bit integer. | |
398 * - p A data pointer. | |
399 * | |
400 * Vectors | |
401 * ------- | |
402 * | |
403 * If the 'v' is not specified, then one item of the specified type | |
404 * is passed in. | |
405 * If the 'v' (for "vector") is specified, then a vector of items of the | |
406 * specified type is passed in, via a pointer to the first item | |
407 * and an int32_t value for the length of the vector. | |
408 * Length==-1 means zero or NUL termination. Works for vectors of all types. | |
409 * | |
410 * Note: %vS is a vector of (UChar *) strings. The strings must | |
411 * be nul terminated as there is no way to provide a | |
412 * separate length parameter for each string. The length | |
413 * parameter (required for all vectors) is the number of | |
414 * strings, not the length of the strings. | |
415 * | |
416 * Examples | |
417 * -------- | |
418 * | |
419 * These examples show the parameters that will be passed to an application's | |
420 * UTraceData() function for various formats. | |
421 * | |
422 * - the precise formatting is up to the application! | |
423 * - the examples use type casts for arguments only to _show_ the types of | |
424 * arguments without needing variable declarations in the examples; | |
425 * the type casts will not be necessary in actual code | |
426 * | |
427 * UTraceDataFunc(context, fnNumber, level, | |
428 * "There is a character %c in the string %s.", // Format String | |
429 * (char)c, (const char *)s); // varargs parameters | |
430 * -> There is a character 0x42 'B' in the string "Bravo". | |
431 * | |
432 * UTraceDataFunc(context, fnNumber, level, | |
433 * "Vector of bytes %vb vector of chars %vc", | |
434 * (const uint8_t *)bytes, (int32_t)bytesLength, | |
435 * (const char *)chars, (int32_t)charsLength); | |
436 * -> Vector of bytes | |
437 * 42 63 64 3f [4] | |
438 * vector of chars | |
439 * "Bcd?"[4] | |
440 * | |
441 * UTraceDataFunc(context, fnNumber, level, | |
442 * "An int32_t %d and a whole bunch of them %vd", | |
443 * (int32_t)-5, (const int32_t *)ints, (int32_t)intsLength); | |
444 * -> An int32_t 0xfffffffb and a whole bunch of them | |
445 * fffffffb 00000005 0000010a [3] | |
446 * | |
447 */ | |
448 | |
449 | |
450 | |
451 /** | |
452 * Trace output Formatter. An application's UTraceData tracing functions may call | |
453 * back to this function to format the trace output in a | |
454 * human readable form. Note that a UTraceData function may choose | |
455 * to not format the data; it could, for example, save it in | |
456 * in the raw form it was received (more compact), leaving | |
457 * formatting for a later trace analysis tool. | |
458 * @param outBuf pointer to a buffer to receive the formatted output. Output | |
459 * will be nul terminated if there is space in the buffer - | |
460 * if the length of the requested output < the output buffer size. | |
461 * @param capacity Length of the output buffer. | |
462 * @param indent Number of spaces to indent the output. Intended to allow | |
463 * data displayed from nested functions to be indented for readability. | |
464 * @param fmt Format specification for the data to output | |
465 * @param args Data to be formatted. | |
466 * @return Length of formatted output, including the terminating NUL. | |
467 * If buffer capacity is insufficient, the required capacity is returned. | |
468 * @stable ICU 2.8 | |
469 */ | |
470 U_STABLE int32_t U_EXPORT2 | |
471 utrace_vformat(char *outBuf, int32_t capacity, | |
472 int32_t indent, const char *fmt, va_list args); | |
473 | |
474 /** | |
475 * Trace output Formatter. An application's UTraceData tracing functions may call | |
476 * this function to format any additional trace data, beyond that | |
477 * provided by default, in human readable form with the same | |
478 * formatting conventions used by utrace_vformat(). | |
479 * @param outBuf pointer to a buffer to receive the formatted output. Output | |
480 * will be nul terminated if there is space in the buffer - | |
481 * if the length of the requested output < the output buffer size. | |
482 * @param capacity Length of the output buffer. | |
483 * @param indent Number of spaces to indent the output. Intended to allow | |
484 * data displayed from nested functions to be indented for readability. | |
485 * @param fmt Format specification for the data to output | |
486 * @param ... Data to be formatted. | |
487 * @return Length of formatted output, including the terminating NUL. | |
488 * If buffer capacity is insufficient, the required capacity is returned. | |
489 * @stable ICU 2.8 | |
490 */ | |
491 U_STABLE int32_t U_EXPORT2 | |
492 utrace_format(char *outBuf, int32_t capacity, | |
493 int32_t indent, const char *fmt, ...); | |
494 | |
495 | |
496 | |
497 /* Trace function numbers --------------------------------------------------- */ | |
498 | |
499 /** | |
500 * Get the name of a function from its trace function number. | |
501 * | |
502 * @param fnNumber The trace number for an ICU function. | |
503 * @return The name string for the function. | |
504 * | |
505 * @see UTraceFunctionNumber | |
506 * @stable ICU 2.8 | |
507 */ | |
508 U_STABLE const char * U_EXPORT2 | |
509 utrace_functionName(int32_t fnNumber); | |
510 | |
511 U_CDECL_END | |
512 | |
513 #endif |