IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 20, 2008, 3:48:37 PM (18 years ago)
Author:
eugene
Message:

merging changes from JHs end_stage branch (new end_stage field and related features; substantial cleanup via macros)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/pxtools.h

    r14490 r16170  
    5151bool pxGetOptions(FILE *stream, int argc, char **argv, pxConfig *config, psMetadata *modes, psMetadata *argSets);
    5252
    53 #define PXTOOL_ADD_MODE(option, comment, modeval, argset) \
     53#define PXOPT_ADD_MODE(option, comment, modeval, argset) \
    5454{ \
    5555    if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, comment, argset)) {;\
     
    6363}
    6464
     65#define PXOPT_LOOKUP_STR(var, md, key, required, ret) \
     66psString var; \
     67{ \
     68    bool status; \
     69 \
     70    var = psMetadataLookupStr(&status, md, key); \
     71    if (!status) { \
     72        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for %s", key); \
     73        return ret; \
     74    } \
     75 \
     76    if (required && (!var)) { \
     77        psError(PS_ERR_UNKNOWN, true, "%s is required", key); \
     78        return ret; \
     79    } \
     80}
     81
     82#define PXOPT_LOOKUP_F(var, md, key, type, required, ret) \
     83ps##type var; \
     84{ \
     85    bool status; \
     86 \
     87    var = psMetadataLookup##type(&status, md, key); \
     88    if (!status) { \
     89        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for %s", key); \
     90        return ret; \
     91    } \
     92 \
     93    if (required && isnan(var)) { \
     94        psError(PS_ERR_UNKNOWN, true, "%s is required", key); \
     95        return ret; \
     96    } \
     97}
     98
     99#define PXOPT_LOOKUP_F32(var, md, key, required, ret) \
     100    PXOPT_LOOKUP_F(var, md, key, F64, required, ret)
     101
     102#define PXOPT_LOOKUP_F64(var, md, key, required, ret) \
     103    PXOPT_LOOKUP_F(var, md, key, F64, required, ret)
     104
     105#define PXOPT_LOOKUP_PRIMITIVE(var, md, key, type, suffix, max, required, ret) \
     106type var; \
     107{ \
     108    bool status; \
     109 \
     110    var = psMetadataLookup##suffix(&status, md, key); \
     111    if (!status) { \
     112        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for %s", key); \
     113        return ret; \
     114    } \
     115 \
     116    if (required && (var == max)) { \
     117        psError(PS_ERR_UNKNOWN, true, "%s is required", key); \
     118        return ret; \
     119    } \
     120}
     121
     122#define PXOPT_LOOKUP_S16(var, md, key, required, ret) \
     123    PXOPT_LOOKUP_PRIMITIVE(var, md, key, psS16, S16, INT16_MAX, required, ret)
     124
     125#define PXOPT_LOOKUP_S32(var, md, key, required, ret) \
     126    PXOPT_LOOKUP_PRIMITIVE(var, md, key, psS32, S32, INT32_MAX, required, ret)
     127
     128#define PXOPT_LOOKUP_S64(var, md, key, required, ret) \
     129    PXOPT_LOOKUP_PRIMITIVE(var, md, key, psS64, S64, INT64_MAX, required, ret)
     130
     131#define PXOPT_LOOKUP_U16(var, md, key, required, ret) \
     132    PXOPT_LOOKUP_PRIMITIVE(var, md, key, psU16, U16, UINT16_MAX, required, ret)
     133
     134#define PXOPT_LOOKUP_U32(var, md, key, required, ret) \
     135    PXOPT_LOOKUP_PRIMITIVE(var, md, key, psU32, U32, UINT32_MAX, required, ret)
     136
     137#define PXOPT_LOOKUP_U64(var, md, key, required, ret) \
     138    PXOPT_LOOKUP_PRIMITIVE(var, md, key, psU64, U64, UINT64_MAX, required, ret)
     139
     140#define PXOPT_LOOKUP_TIME(var, md, key, required, ret) \
     141psTime *var; \
     142{ \
     143    bool status; \
     144 \
     145    var = psMetadataLookupTime(&status, md, key); \
     146    if (!status) { \
     147        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for %s", key); \
     148        return ret; \
     149    } \
     150 \
     151    if (required && (!var)) { \
     152        psError(PS_ERR_UNKNOWN, true, "%s is required", key); \
     153        return ret; \
     154    } \
     155}
     156
     157#define PXOPT_LOOKUP_BOOL(var, md, key, ret) \
     158bool var; \
     159{ \
     160    bool status; \
     161 \
     162    var = psMetadataLookupBool(&status, md, key); \
     163    if (!status) { \
     164        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for %s", key); \
     165        return ret; \
     166    } \
     167}
     168
     169// XXX the PXOPT_COPY_* macros free 'to' on error
     170
     171#define PXOPT_COPY_PRIMITIVE(from, to, type, suffix, oldname, newname, comment) \
     172{ \
     173    bool status = false; \
     174    type var = psMetadataLookup##suffix(&status, from, oldname); \
     175    if (!status) { \
     176        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for " oldname); \
     177        return false; \
     178    } \
     179    if (!psMetadataAdd##suffix(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, var)) { \
     180        psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
     181        psFree(to); \
     182        return false; \
     183    } \
     184}
     185
     186#define PXOPT_COPY_V(from, to, type, suffix, oldname, newname, comment) \
     187{ \
     188    bool status = false; \
     189    type var = psMetadataLookup##suffix(&status, from, oldname); \
     190    if (!status) { \
     191        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for " oldname); \
     192        return false; \
     193    } \
     194    if (var) { \
     195        if (!psMetadataAdd##suffix(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, var)) { \
     196            psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
     197            psFree(to); \
     198            return false; \
     199        } \
     200    }\
     201}
     202
     203#define PXOPT_COPY_F(from, to, type, oldname, newname, comment) \
     204{ \
     205    bool status = false; \
     206    ps##type var = psMetadataLookup##type(&status, from, oldname); \
     207    if (!status) { \
     208        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for " oldname); \
     209        return false; \
     210    } \
     211    if (!isnan(var)) { \
     212        if (!psMetadataAdd##type(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, var)) { \
     213            psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
     214            psFree(to); \
     215            return false; \
     216        } \
     217    } \
     218}
     219
     220#define PXOPT_COPY_F32(from, to, oldname, newname, comment) \
     221  PXOPT_COPY_F(from, to, F32, oldname, newname, comment)
     222
     223#define PXOPT_COPY_F64(from, to, oldname, newname, comment) \
     224  PXOPT_COPY_F(from, to, F64, oldname, newname, comment)
     225
     226#define PXOPT_COPY_TIME(from, to, oldname, newname, comment) \
     227  PXOPT_COPY_V(from, to, psTime *, Time, oldname, newname, comment)
     228
     229#define PXOPT_COPY_STR(from, to, oldname, newname, comment) \
     230  PXOPT_COPY_V(from, to, psString, Str, oldname, newname, comment)
     231
     232#define PXOPT_COPY_S16(from, to, oldname, newname, comment) \
     233  PXOPT_COPY_PRIMITIVE(from, to, psS16, S16, oldname, newname, comment)
     234
     235#define PXOPT_COPY_S32(from, to, oldname, newname, comment) \
     236  PXOPT_COPY_PRIMITIVE(from, to, psS32, S32, oldname, newname, comment)
     237
     238#define PXOPT_COPY_S64(from, to, oldname, newname, comment) \
     239  PXOPT_COPY_PRIMITIVE(from, to, psS64, S64, oldname, newname, comment)
     240
     241#define PXOPT_COPY_U16(from, to, oldname, newname, comment) \
     242  PXOPT_COPY_PRIMITIVE(from, to, psU16, U16, oldname, newname, comment)
     243
     244#define PXOPT_COPY_U32(from, to, oldname, newname, comment) \
     245  PXOPT_COPY_PRIMITIVE(from, to, psU32, U32, oldname, newname, comment)
     246
     247#define PXOPT_COPY_U64(from, to, oldname, newname, comment) \
     248  PXOPT_COPY_PRIMITIVE(from, to, psU64, U64, oldname, newname, comment)
     249
    65250#endif // PXTOOLS_H
Note: See TracChangeset for help on using the changeset viewer.