IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 22, 2005, 1:19:38 PM (21 years ago)
Author:
desonia
Message:

Added string support to psFitWriteTable

File:
1 edited

Legend:

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

    r5057 r5099  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.44 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-09-15 21:22:21 $
     9 *  @version $Revision: 1.45 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-09-22 23:19:38 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    170170    case PS_META_F64:
    171171        *fitsType = psStringCopy("1D");
     172        break;
     173    case PS_META_STR:
     174        *fitsType = psStringCopy("1A");
    172175        break;
    173176        // XXX: Handle other types, e.g., Vectors, etc.
     
    14581461{
    14591462    int status = 0;
    1460     psMetadataItem* item;
    14611463
    14621464    if (fits == NULL) {
     
    14851487
    14861488    // find the unique items in the array of metadata 'rows'
     1489    psMetadataItem* item;
    14871490    for (int row=0; row < rows; row++) {
    14881491        psMetadata* rowMeta = table->data[row];
     
    14911494                                   PS_LIST_HEAD,true);
    14921495            while ( (item=psListGetAndIncrement(iter)) != NULL) {
    1493                 if (PS_META_IS_PRIMITIVE(item->type)) {
     1496                if (PS_META_IS_PRIMITIVE(item->type) || item->type == PS_META_STR) {
    14941497                    bool found = false;
     1498                    psMetadataItem* fItem = NULL;
    14951499                    for (int n=0; n < columns->n && ! found; n++) {
    1496                         if (strcmp(item->name,
    1497                                    ((psMetadataItem*)(columns->data[n]))->name) == 0) {
     1500                        fItem = (psMetadataItem*)(columns->data[n]);
     1501                        if (strcmp(item->name, fItem->name) == 0) {
    14981502                            found = true;
     1503                            break;
    14991504                        }
    15001505                    }
    15011506                    if (! found) {
    15021507                        psArrayAdd(columns, columns->nalloc, item);
     1508                    } else if (item->type == PS_META_STR &&
     1509                               strlen(fItem->data.V) > strlen(item->data.V)) {
     1510                        // got to keep the longest string value as to know what size to create the table column
     1511                        psMemDecrRefCounter(item->data.V);
     1512                        item->data.V = psMemIncrRefCounter(fItem->data.V);
    15031513                    }
     1514
    15041515                }
    15051516            }
     
    15241535            return false;
    15251536        }
     1537        if (fitsType[strlen(fitsType)-1] == 'A') {
     1538            // string type -- append length to the type.
     1539            psStringAppend(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V));
     1540        }
    15261541        columnTypes->data[n] = fitsType;
    15271542    }
     
    15541569        if (PS_META_IS_PRIMITIVE(item->type)) {
    15551570            psVector* col = NULL;
     1571            psArray* colArray = NULL;
    15561572            switch (item->type) {
    15571573            case PS_META_S32:
     
    15701586                                   &status);
    15711587                break;
     1588
    15721589            case PS_META_F32:
    15731590                col = psVectorAlloc(table->n, PS_TYPE_F32);
     
    15851602                                   &status);
    15861603                break;
     1604
    15871605            case PS_META_F64:
    15881606                col = psVectorAlloc(table->n, PS_TYPE_F64);
     
    16001618                                   &status);
    16011619                break;
     1620
    16021621            case PS_META_BOOL:
    16031622                col = psVectorAlloc(table->n, PS_TYPE_BOOL);
     
    16151634                                   &status);
    16161635                break;
     1636
     1637            case PS_META_STR:
     1638                colArray = psArrayAlloc(table->n);
     1639                for (row = 0; row < table->n; row++) {
     1640                    colArray->data[row] = psMetadataLookupStr(NULL,
     1641                                          table->data[row],
     1642                                          item->name);
     1643                }
     1644                fits_write_col_str(fits->fd,
     1645                                   n+1,
     1646                                   1,
     1647                                   1,
     1648                                   table->n,
     1649                                   (char**)colArray->data,
     1650                                   &status);
     1651                break;
     1652
    16171653            default:
    16181654                // XXX: error message?
Note: See TracChangeset for help on using the changeset viewer.