SIONlib  1.7.1
Scalable I/O library for parallel access to task-local files
sion_keyvalue_keymngr.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #ifndef SION_SION_KEYVALUE_KEYMNGR_H
15 #define SION_SION_KEYVALUE_KEYMNGR_H
16 
17 #include <stdint.h>
18 
19 /* for key-type */
20 #include "sion_keyvalue_table.h"
21 
22 /* keyvalue_keymngr: handles memory based tables storing blocks for each key */
23 
25 
26 _sion_keyvalue_keymngr* _sion_keyvalue_keymngr_init(int size);
27 int _sion_keyvalue_keymngr_destroy(_sion_keyvalue_keymngr** keymngr);
28 
29 _sion_keyvalue_keymngr* _sion_keyvalue_keymngr_dup(_sion_keyvalue_keymngr* keymngr_orig, int dup_mode, sion_table_key_t sel_key);
30 
31 /* add info (offset and len) about a new block for a key */
32 int _sion_keyvalue_keymngr_add_block(_sion_keyvalue_keymngr* keymngr, sion_table_key_t key, size_t offset, size_t len);
33 
34 /* update internal data of a key by advancing current_pos of that key by bytes_read
35  if a block is fully read, the meta data is no longer needed and the block will be destroyed */
36 int _sion_keyvalue_keymngr_update_read_pos(_sion_keyvalue_keymngr* keymngr, sion_table_key_t key, size_t bytes_read, sion_int64 current_pos);
37 
38 /* searches for info about a key, if available (SION_SUCCESS) current_pos and
39  bytes_left are returned, otherwise SION_NOT_SUCCESS */
40 int _sion_keyvalue_keymngr_lookup(_sion_keyvalue_keymngr* keymngr, sion_table_key_t key, size_t *current_pos, size_t *bytes_left);
41 
42 /* searches for info about a key at position (entrynum,posinentry), if
43  available (SION_SUCCESS) current_pos and bytes_left are returned, otherwise
44  SION_NOT_SUCCESS. In addition, on success the current_block/pos of that
45  key is set to this position */
46 int _sion_keyvalue_keymngr_lookup_and_set_pos(_sion_keyvalue_keymngr* keymngr, sion_table_key_t key, int entrynum, sion_int64 posinentry,
47  size_t *current_pos, size_t *bytes_left);
48 
49 /* sets next position from where next meta data could be read */
50 int _sion_keyvalue_keymngr_set_next_scan_pos(_sion_keyvalue_keymngr* keymngr, size_t pos);
51 
52 /* gets next position from where next meta data could be read */
53 int _sion_keyvalue_keymngr_get_next_scan_pos(_sion_keyvalue_keymngr* keymngr, size_t *pos);
54 
55 /* get/setter for flag scan_done: all data about keys is stored in keymngr */
56 int _sion_keyvalue_keymngr_set_scan_done(_sion_keyvalue_keymngr* keymngr);
57 int _sion_keyvalue_keymngr_is_scan_done(_sion_keyvalue_keymngr* keymngr);
58 
59 
60 
61 /* iterator to run over all blocks of all keys in write order */
62 int _sion_keyvalue_keymngr_iterator_reset(_sion_keyvalue_keymngr* keymngr);
63 /* current_pos is set to a value if current read position is in this block, otherwise -1 */
64 int _sion_keyvalue_keymngr_iterator_next(_sion_keyvalue_keymngr* keymngr, sion_table_key_t *key, size_t *current_pos, size_t *offset, size_t *len);
65 
66 /* iterator to get key list */
67 int _sion_keyvalue_keymngr_key_list_iterator_reset(_sion_keyvalue_keymngr* keymngr);
68 int _sion_keyvalue_keymngr_key_list_iterator_next(_sion_keyvalue_keymngr* keymngr, sion_table_key_t *key);
69 
70 int _sion_keyvalue_keymngr_key_get_stat(_sion_keyvalue_keymngr* keymngr, sion_table_key_t key, sion_key_stat_t *keystat);
71 
72 int _sion_keyvalue_keymngr_key_get_sizeof(_sion_keyvalue_keymngr* keymngr);
73 
74 #endif