| 1246 | | GBQUARK GB_key_2_quark(GBDATA *gbd, const char *s) { |
| 1247 | | long index; |
| 1248 | | GB_MAIN_TYPE *Main = GB_MAIN(gbd); |
| 1249 | | |
| 1250 | | if (!s) return -1; |
| 1251 | | index = GBS_read_hash(Main->key_2_index_hash, s); |
| 1252 | | if (!index) { // create new index |
| 1253 | | index = gb_create_key(Main, s, true); |
| 1254 | | } |
| 1255 | | return (GBQUARK)index; |
| 1256 | | } |
| | 1246 | GBQUARK gb_key_2_existing_quark(GB_MAIN_TYPE *Main, const char *key) { |
| | 1247 | /*! @return existing quark for 'key' |
| | 1248 | * -1 = key is NULL |
| | 1249 | * 0 = no quark exists |
| | 1250 | * else = quark |
| | 1251 | */ |
| | 1252 | |
| | 1253 | GBQUARK quark = -1; |
| | 1254 | if (key) quark = GBS_read_hash(Main->key_2_index_hash, key); |
| | 1255 | return quark; |
| | 1256 | } |
| | 1257 | |
| | 1258 | GBQUARK GB_key_2_quark(GBDATA *gbd, const char *key) { |
| | 1259 | /*! find or create quark for 'key' |
| | 1260 | * @return -1 if key is NULL, else existing or created quark |
| | 1261 | */ |
| | 1262 | |
| | 1263 | GB_MAIN_TYPE *Main = GB_MAIN(gbd); |
| | 1264 | GBQUARK quark = gb_key_2_existing_quark(Main, key); |
| | 1265 | if (!quark) quark = gb_create_key(GB_MAIN(gbd), key, true); |
| | 1266 | return quark; |
| | 1267 | } |
| | 1268 | |
| | 1269 | #if defined(DEVEL_RALF) |
| | 1270 | #warning add gb_NULLkey_2_quark allowing NULL as key |
| | 1271 | #endif // DEVEL_RALF |
| | 1272 | |
| | 1273 | GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *key) { |
| | 1274 | // similar to GB_key_2_quark, |
| | 1275 | // but if 'key' is NULL, quark 0 will be returned. |
| | 1276 | // |
| | 1277 | // Use this function with care. |
| | 1278 | // |
| | 1279 | // Known good use: |
| | 1280 | // - create main entry and its dummy father via gb_make_container() |
| | 1281 | // |
| | 1282 | // Other uses (maybe just to pass GB_MAIN_TYPE instead of GBDATA as GB_key_2_quark likes): |
| | 1283 | // - gb_rename_entry |
| | 1284 | // - gb_make_entry |
| | 1285 | // - compress_sequence_tree |
| | 1286 | // - dictionary compression (several calls) |
| | 1287 | |
| | 1288 | GBQUARK quark = 0; |
| | 1289 | if (key) { |
| | 1290 | quark = gb_key_2_existing_quark(Main, key); |
| | 1291 | if (!quark) quark = gb_create_key(Main, key, true); |
| | 1292 | gb_assert(quark>0); |
| | 1293 | } |
| | 1294 | return quark; |
| | 1295 | } |
| | 1296 | |
| | 1297 | // --------------------------------------------- |
| 1267 | | GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *s) { |
| 1268 | | long index; |
| 1269 | | if (!s) return 0; |
| 1270 | | index = GBS_read_hash(Main->key_2_index_hash, s); |
| 1271 | | if (!index) { // create new index |
| 1272 | | index = gb_create_key(Main, s, true); |
| 1273 | | } |
| 1274 | | return (GBQUARK)index; |
| 1275 | | } |
| 1276 | | |
| 1277 | | |
| 1278 | | |
| 1279 | | |
| 1280 | | long GB_read_clock(GBDATA *gbd) |
| 1281 | | { |
| | 1308 | // --------------------------------------------- |
| | 1309 | |
| | 1310 | long GB_read_clock(GBDATA *gbd) { |