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)58int 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