1/*********************************************************************
2 *   Copyright 1993, UCAR/Unidata
3 *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
4 *   $Header: /upc/share/CVS/netcdf-3/ncgen3/getfill.c,v 1.5 2009/11/24 22:09:09 dmh Exp $
5 *********************************************************************/
6
7#include "netcdf.h"
8#include "generic.h"
9#include "ncgen.h"
10#include "genlib.h"
11
12
13/*
14 * Given netCDF type, return a default fill_value appropriate for
15 * that type.
16 */
17void
18nc_getfill(
19     nc_type type,
20     union generic *gval)
21{
22    switch(type) {
23      case NC_CHAR:
24 gval->charv = NC_FILL_CHAR;
25 return;
26      case NC_BYTE:
27 gval->charv = NC_FILL_BYTE;
28 return;
29      case NC_SHORT:
30 gval->shortv = NC_FILL_SHORT;
31 return;
32      case NC_INT:
33 gval->intv = NC_FILL_INT;
34 return;
35      case NC_FLOAT:
36 gval->floatv = NC_FILL_FLOAT;
37 return;
38      case NC_DOUBLE:
39 gval->doublev = NC_FILL_DOUBLE;
40 return;
41      default:
42 derror("nc_getfill: unrecognized type");
43    }
44}
45
46
47void
48nc_fill(
49     nc_type type, /* netcdf type code  */
50     size_t num, /* number of values to fill */
51     void *datp, /* where to start filling */
52     union generic fill_val) /* value to use */
53{
54    char *char_valp; /* pointers used to accumulate data values */
55    short *short_valp;
56    int *long_valp;
57    float *float_valp;
58    double *double_valp;
59
60    switch (type) {
61      case NC_CHAR:
62      case NC_BYTE:
63 char_valp = (char *) datp;
64 break;
65      case NC_SHORT:
66 short_valp = (short *) datp;
67 break;
68      case NC_INT:
69 long_valp = (int *) datp;
70 break;
71      case NC_FLOAT:
72 float_valp = (float *) datp;
73 break;
74      case NC_DOUBLE:
75 double_valp = (double *) datp;
76 break;
77      default: break;
78    }
79    while (num--) {
80 switch (type) {
81   case NC_CHAR:
82   case NC_BYTE:
83     *char_valp++ = fill_val.charv;
84     break;
85   case NC_SHORT:
86     *short_valp++ = fill_val.shortv;
87     break;
88   case NC_INT:
89     *long_valp++ = fill_val.intv;
90     break;
91   case NC_FLOAT:
92     *float_valp++ = fill_val.floatv;
93     break;
94   case NC_DOUBLE:
95     *double_valp++ = fill_val.doublev;
96     break;
97   default: break;
98 }
99    }
100}
101
102
103/*
104 * Given netCDF type, put a value of that type into a fill_value
105 */
106void
107nc_putfill(
108     nc_type type,
109     void *val, /* value of type to be put */
110     union generic *gval) /* where the value is to be put */
111{
112    switch(type) {
113      case NC_CHAR:
114      case NC_BYTE:
115 gval->charv = *(char *)val;
116 return;
117      case NC_SHORT:
118 gval->shortv = *(short *)val;
119 return;
120      case NC_INT:
121 gval->intv = *(int *)val;
122 return;
123      case NC_FLOAT:
124 gval->floatv = *(float *)val;
125 return;
126      case NC_DOUBLE:
127 gval->doublev = *(double *)val;
128 return;
129      default:
130 derror("nc_putfill: unrecognized type");
131    }
132}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed