diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-06-26 17:21:03 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-07-18 06:01:07 -0700 |
commit | a5e7f4253ac98ad18354973fda7049e9daaea8eb (patch) | |
tree | 16b95a18d0a1af296e4645d6b7a204b5b325ff01 /core/equipment.h | |
parent | efdb3503eadd7e47cb64b1c252e50488d2e9d0fe (diff) | |
download | subsurface-a5e7f4253ac98ad18354973fda7049e9daaea8eb.tar.gz |
Core: dynamically resize weight table
Replace the fixed-size weightsystem table by a dynamically
relocated table. Reuse the table-macros used in other parts
of the code.
The table stores weightsystem entries, not pointers to
weightsystems. Thus, ownership of the description string is
taken when adding a weightsystem. An extra function adds
a cloned weightsystem at the end of the table.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/equipment.h')
-rw-r--r-- | core/equipment.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/core/equipment.h b/core/equipment.h index 4e1585c1f..cc8b8dcea 100644 --- a/core/equipment.h +++ b/core/equipment.h @@ -39,12 +39,25 @@ typedef struct const char *description; /* "integrated", "belt", "ankle" */ } weightsystem_t; +/* Table of weightsystems. Attention: this stores weightsystems, + * *not* pointers * to weightsystems. This has two crucial + * consequences: + * 1) Pointers to weightsystems are not stable. They may be + * invalidated if the table is reallocated. + * 2) add_to_weightsystem_table(), etc. takes ownership of the + * weightsystem. Notably of the description string */ +struct weightsystem_table { + int nr, allocated; + weightsystem_t *weightsystems; +}; + #define MAX_CYLINDERS (20) -#define MAX_WEIGHTSYSTEMS (6) #define MAX_TANK_INFO (100) #define MAX_WS_INFO (100) extern int cylinderuse_from_text(const char *text); +extern void copy_weights(const struct weightsystem_table *s, struct weightsystem_table *d); +extern void add_cloned_weightsystem(struct weightsystem_table *t, weightsystem_t ws); extern void add_cylinder_description(const cylinder_type_t *); extern void add_weightsystem_description(const weightsystem_t *); extern bool same_weightsystem(weightsystem_t w1, weightsystem_t w2); @@ -60,6 +73,10 @@ extern int find_best_gasmix_match(struct gasmix mix, const cylinder_t array[]); extern void dump_cylinders(struct dive *dive, bool verbose); #endif +/* Weightsystem table functions */ +extern void clear_weightsystem_table(struct weightsystem_table *); +extern void add_to_weightsystem_table(struct weightsystem_table *, int idx, weightsystem_t ws); + void get_gas_string(struct gasmix gasmix, char *text, int len); const char *gasname(struct gasmix gasmix); |