1 #include "csf.h"
2 #include "csfimpl.h"
3 
4 
5 /* headers of this app. modules called */
6 
7 /***************/
8 /* EXTERNALS   */
9 /***************/
10 
11 /**********************/
12 /* LOCAL DECLARATIONS */
13 /**********************/
14 
15 /*********************/
16 /* LOCAL DEFINITIONS */
17 /*********************/
18 
19 /******************/
20 /* IMPLEMENTATION */
21 /******************/
22 
23 /* test value scale on compatibility CSF version 1 and 2
24  * RvalueScaleIs tests if the map's value scale is compatible
25  * with a certain value scale. Here is list of compatible but
26  * different value scales:
27  *
28  * VS_NOTDETERMINED: always returns 0
29  *
30  * VS_CLASSIFIED: VS_NOTDETERMINED
31  *
32  * VS_CONTINUOUS: VS_NOTDETERMINED
33  *
34  * VS_BOOLEAN: VS_CLASSIFIED, VS_NOTDETERMINED
35  *
36  * VS_NOMINAL: VS_CLASSIFIED, VS_NOTDETERMINED
37  *
38  * VS_ORDINAL: VS_CLASSIFIED, VS_NOTDETERMINED
39  *
40  * VS_LDD:  VS_CLASSIFIED, VS_NOTDETERMINED (only if cell representation is
41  * UINT1 or INT2)
42  *
43  * VS_SCALAR:  VS_CONTINUOUS, VS_NOTDETERMINED
44  *
45  * VS_DIRECTION: none
46  *
47  * returns
48  * 0 if not compatible or if vs argument is VS_NOTDETERMINED or in case of
49  * error, nonzero if
50  * compatible.
51  *
52  * Merrno
53  * BAD_VALUESCALE
54  *
55  * EXAMPLE
56  * .so examples/maskdump.tr
57  */
RvalueScaleIs(const MAP * m,CSF_VS vs)58 int RvalueScaleIs(
59 	const MAP *m, /* a version 1 map handle */
60 	CSF_VS     vs) /* a version 2 value scale that is compatible with map's value
61 	               * scale yes or no?
62 	               */
63 {
64 	CSF_VS mapsVS = RgetValueScale(m);
65 
66 	if (vs == VS_NOTDETERMINED)
67 		return 0;
68 
69 	if (vs == mapsVS)
70 		return 1;
71 
72 	switch(vs) {
73 	  case VS_CLASSIFIED: return mapsVS == VS_NOTDETERMINED;
74 	  case VS_CONTINUOUS: return mapsVS == VS_NOTDETERMINED;
75 	  case VS_LDD:
76 	                { CSF_CR cr = RgetCellRepr(m);
77 	                  if (cr !=  CR_UINT1 && cr != CR_INT2)
78 	                   return 0;
79 	                } /* fall through */
80 	 case VS_BOOLEAN:
81 	 case VS_NOMINAL:
82 	 case VS_ORDINAL:  return mapsVS == VS_CLASSIFIED
83 			    || mapsVS == VS_NOTDETERMINED;
84 	 case VS_SCALAR:   return mapsVS == VS_CONTINUOUS
85 	                    || mapsVS == VS_NOTDETERMINED;
86 	/* direction isn't compatible with anything */
87 	 case VS_DIRECTION: return 0;
88 	 default          : M_ERROR(BAD_VALUESCALE);
89 	                    return 0;
90       }
91 }
92