aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2024-01-19 09:52:01 +0100
committerThomas White <taw@physics.org>2024-02-06 16:59:35 +0100
commit9a907d58a931472eb1178c42bfa1e7629e30ab00 (patch)
tree5d7e5e31e72960b82dfe321c4b081dbd19cd1bea /libcrystfel
parent1b4fdfa5cc1ab4fe9a1cdcbb0bf1602834eaec13 (diff)
Ownership for Crystal.Cell
Diffstat (limited to 'libcrystfel')
-rw-r--r--libcrystfel/src/crystal.c11
-rw-r--r--libcrystfel/src/crystal.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/libcrystfel/src/crystal.c b/libcrystfel/src/crystal.c
index e6ae4b09..0cf246ae 100644
--- a/libcrystfel/src/crystal.c
+++ b/libcrystfel/src/crystal.c
@@ -41,6 +41,7 @@
struct _crystal
{
UnitCell *cell;
+ int owns_cell;
double m; /* Mosaicity in radians */
double osf;
double Bfac;
@@ -72,6 +73,7 @@ Crystal *crystal_new()
if ( cryst == NULL ) return NULL;
cryst->cell = NULL;
+ cryst->owns_cell = 1;
cryst->m = 0.0;
cryst->osf = 1.0;
cryst->Bfac = 0.0;
@@ -128,6 +130,7 @@ Crystal *crystal_copy(const Crystal *cryst)
void crystal_free(Crystal *cryst)
{
if ( cryst == NULL ) return;
+ if ( cryst->owns_cell ) cell_free(cryst->cell);
cffree(cryst->notes);
cffree(cryst);
}
@@ -142,6 +145,13 @@ UnitCell *crystal_get_cell(Crystal *cryst)
}
+UnitCell *crystal_relinquish_cell(Crystal *cryst)
+{
+ cryst->owns_cell = 0;
+ return cryst->cell;
+}
+
+
const UnitCell *crystal_get_cell_const(const Crystal *cryst)
{
return cryst->cell;
@@ -217,6 +227,7 @@ void crystal_set_cell(Crystal *cryst, UnitCell *cell)
{
if ( cryst->owns_cell ) cell_free(cryst->cell);
cryst->cell = cell;
+ cryst->owns_cell = 1;
}
diff --git a/libcrystfel/src/crystal.h b/libcrystfel/src/crystal.h
index 7147111f..1804fa35 100644
--- a/libcrystfel/src/crystal.h
+++ b/libcrystfel/src/crystal.h
@@ -52,6 +52,7 @@ extern Crystal *crystal_copy(const Crystal *cryst);
extern void crystal_free(Crystal *cryst);
extern UnitCell *crystal_get_cell(Crystal *cryst);
+extern UnitCell *crystal_relinquish_cell(Crystal *cryst);
extern double crystal_get_profile_radius(const Crystal *cryst);
extern double crystal_get_resolution_limit(Crystal *cryst);
extern int crystal_get_user_flag(Crystal *cryst);