aboutsummaryrefslogtreecommitdiff
path: root/src/Handles.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Handles.c')
-rw-r--r--src/Handles.c164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/Handles.c b/src/Handles.c
new file mode 100644
index 0000000..22b0a1a
--- /dev/null
+++ b/src/Handles.c
@@ -0,0 +1,164 @@
+/*@@
+ @file $RCSfile$
+ @author $Author$
+ @date $Date$
+ @desc
+ Register a symmetry, and query the symmetry name/handle mapping
+ @version $Header$
+ @enddesc
+@@*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "cctk.h"
+
+#include "SymBase.h"
+
+
+
+/* the rcs ID and its dummy function to use it */
+static const char *const rcsid = "$Header$";
+CCTK_FILEVERSION (CactusBase_SymBase_Handles_c);
+
+
+
+/* Number of registered symmetries */
+size_t SymBase_num_symmetries;
+
+/* The names of these symmetries */
+const char **SymBase_symmetry_names;
+
+
+
+/*@@
+ @routine SymBase_SymmetryRegister
+ @author Erik Schnetter
+ @date 2004-03-06
+ @desc
+ Register a symmetry
+ @enddesc
+ @var sym_name
+ @vtype CCTK_STRING
+ @vdesc Name of the symmetry
+ @vio in
+ @endvar
+ @returntype CCTK_INT
+ @returndesc
+ >=0 symmetry handle
+ -1 if sym_name has an illegal value
+ -2 if a symmetry with the same name has already been registered
+ @endreturndesc
+@@*/
+
+CCTK_INT
+SymBase_SymmetryRegister (CCTK_STRING const sym_name)
+{
+ int n;
+
+ if (!sym_name)
+ {
+ return -1; /* illegal argument */
+ }
+
+ for (n = 0; n < SymBase_num_symmetries; ++n)
+ {
+ if (strcmp (sym_name, SymBase_symmetry_names[n]) == 0)
+ {
+ return -2; /* symmetry exists already */
+ }
+ }
+
+ SymBase_symmetry_names
+ = realloc (SymBase_symmetry_names,
+ (SymBase_num_symmetries + 1) * sizeof *SymBase_symmetry_names);
+ if (!SymBase_symmetry_names)
+ {
+ CCTK_WARN (0, "internal error");
+ }
+
+ SymBase_symmetry_names[SymBase_num_symmetries] = strdup (sym_name);
+ if (!SymBase_symmetry_names[SymBase_num_symmetries])
+ {
+ CCTK_WARN (0, "internal error");
+ }
+
+ ++SymBase_num_symmetries;
+
+ return SymBase_num_symmetries - 1;
+}
+
+
+
+/*@@
+ @routine SymBase_SymmetryHandleOfName
+ @author Erik Schnetter
+ @date 2004-03-06
+ @desc
+ Map a symmetry name to a symmetry handle
+ @enddesc
+ @var sym_name
+ @vtype CCTK_STRING
+ @vdesc Name of the symmetry
+ @vio in
+ @endvar
+ @returntype CCTK_INT
+ @returndesc
+ >=0 symmetry handle
+ -1 if sym_name has an illegal value
+ -2 if no symmetry with that name has been registered
+ @endreturndesc
+@@*/
+
+CCTK_INT
+SymBase_SymmetryHandleOfName (CCTK_STRING const sym_name)
+{
+ int n;
+
+ if (!sym_name)
+ {
+ return -1; /* illegal argument */
+ }
+
+ for (n = 0; n < SymBase_num_symmetries; ++n)
+ {
+ if (strcmp (sym_name, SymBase_symmetry_names[n]) == 0)
+ {
+ return n; /* found */
+ }
+ }
+
+ return -2; /* not found */
+}
+
+
+
+/*@@
+ @routine SymBase_SymmetryNameOfHandle
+ @author Erik Schnetter
+ @date 2004-03-06
+ @desc
+ Map a symmetry handle to a symmetry name
+ @enddesc
+ @var sym_handle
+ @vtype CCTK_INT
+ @vdesc Symmetry name
+ @vio in
+ @endvar
+ @returntype CCTK_POINTER_TO_CONST
+ @returndesc
+ char const * containing the symmetry name
+ NULL if no symmetry with that handle has been registered
+ @endreturndesc
+@@*/
+
+CCTK_POINTER_TO_CONST
+SymBase_SymmetryNameOfHandle (CCTK_INT const sym_handle)
+{
+ if (sym_handle < 0 || sym_handle >= SymBase_num_symmetries)
+ {
+ return NULL; /* illegal argument */
+ }
+
+ return SymBase_symmetry_names[sym_handle];
+}