Skip to content

Commit 36612f8

Browse files
committed
Add type generic macro for deleting API objects
- dispatch object handles to their respective deconstructor using _Generic - automatically handle pass by reference of the object handle
1 parent b1faf68 commit 36612f8

File tree

4 files changed

+18
-5
lines changed

4 files changed

+18
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ To evaluate a dispersion correction in C four objects are available:
338338
Standard damping parameters like the rational damping are independent of the molecular structure and can easily be reused for several structures or easily exchanged.
339339

340340
The user is responsible for creating and deleting the objects to avoid memory leaks.
341+
For convenience the type-generic macro ``dftd4_delete`` is available to free any memory allocation made in the library.
341342

342343

343344
### Python API

include/dftd4.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ typedef struct _dftd4_model* dftd4_model;
3939
/// Damping parameter class
4040
typedef struct _dftd4_param* dftd4_param;
4141

42+
/*
43+
* Type generic macro for convenience
44+
**/
45+
46+
#define dftd4_delete(ptr) _Generic((ptr), \
47+
dftd4_error: dftd4_delete_error, \
48+
dftd4_structure: dftd4_delete_structure, \
49+
dftd4_model: dftd4_delete_model, \
50+
dftd4_param: dftd4_delete_param \
51+
)(&ptr)
52+
4253
/*
4354
* Global API queries
4455
**/

meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ project(
2323
default_options: [
2424
'buildtype=debugoptimized',
2525
'default_library=both',
26+
'c_std=c11',
2627
],
2728
)
2829
install = not (meson.is_subproject() and get_option('default_library') == 'static')

test/api/example.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ main (void)
7272
if (dftd4_check_error(error)) {return 1;}
7373
dftd4_get_pairwise_dispersion(error, mol, disp, param, pair_disp2, pair_disp3);
7474
if (dftd4_check_error(error)) {return 1;}
75-
dftd4_delete_param(&param);
75+
dftd4_delete(param);
7676

7777
// DSD-BLYP-D4-ATM
7878
param = dftd4_load_rational_damping(error, "dsdblyp", true);
@@ -82,11 +82,11 @@ main (void)
8282
if (dftd4_check_error(error)) {return 1;}
8383
dftd4_get_dispersion(error, mol, disp, param, &energy, gradient, sigma);
8484
if (dftd4_check_error(error)) {return 1;}
85-
dftd4_delete_param(&param);
85+
dftd4_delete(param);
8686

87-
dftd4_delete_model(&disp);
88-
dftd4_delete_structure(&mol);
89-
dftd4_delete_error(&error);
87+
dftd4_delete(disp);
88+
dftd4_delete(mol);
89+
dftd4_delete(error);
9090

9191
assert(!param);
9292
assert(!disp);

0 commit comments

Comments
 (0)