IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 31, 2011, 4:28:27 PM (15 years ago)
Author:
bills
Message:

Implement the accessor functions. Remove the GetCell accessor versions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/fits/psFitsTableNew.c

    r32251 r32263  
    9595
    9696void
    97 freeTable(psFitsTable *table) {
     97freeTable(psFitsTable *table)
     98{
    9899    for (int col = 0; col < table->numCols; col++) {
    99100        psFitsTableColumn *column = &table->columns[col];
     
    287288}
    288289
    289 // return the index for a given column
    290 int psFitsTableGetColumnIndex(psFitsTable *table, psString name)
     290// return the column number with a given name
     291int psFitsTableGetColumnNumber(psFitsTable *table, const char *name)
    291292{
    292293    bool mdok;
     
    294295
    295296    if (!mdok) {
    296         psFitsError(mdok, false, "Failed to lookup column index for %s", name);
     297        psFitsError(mdok, true, "Failed to lookup column index for %s", name);
    297298        return -1;
    298299    }
     
    301302}
    302303
    303 // return F32 value for given cell
    304 psF32 psFitsTableGetCellF32(psFitsTable *table, int row, int col) {
    305     return table->columns[col].data.F32[row];
    306 }
    307 
    308 // return value for a named column for a given row
    309 psF32 psFitsTableGetF32(bool *status, psFitsTable *table, psString name, int row) {
    310     bool mdok;
    311     int col = psFitsTableGetColumnIndex(table, name);
    312 
    313     if (mdok) {
    314         return table->columns[col].data.F32[row];
    315     } else {
    316         return 0;
    317     }
    318 }
     304#define psFitsTableGetNumTYPE(TYPE, NAME) \
     305ps##TYPE psFitsTableGet##NAME(bool *status, psFitsTable *table, int row, const char *name) \
     306{ \
     307    ps##TYPE value = 0; \
     308    if (status) { \
     309        *status = true; \
     310    } \
     311    \
     312    if (row >= table->numRows || row < 0) { \
     313        if (status) { \
     314            *status = false; \
     315        } \
     316        return 0; \
     317    } \
     318    bool mdok; \
     319    int col = psMetadataLookupS32(&mdok, table->index, name); \
     320    if (!mdok) { \
     321        if (status) { \
     322            *status = false; \
     323        } \
     324        return 0; \
     325    } \
     326    if (col < 0) { \
     327        if (status) { \
     328            *status = false; \
     329        } \
     330        return 0; \
     331    } \
     332    psFitsTableColumn *column = &table->columns[col]; \
     333    switch (column->type) { \
     334        case PS_DATA_S8: \
     335        value = (ps##TYPE)column->data.S8[row]; \
     336        break; \
     337    case PS_DATA_S16: \
     338        value = (ps##TYPE)column->data.S16[row]; \
     339        break; \
     340    case PS_DATA_S32: \
     341        value = (ps##TYPE)column->data.S32[row]; \
     342        break; \
     343    case PS_DATA_S64: \
     344        value = (ps##TYPE)column->data.S64[row]; \
     345        break; \
     346    case PS_DATA_U8: \
     347        value = (ps##TYPE)column->data.U8[row]; \
     348        break; \
     349    case PS_DATA_U16: \
     350        value = (ps##TYPE)column->data.U16[row]; \
     351        break; \
     352    case PS_DATA_U32: \
     353        value = (ps##TYPE)column->data.U32[row]; \
     354        break; \
     355    case PS_DATA_U64: \
     356        value = (ps##TYPE)column->data.U64[row]; \
     357        break; \
     358    case PS_DATA_F32: \
     359        value = (ps##TYPE)column->data.F32[row]; \
     360        break; \
     361    case PS_DATA_F64: \
     362        value = (ps##TYPE)column->data.F64[row]; \
     363        break; \
     364    case PS_DATA_BOOL: \
     365        if (column->data.BOOL[row]) { \
     366            value = 1; \
     367        } \
     368        break; \
     369    default: \
     370        /* if you get to this point, the value is not a number. */ \
     371        if (status) {  \
     372            *status = false; \
     373        }  \
     374        break; \
     375    } \
     376    return value; \
     377}
     378
     379// #define psFitsTableGetNumTYPE(TYPE, NAME)
     380
     381psFitsTableGetNumTYPE(S8, S8);
     382psFitsTableGetNumTYPE(U8, U8);
     383psFitsTableGetNumTYPE(S16, S16);
     384psFitsTableGetNumTYPE(U16, U16);
     385psFitsTableGetNumTYPE(S32, S32);
     386psFitsTableGetNumTYPE(U32, U32);
     387psFitsTableGetNumTYPE(S64, S64);
     388psFitsTableGetNumTYPE(U64, U64);
     389psFitsTableGetNumTYPE(F32, F32);
     390psFitsTableGetNumTYPE(F64, F64);
     391psFitsTableGetNumTYPE(Bool, BOOL);
    319392
    320393// remove rows from table that are marked in the mask array as censored.
Note: See TracChangeset for help on using the changeset viewer.