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 #ifndef GWEN_WAIT_CALLBACK_H
00030 #define GWEN_WAIT_CALLBACK_H
00031
00032 #include <gwenhywfar/gwenhywfarapi.h>
00033 #include <gwenhywfar/inherit.h>
00034 #include <gwenhywfar/misc.h>
00035 #include <gwenhywfar/logger.h>
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040 typedef struct GWEN_WAITCALLBACK GWEN_WAITCALLBACK;
00041 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_WAITCALLBACK, GWEN_WaitCallback, GWENHYWFAR_API)
00042 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_WAITCALLBACK, GWENHYWFAR_API)
00043
00044 #ifdef __cplusplus
00045 }
00046 #endif
00047
00048
00049 #include <gwenhywfar/types.h>
00050
00051
00052 #ifdef __cplusplus
00053 extern "C" {
00054 #endif
00055
00075
00076
00077 #include <time.h>
00078
00084 #define GWEN_WAITCALLBACK_PROGRESS_NONE \
00085 ((GWEN_TYPE_UINT64)(-1))
00086
00090 #define GWEN_WAITCALLBACK_PROGRESS_ONE \
00091 ((GWEN_TYPE_UINT64)(-2))
00092
00093
00100 #define GWEN_WAITCALLBACK_LEVEL_REUSED 9999
00101
00107 #define GWEN_WAITCALLBACK_FLAGS_NO_REUSE 0x00000001
00108
00113 #define GWEN_WAITCALLBACK_FLAGS_IMMEDIATELY 0x00000002
00114
00115
00121 #define GWEN_WAITCALLBACK_ID_SIMPLE_PROGRESS \
00122 "GWEN_WAITCALLBACK_ID_SIMPLE_PROGRESS"
00123
00124
00129 #define GWEN_WAITCALLBACK_ID_FAST \
00130 "GWEN_WAITCALLBACK_ID_FAST"
00131
00132
00133
00137 typedef enum {
00139 GWEN_WaitCallbackResult_Continue=0,
00141 GWEN_WaitCallbackResult_Abort
00142 } GWEN_WAITCALLBACK_RESULT;
00143
00144
00149
00161 typedef
00162 GWEN_WAITCALLBACK_RESULT
00163 (*GWEN_WAITCALLBACK_CHECKABORTFN)(GWEN_WAITCALLBACK *ctx,
00164 unsigned int level);
00165
00166
00174 typedef
00175 GWEN_WAITCALLBACK*
00176 (*GWEN_WAITCALLBACK_INSTANTIATEFN)(GWEN_WAITCALLBACK *ctx);
00177
00178
00193 typedef
00194 void
00195 (*GWEN_WAITCALLBACK_LOGFN)(GWEN_WAITCALLBACK *ctx,
00196 unsigned int level,
00197 GWEN_LOGGER_LEVEL loglevel,
00198 const char *s);
00206
00212 GWENHYWFAR_API
00213 GWEN_WAITCALLBACK_RESULT GWEN_WaitCallback();
00214
00215 GWENHYWFAR_API
00216 void GWEN_WaitCallback_free(GWEN_WAITCALLBACK *ctx);
00217
00224 GWENHYWFAR_API
00225 GWEN_WAITCALLBACK_RESULT GWEN_WaitCallbackProgress(GWEN_TYPE_UINT64 pos);
00226
00227
00232 GWENHYWFAR_API
00233 void GWEN_WaitCallback_Enter_u(const char *id,
00234 const char *file,
00235 int line);
00236
00241 GWENHYWFAR_API
00242 void GWEN_WaitCallback_EnterWithText_u(const char *id,
00243 const char *txt,
00244 const char *units,
00245 GWEN_TYPE_UINT32 flags,
00246 const char *file,
00247 int line);
00248
00258 #define GWEN_WaitCallback_Enter(id) \
00259 GWEN_WaitCallback_Enter_u(id, __FILE__, __LINE__)
00260
00261
00268 #define GWEN_WaitCallback_EnterWithText(id, txt, units, flags) \
00269 GWEN_WaitCallback_EnterWithText_u(id, txt, units, flags, __FILE__, __LINE__)
00270
00271
00276 GWENHYWFAR_API
00277 void GWEN_WaitCallback_Leave();
00278
00283 GWENHYWFAR_API
00284 void GWEN_WaitCallback_Log(GWEN_LOGGER_LEVEL logLevel,
00285 const char *s);
00293
00301 GWENHYWFAR_API
00302 void GWEN_WaitCallback_SetProgressTotal(GWEN_TYPE_UINT64 total);
00303
00309 GWENHYWFAR_API
00310 void GWEN_WaitCallback_SetProgressPos(GWEN_TYPE_UINT64 pos);
00311
00319 GWENHYWFAR_API
00320 int GWEN_WaitCallback_GetDistance(const GWEN_WAITCALLBACK *ctx);
00321
00326 GWENHYWFAR_API
00327 int GWEN_WaitCallback_GetNestingLevel(const GWEN_WAITCALLBACK *ctx);
00328
00329
00334 GWENHYWFAR_API
00335 GWEN_TYPE_UINT32 GWEN_WaitCallback_GetFlags(const GWEN_WAITCALLBACK *ctx);
00336
00340 GWENHYWFAR_API
00341 int GWEN_WaitCallback_Register(GWEN_WAITCALLBACK *ctx);
00342
00343 GWENHYWFAR_API
00344 int GWEN_WaitCallback_Unregister(GWEN_WAITCALLBACK *ctx);
00345
00346
00347 #if (defined(GWEN_EXTEND_WAITCALLBACK) || defined(DOXYGEN))
00348
00353
00354 GWENHYWFAR_API
00355 const char *GWEN_WaitCallback_GetId(const GWEN_WAITCALLBACK *ctx);
00356
00361 GWENHYWFAR_API
00362 GWEN_WAITCALLBACK *GWEN_WaitCallback_new(const char *id);
00363
00370 GWENHYWFAR_API
00371 GWEN_TYPE_UINT64
00372 GWEN_WaitCallback_GetProgressPos(const GWEN_WAITCALLBACK *ctx);
00373
00380 GWENHYWFAR_API
00381 GWEN_TYPE_UINT64
00382 GWEN_WaitCallback_GetProgressTotal(const GWEN_WAITCALLBACK *ctx);
00383
00387 GWENHYWFAR_API
00388 const char *GWEN_WaitCallback_GetText(const GWEN_WAITCALLBACK *ctx);
00389
00393 GWENHYWFAR_API
00394 const char *GWEN_WaitCallback_GetUnits(const GWEN_WAITCALLBACK *ctx);
00395
00399 GWENHYWFAR_API
00400 void
00401 GWEN_WaitCallback_SetCheckAbortFn(GWEN_WAITCALLBACK *ctx,
00402 GWEN_WAITCALLBACK_CHECKABORTFN fn);
00403
00407 GWENHYWFAR_API
00408 void
00409 GWEN_WaitCallback_SetInstantiateFn(GWEN_WAITCALLBACK *ctx,
00410 GWEN_WAITCALLBACK_INSTANTIATEFN fn);
00411
00415 GWENHYWFAR_API
00416 void
00417 GWEN_WaitCallback_SetLogFn(GWEN_WAITCALLBACK *ctx,
00418 GWEN_WAITCALLBACK_LOGFN fn);
00419
00424 GWENHYWFAR_API
00425 time_t GWEN_WaitCallback_LastCalled(const GWEN_WAITCALLBACK *ctx);
00426
00427
00432 GWENHYWFAR_API
00433 time_t GWEN_WaitCallback_LastEntered(const GWEN_WAITCALLBACK *ctx);
00434
00435
00441 GWENHYWFAR_API
00442 void GWEN_WaitCallback_SetDistance(GWEN_WAITCALLBACK *ctx,
00443 int d);
00446 #endif
00447
00448
00452 #ifdef __cplusplus
00453 }
00454 #endif
00455
00456
00457 #endif
00458