Changeset 5099 for trunk/psLib/src/fits/psFits.c
- Timestamp:
- Sep 22, 2005, 1:19:38 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/fits/psFits.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fits/psFits.c
r5057 r5099 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.4 4$ $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 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 170 170 case PS_META_F64: 171 171 *fitsType = psStringCopy("1D"); 172 break; 173 case PS_META_STR: 174 *fitsType = psStringCopy("1A"); 172 175 break; 173 176 // XXX: Handle other types, e.g., Vectors, etc. … … 1458 1461 { 1459 1462 int status = 0; 1460 psMetadataItem* item;1461 1463 1462 1464 if (fits == NULL) { … … 1485 1487 1486 1488 // find the unique items in the array of metadata 'rows' 1489 psMetadataItem* item; 1487 1490 for (int row=0; row < rows; row++) { 1488 1491 psMetadata* rowMeta = table->data[row]; … … 1491 1494 PS_LIST_HEAD,true); 1492 1495 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) { 1494 1497 bool found = false; 1498 psMetadataItem* fItem = NULL; 1495 1499 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) { 1498 1502 found = true; 1503 break; 1499 1504 } 1500 1505 } 1501 1506 if (! found) { 1502 1507 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); 1503 1513 } 1514 1504 1515 } 1505 1516 } … … 1524 1535 return false; 1525 1536 } 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 } 1526 1541 columnTypes->data[n] = fitsType; 1527 1542 } … … 1554 1569 if (PS_META_IS_PRIMITIVE(item->type)) { 1555 1570 psVector* col = NULL; 1571 psArray* colArray = NULL; 1556 1572 switch (item->type) { 1557 1573 case PS_META_S32: … … 1570 1586 &status); 1571 1587 break; 1588 1572 1589 case PS_META_F32: 1573 1590 col = psVectorAlloc(table->n, PS_TYPE_F32); … … 1585 1602 &status); 1586 1603 break; 1604 1587 1605 case PS_META_F64: 1588 1606 col = psVectorAlloc(table->n, PS_TYPE_F64); … … 1600 1618 &status); 1601 1619 break; 1620 1602 1621 case PS_META_BOOL: 1603 1622 col = psVectorAlloc(table->n, PS_TYPE_BOOL); … … 1615 1634 &status); 1616 1635 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 1617 1653 default: 1618 1654 // XXX: error message?
Note:
See TracChangeset
for help on using the changeset viewer.
