00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef JF_JOURNAL_FILE_TAB_H
00021
#define JF_JOURNAL_FILE_TAB_H
00022
00023
00024
00025
#include <jf/jf_config.h>
00026
00027
00028
00029
#include <jf/jf_journal_file.h>
00030
#include <jf/jf_errors.h>
00031
#include <jf/jf_trace.h>
00032
00033
00034
00035
00036
#ifdef JF_TRACE_MODULE
00037
# define JF_TRACE_MODULE_SAVE JF_TRACE_MODULE
00038
# undef JF_TRACE_MODULE
00039
#else
00040
# undef JF_TRACE_MODULE_SAVE
00041
#endif
00042 #define JF_TRACE_MODULE JF_TRACE_MOD_LIB_JOURNAL_FILE_TAB
00043
00044
00045
00049 #define JF_JOURNAL_FILE_TAB_SIZE 0x1
00050
00053 #define JF_JOURNAL_FILE_TAB_PATH 0x2
00054
00057 #define JF_JOURNAL_FILE_TAB_CTRL 0x4
00058
00063 #define JF_JOURNAL_GLOBAL_FILE_ID 0x0
00064
00065
00066
00067
#ifdef __cplusplus
00068
extern "C" {
00069
#endif
00070
00071
00072
00076 typedef struct {
00081 jf_word_t max_files;
00085 jf_word_t number_of_files;
00089 jf_journal_file_t *files;
00090 }
jf_journal_file_tab_t;
00091
00092
00093
00094
00099 static inline jf_word_t jf_journal_file_tab_get_number_of_files(
00100
const jf_journal_file_tab_t *jft) {
00101
return jft->
number_of_files; }
00102
00103
00104
00109 static inline jf_word_t jf_journal_file_tab_get_max_files(
00110
const jf_journal_file_tab_t *jft) {
00111
return jft->
max_files; }
00112
00113
00114
00121 static inline int jf_journal_file_tab_is_void(
00122
const jf_journal_file_tab_t *jft) {
00123
return (jft->
number_of_files == 0 &&
00124 jft->
max_files == 0 && jft->
files == NULL); }
00125
00126
00127
00135 static inline jf_journal_file_t *
jf_journal_file_tab_get_jfile(
00136
const jf_journal_file_tab_t *jft,
jf_word_t pos) {
00137
if (pos >= jft->
number_of_files) {
00138
JF_TRACE((
"jf_journal_file_tab_get_jfile"
00139
"/ret_cod=%d\n",
JF_RC_OUT_OF_RANGE));
00140
return NULL;
00141 }
00142
return &(jft->
files[pos]);
00143 }
00144
00145
00146
00151
void jf_journal_file_tab_create(
jf_journal_file_tab_t *jft);
00152
00153
00154
00159
void jf_journal_file_tab_destroy(
jf_journal_file_tab_t *jft);
00160
00161
00162
00169
int jf_journal_file_tab_init(
jf_journal_file_tab_t *jft,
00170
jf_word_t max_files);
00171
00172
00173
00185
int jf_journal_file_tab_add(
jf_journal_file_tab_t *jft,
00186
const jf_journal_file_t *jf,
00187
jf_word_t *
id);
00188
00189
00190
00197
int jf_journal_file_tab_del(
jf_journal_file_tab_t *jft,
jf_word_t id);
00198
00199
00200
00214
int jf_journal_file_tab_dump(
const jf_journal_file_tab_t *jft,
00215 FILE *stream,
00216
jf_word_t flags,
jf_word_t id);
00217
00218
00219
00226
int jf_journal_file_tab_restore(
jf_journal_file_tab_t *jft,
00227 FILE *stream);
00228
00229
00230
00243
int jf_journal_file_tab_search(
const jf_journal_file_tab_t *jft,
00244
const char *path,
jf_word_t *pos);
00245
00246
00247
00255
int jf_journal_file_tab_trace(
const jf_journal_file_tab_t *jft,
00256
const char *method, FILE *out_stream);
00257
00258
00259
00264
#ifdef _DEBUG
00265
# define JF_JOURNAL_FILE_TAB_TRACE(j, m, s) \
00266
((JF_TRACE_MODULE & \
00267
(getenv(JF_TRACE_MASK_ENV_VAR) != NULL ? \
00268
strtoul(getenv(JF_TRACE_MASK_ENV_VAR), NULL, 0) : \
00269
0x0)) ? jf_journal_file_tab_trace(j, m, s) : 0)
00270
#else
00271 # define JF_JOURNAL_FILE_TAB_TRACE(j, m, s)
00272
#endif
00273
00274
00275
00276
#ifdef __cplusplus
00277
}
00278
#endif
00279
00280
00281
00282
00283
#ifdef JF_TRACE_MODULE_SAVE
00284
# undef JF_TRACE_MODULE
00285
# define JF_TRACE_MODULE JF_TRACE_MODULE_SAVE
00286
# undef JF_TRACE_MODULE_SAVE
00287
#endif
00288
00289
00290
00291
#endif