root/trunk/ARBDB/gb_memory.h

Revision 8041, 4.2 KB (checked in by westram, 8 months ago)

merge from dev [7990] [7991] [7992] [7993] [7994] [7995] [7996] [7998] [8001] [8003] [8005] [8006] [8007] [8008] [8009] [8011] [8012] [8019]

  • added a faked ecoli to ptserver test-db
  • added unit-tests for gene-ptserver
  • rename ptserver testdb
  • ptserver db-cleanup
    • size of mapfile for SSUREF108 is reduced by 85% (3,4Gb -> 519Mb)
  • ptserver
    • refactored
      • prefix tree builders
      • probe_input_data
    • removed ptnd_new_match (dead code)
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : gb_memory.h                                       //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Institute of Microbiology (Technical University Munich)       //
7//   http://www.arb-home.de/                                       //
8//                                                                 //
9// =============================================================== //
10
11#ifndef GB_MEMORY_H
12#define GB_MEMORY_H
13
14#if defined(DEBUG)
15#define MEMORY_TEST 1
16// MEMORY_TEST == 1 uses malloc and normal pointers for internal ARBDB memory
17// -> memory checkers like valgrand work
18// -> loading DB is slower (file must be parsed completely)
19#else
20#define MEMORY_TEST 0
21// MEMORY_TEST == 0 uses own allocation and relative pointers for internal ARBDB memory
22// -> memory checkers like valgrand won't be very useful
23// -> debugging is difficult, cause it's difficult to follow pointers
24// -> DB loads w/o delay, cause it's mmap'ped into memory
25#endif
26
27#if defined(UNIT_TESTS)
28#undef MEMORY_TEST
29#define MEMORY_TEST 0 // test mmapped-DB version in unittests (recommended setting)
30// #define MEMORY_TEST 1 // test DEBUG DB version in unittests
31#endif
32
33struct gb_if_entries;
34struct gb_index_files;
35struct gb_header_list;
36struct GBDATA;
37struct GBCONTAINER;
38
39#if (MEMORY_TEST==1)
40
41typedef void            *GB_REL_ADD;
42typedef char            *GB_REL_STRING;
43typedef GBDATA          *GB_REL_GBDATA;
44typedef GBCONTAINER     *GB_REL_CONTAINER;
45typedef gb_header_list  *GB_REL_HLS;
46typedef gb_if_entries   *GB_REL_IFES;
47typedef gb_index_files  *GB_REL_IFS;
48typedef gb_if_entries  **GB_REL_PIFES;
49
50#define UNUSED_IN_MEMTEST(param) param = param
51
52#else
53
54typedef long GB_REL_ADD;
55typedef long GB_REL_STRING;
56typedef long GB_REL_GBDATA;
57typedef long GB_REL_CONTAINER;
58typedef long GB_REL_HLS;
59typedef long GB_REL_IFES;
60typedef long GB_REL_IFS;
61typedef long GB_REL_PIFES;
62
63#endif
64
65// -------------------------------
66//      GB_RESOLVE / GB_SETREL
67//
68// set GB_REL_* "pointers"
69
70#if (MEMORY_TEST==1)
71
72#define GB_RESOLVE(typ, struct_add, member_name)    ((typ)((struct_add)->member_name))
73#define GB_SETREL(struct_add, member_name, address) (struct_add)->member_name = (address)
74
75#else
76
77#define GB_RESOLVE(typ, struct_add, member_name)                       \
78    ((typ)(((struct_add)->member_name)                                 \
79           ? (typ) (((char*)(struct_add))+((struct_add)->member_name)) \
80           : NULL))
81
82#define GB_SETREL(struct_add, member_name, address)                     \
83    do {                                                                \
84        char *pntr = (char *)(address);                                 \
85        if (pntr) {                                                     \
86            (struct_add)->member_name = (char*)(pntr)-(char*)(struct_add); \
87        }                                                               \
88        else {                                                          \
89            (struct_add)->member_name = 0;                              \
90        }                                                               \
91    } while (0)
92
93
94#endif
95
96// --------------------------------
97//      ARBDB memory functions
98
99enum ARB_MEMORY_INDEX {
100    GBM_CB_INDEX     = -1,
101    GBM_HASH_INDEX   = -2,
102    GBM_HEADER_INDEX = -3,
103    GBM_UNDO         = -4,
104    GBM_DICT_INDEX   = -5,
105    GBM_USER_INDEX   = -6
106};
107
108// gbm_get_mem returns a block filled with zero (like calloc() does)
109
110#if (MEMORY_TEST==1)
111
112void *GB_calloc(unsigned int nelem, unsigned int elsize);
113
114inline void *gbm_get_mem(size_t size, long )          { return (char*)GB_calloc(1, size); }
115inline void gbm_free_mem(void *block, size_t , long ) { free(block); }
116
117#else
118
119void *gbmGetMemImpl(size_t size, long index);
120void gbmFreeMemImpl(void *data, size_t size, long index);
121
122inline void *gbm_get_mem(size_t size, long index)              { return gbmGetMemImpl(size, index); }
123inline void gbm_free_mem(void *block, size_t size, long index) { gbmFreeMemImpl(block, size, index); }
124
125#endif
126
127#else
128#error gb_memory.h included twice
129#endif // GB_MEMORY_H
Note: See TracBrowser for help on using the browser.