SURFEX v8.1
General documentation of Surfex
lfi_fmul.c
Go to the documentation of this file.
1 /**** *lfi_fmul.c* - Handle a list of KNUMER/KFACTM
2  *
3  * Author.
4  * -------
5  * Philippe Marguinaud *METEO-FRANCE*
6  * Original : 12-08-2013
7  *
8  * Description :
9  * Implement an associative array KNUMER => KFACTM
10  */
11 #include <stdlib.h>
12 #include "lfi_fmul.h"
13 
14 /* Insert a new pair KNUMER/KFACTM; if KNUMER already exists, then it is updated with the new KFACTM */
15 lfi_fmul_t * lfi_fmul_set (lfi_fmul_t ** fmul, const integer64 * KNUMER, const integer64 * KFACTM)
16 {
17  lfi_fmul_t * fm;
18  integer64 IFACTM;
19 
20  fm = lfi_fmul_get (*fmul, KNUMER, &IFACTM);
21 
22  if (fm == NULL)
23  {
24  fm = (lfi_fmul_t *)malloc (sizeof (lfi_fmul_t));
25  fm->next = *fmul;
26  *fmul = fm;
27  }
28 
29  fm->mult = *KFACTM;
30  fm->unit = *KNUMER;
31 
32  return fm;
33 }
34 
35 /* Get a KFACTM given a KNUMER */
37 {
38  lfi_fmul_t * fm;
39  for (fm = fmul; fm; fm = fm->next)
40  if (fm->unit == *KNUMER)
41  {
42  *KFACTM = fm->mult;
43  return fm;
44  }
45  return NULL;
46 }
47 
48 /* Delete a KNUMER entry */
50 {
51 
52  lfi_fmul_t * fm, * fn;
53  for (fn = NULL, fm = *fmul; fm; fn = fm, fm = fm->next)
54  if (fm->unit == *KNUMER)
55  {
56  integer64 fmult = fm->mult;
57  if (fn != NULL)
58  fn->next = fm->next;
59  else
60  *fmul = fm->next;
61  free (fm);
62  return fmult;
63  }
64  return -1;
65 }
66 
67 /* Free a whole list */
68 void lfi_fmul_free (lfi_fmul_t ** fmul)
69 {
70  lfi_fmul_t * fm;
71  for (fm = *fmul; fm; )
72  {
73  lfi_fmul_t * fn = fm->next;
74  free (fm);
75  fm = fn;
76  }
77  *fmul = NULL;
78 }
79 
lfi_fmul_t * lfi_fmul_get(lfi_fmul_t *fmul, const integer64 *KNUMER, integer64 *KFACTM)
Definition: lfi_fmul.c:36
lfi_fmul_t * lfi_fmul_set(lfi_fmul_t **fmul, const integer64 *KNUMER, const integer64 *KFACTM)
Definition: lfi_fmul.c:15
struct lfi_fmul_t * next
Definition: lfi_fmul.h:16
integer64 mult
Definition: lfi_fmul.h:17
integer64 unit
Definition: lfi_fmul.h:18
long long int integer64
Definition: lfi_type.h:15
integer64 lfi_fmul_del(lfi_fmul_t **fmul, const integer64 *KNUMER)
Definition: lfi_fmul.c:49
void lfi_fmul_free(lfi_fmul_t **fmul)
Definition: lfi_fmul.c:68
INTERFACE SUBROUTINE FACILO KNUMER
Definition: facilo.h:4