IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 2681


Ignore:
Timestamp:
Dec 9, 2004, 4:50:16 PM (22 years ago)
Author:
desonia
Message:

Changed psList API for iterators, etc.

Location:
trunk/psLib
Files:
38 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/psLib.kdevses

    r2375 r2681  
    22<!DOCTYPE KDevPrjSession>
    33<KDevPrjSession>
    4  <DocsAndViews NumberOfDocuments="8" >
    5   <Doc0 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageConvolve.c" >
    6    <View0 Type="Source" />
     4 <DocsAndViews NumberOfDocuments="6" >
     5  <Doc0 NumberOfViews="1" URL="file:/home/desonia/psLib/src/Makefile" >
     6   <View0 line="225" Type="Source" />
    77  </Doc0>
    88  <Doc1 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFits.c" >
    9    <View0 Type="Source" />
     9   <View0 line="585" Type="Source" />
    1010  </Doc1>
    1111  <Doc2 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFits.h" >
    12    <View0 Type="Source" />
     12   <View0 line="144" Type="Source" />
    1313  </Doc2>
    14   <Doc3 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageIO.c" >
    15    <View0 Type="Source" />
     14  <Doc3 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFileUtilsErrors.dat" >
     15   <View0 line="35" Type="Source" />
    1616  </Doc3>
    17   <Doc4 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageIO.h" >
    18    <View0 Type="Source" />
     17  <Doc4 NumberOfViews="1" URL="file:/home/desonia/psLib/src/collections/psList.h" >
     18   <View0 line="166" Type="Source" />
    1919  </Doc4>
    20   <Doc5 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFileUtilsErrors.dat" >
    21    <View0 Type="Source" />
     20  <Doc5 NumberOfViews="1" URL="file:/home/desonia/psLib/src/collections/psList.c" >
     21   <View0 line="46" Type="Source" />
    2222  </Doc5>
    23   <Doc6 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageErrors.dat" >
    24    <View0 Type="Source" />
    25   </Doc6>
    26   <Doc7 NumberOfViews="1" URL="file:/home/desonia/psLib/src/psErrorCodes.dat" >
    27    <View0 line="9" Type="Source" />
    28   </Doc7>
    2923 </DocsAndViews>
    3024 <pluginList>
  • trunk/psLib/src/Makefile

    r2307 r2681  
    33##  Makefile:  psLib
    44##
    5 ##  $Revision: 1.18 $  $Name: not supported by cvs2svn $
    6 ##  $Date: 2004-11-09 00:58:23 $
     5##  $Revision: 1.19 $  $Name: not supported by cvs2svn $
     6##  $Date: 2004-12-10 02:50:14 $
    77##
    88##  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    224224        $(DOCS)
    225225
    226 tags:   
    227         cd $(IPPROOT) ; etags `find . \( -name \*.[chy] -o -name \*.cpp \) -print`
     226tags:
     227        etags `find . \( -name \*.[chy] \) -print`
    228228
    229229# List of PHONY targets with make file
  • trunk/psLib/src/Makefile.Globals

    r2667 r2681  
    55##  Assumptions:    Variable "prefix" already defined
    66##
    7 ##  $Revision: 1.30 $  $Name: not supported by cvs2svn $
    8 ##  $Date: 2004-12-08 19:21:24 $
     7##  $Revision: 1.31 $  $Name: not supported by cvs2svn $
     8##  $Date: 2004-12-10 02:50:14 $
    99##
    1010##  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5555XML2_LINK := $(shell $(xml2config) --libs)
    5656XML2_CFLAGS := $(shell $(xml2config) --cflags)
    57 #XML2_CFLAGS = -I/usr/local/include/libxml2
    58 
    5957
    6058# Set initial value for CFLAGS which will include all OS common flags for GCC
  • trunk/psLib/src/astronomy/psMetadata.c

    r2659 r2681  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.42 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2004-12-07 23:27:25 $
     14*  @version $Revision: 1.43 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2004-12-10 02:50:14 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    352352{
    353353    psList* mdList = NULL;
    354     psList* entryList = NULL;
    355354    psHash* mdTable = NULL;
    356355    psMetadataItem* entry = NULL;
    357     psMetadataItem* entryChild = NULL;
    358356
    359357
     
    375373        }
    376374
    377         if (entry->type == PS_META_LIST) {
    378 
    379             // Table entry has children. Entry and children must be removed from metadata collection's list
    380             psListSetIterator(entryList, PS_LIST_HEAD);
    381             entryChild = psListGetCurrent(entryList);
    382             while(entryChild != NULL) {
    383                 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) {
    384                     psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    385                     return false;
    386                 }
    387                 entryChild = psListGetNext(entryList);
    388             }
    389         } else {
    390 
    391             // Table entry has no children. Remove entry from metadata collection's list
    392             if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) {
    393                 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    394                 return false;
    395             }
    396         }
    397         // Remove entry from metadata collection's table
    398         if (!psHashRemove(mdTable, key)) {
    399             psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
    400             return false;
    401         }
    402375    } else {
    403376
     
    414387            return false;
    415388        }
    416         // Use recursive remove, now that key is known
    417         psMetadataRemove(md, PS_LIST_UNKNOWN, key);
     389    }
     390
     391    if (!psListRemoveData(mdList, entry)) {
     392        psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
     393        return false;
     394    }
     395
     396    // Remove entry from metadata collection's table
     397    if (!psHashRemove(mdTable, key)) {
     398        psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
     399        return false;
    418400    }
    419401
  • trunk/psLib/src/astronomy/psMetadataIO.c

    r2637 r2681  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-12-06 19:59:57 $
     11*  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-10 02:50:14 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    1919#include <string.h>
    2020#include <ctype.h>
     21#include <limits.h>
    2122
    2223#include "psAbort.h"
     
    598599                if(metadataItem->type!=PS_META_LIST) {
    599600                    if(overwrite) {
    600                         psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     601                        psMetadataRemove(md, INT_MIN, strName);
    601602                    } else {
    602603                        (*nFail)++;
     
    790791    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    791792    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
    792     psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
    793     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     793    metadataItem = (psMetadataItem*)psListGet(metadataItem->data.list,PS_LIST_TAIL);
    794794    htAtts = (psHash*)metadataItem->data.list;
    795795    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    848848            if(metadataItem->type != PS_META_LIST) {
    849849                if(overwrite) {
    850                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     850                    psMetadataRemove(md, INT_MIN, strName);
    851851                } else {
    852852                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    943943    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    944944    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    945     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    946     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     945    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    947946    htAtts = (psHash*)table->data.list;
    948947    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10021001            if(metadataItem->type != PS_META_LIST) {
    10031002                if(overwrite) {
    1004                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     1003                    psMetadataRemove(md, INT_MIN, strName);
    10051004                } else {
    10061005                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    10451044    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    10461045    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    1047     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    1048     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1046    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    10491047    htAtts = (psHash*)table->data.list;
    10501048    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10701068
    10711069    // Free temporary metadata item and its hash table
    1072     psListRemove(tables->data.list, PS_LIST_TAIL, table);
     1070    psListRemove(tables->data.list, PS_LIST_TAIL);
    10731071
    10741072    psFree(psEndTagName);
  • trunk/psLib/src/collections/psCollectionsErrors.dat

    r2357 r2681  
    3232psHash_TABLE_NULL                      Input psHash can not be NULL.
    3333psHash_DATA_NULL                       Input data can not be NULL.
     34#
     35psList_LOCATION_INVALID                Specified location, %d, is invalid.
     36psList_ITERATOR_INVALID                Specified iterator is not valid.
     37psList_ITERATOR_NULL                   Specified iterator is NULL.
     38psList_LIST_NULL                       Specified psList reference is NULL.
     39psList_DATA_NULL                       Specified data item is NULL.
     40psList_DATA_NOT_FOUND                  Specified data item is not found in the psList.
    3441
  • trunk/psLib/src/collections/psCollectionsErrors.h

    r2357 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-13 00:52:49 $
     9 *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:14 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5050#define PS_ERRORTEXT_psHash_TABLE_NULL "Input psHash can not be NULL."
    5151#define PS_ERRORTEXT_psHash_DATA_NULL "Input data can not be NULL."
     52#define PS_ERRORTEXT_psList_LOCATION_INVALID "Specified location, %d, is invalid."
     53#define PS_ERRORTEXT_psList_ITERATOR_INVALID "Specified iterator is not valid."
     54#define PS_ERRORTEXT_psList_ITERATOR_NULL "Specified iterator is NULL."
     55#define PS_ERRORTEXT_psList_LIST_NULL "Specified psList reference is NULL. "
     56#define PS_ERRORTEXT_psList_DATA_NULL "Specified data item is NULL."
     57#define PS_ERRORTEXT_psList_DATA_NOT_FOUND "Specified data item is not found in the psList."
    5258//~End
    5359
  • trunk/psLib/src/collections/psList.c

    r2375 r2681  
    66 *  @author Robert Daniel DeSonia, MHPCC
    77 *
    8  *  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2004-11-16 20:00:20 $
     8 *  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2004-12-10 02:50:14 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2929
    3030// private functions.
    31 static psListElem* listGetIterator(psList* list);
    32 static psS32 listGetIteratorIndex(psList* list);
    33 static void listSetIterator(psList* list, psS32 where, psBool lockList);
    3431static void listFree(psList* list);
    35 
    36 psList* psListAlloc(psPtr data)
    37 {
    38     psList* list = psAlloc(sizeof(psList));
    39 
    40     p_psMemSetDeallocator(list, (psFreeFcn) listFree);
    41 
    42     list->size = 0;
    43     list->head = list->tail = NULL;
    44     list->p_iter = ITER_INIT_HEAD;
    45     list->p_iterIndex = PS_LIST_HEAD;
    46 
    47     pthread_mutex_init(&(list->lock), NULL)
    48     ;
    49 
    50     if (data != NULL) {
    51         psListAdd(list, PS_LIST_TAIL, data);
    52     }
    53 
    54     return list;
    55 }
     32static void listIteratorFree(psListIterator* iter);
     33static psBool listIteratorRemove(psListIterator* iterator);
    5634
    5735static void listFree(psList* list)
     
    6442    ;
    6543
     44    psFree(list->iterators);
     45
    6646    for (psListElem* ptr = list->head; ptr != NULL;) {
    6747        psListElem* next = ptr->next;
     
    8161}
    8262
    83 psBool psListAdd(psList* list, psS32 location, psPtr data)
    84 {
    85     psListElem* position;
    86     psListElem* elem;
    87     psS32 cursorIndex = 0;
    88 
    89     if (list == NULL) {
    90         return false;
    91     }
    92 
    93     if (data == NULL) {
    94         return false;
    95     }
    96 
    97     if (location <= PS_LIST_UNKNOWN) {
    98         // / XXX What is the better way to communicate this failure to the caller?
    99         psLogMsg(__func__, PS_LOG_WARN, "The given insert location (%i) for psListAdd is invalid.", location);
    100         return false;
    101     }
    102 
    103     elem = psAlloc(sizeof(psListElem));
     63static void listIteratorFree(psListIterator* iter)
     64{
     65    if (iter == NULL) {
     66        return;
     67    }
     68
     69    // remove this iterator from the parent list
     70    psArrayRemove(iter->list->iterators,iter);
     71
     72}
     73
     74static psBool listIteratorRemove(psListIterator* iterator)
     75{
     76    if (iterator == NULL) {
     77        return false;
     78    }
     79
     80    psListElem* elem = iterator->cursor;
     81    psList* list = iterator->list;
     82    int index = iterator->index;
    10483
    10584    pthread_mutex_lock(&list->lock)
    10685    ;
    10786
    108     if (location > 0 && location > list->size) {
    109         psLogMsg(__func__, PS_LOG_WARN,
    110                  "Invalid index %d (only %d elements in psList); assuming tail.", location, list->size);
    111         location = PS_LIST_TAIL;
    112     }
    113 
    114     if (location == PS_LIST_TAIL || list->size == 0) {
    115         // insert the element at the end of the list
    116         elem->prev = list->tail;
    117         elem->next = NULL;
    118 
    119         if (list->tail != NULL) {
    120             list->tail->next = elem;
    121         }
    122 
    123         if (list->head == NULL) {
    124             list->head = elem;
    125         }
    126         list->tail = elem;
    127 
    128         list->size++;
    129         list->p_iter = elem;
    130         list->p_iterIndex = list->size - 1;
    131     } else {
    132         // move ourselves to the given position
    133         listSetIterator(list, location, false);
    134         position = listGetIterator(list);
    135         cursorIndex = listGetIteratorIndex(list);
    136 
    137         if (position == NULL) {
    138             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    139                     "Failed to move cursor to specified location (%d)", location);
    140             position = list->head;         // since we no list->size != 0, this must be non-NULL
    141         }
    142         // insert our new element in front of the given position
    143         elem->prev = position->prev;
    144         elem->next = position;
    145         position->prev = elem;
    146 
    147         if (elem->prev == NULL) {          // must be front of list
    148             list->head = elem;
    149         } else {
    150             elem->prev->next = elem;
    151         }
    152 
    153         list->size++;
    154         list->p_iter = elem;
    155         list->p_iterIndex = cursorIndex;
    156     }
    157 
    158     elem->data = psMemIncrRefCounter(data);
    159 
    160     pthread_mutex_unlock(&list->lock)
    161     ;
    162 
    163     return true;
    164 }
    165 
    166 
    167 /*
    168  * Remove an element from a list
    169  */
    170 psBool psListRemove(psList* list, psS32 location, psPtr data)
    171 {
    172     psListElem* elem = NULL;    // element to remove
    173     psS32 cursorIndex = 0;
    174 
    175     if (list == NULL) {
    176         psError(PS_ERR_BAD_PARAMETER_NULL, true, "list parameter found to be NULL.");
    177         return false;
    178     }
    179     // get exclusive access to list so that other threads will not get in the way.
    180     pthread_mutex_lock(&list->lock)
    181     ;
    182 
    183     if (location == PS_LIST_UNKNOWN) {
    184         // search list for the data item.
    185 
    186         psS32 i = 0;              // index
    187 
    188         for (psListElem* ptr = list->head; ptr != NULL; ptr = ptr->next) {
    189             if (ptr->data == data) {
    190                 location = i;
    191                 break;
    192             }
    193             i++;
    194         }
    195 
    196         if (location == PS_LIST_UNKNOWN) {
    197             psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Failed to find item in given psList.");
    198             pthread_mutex_unlock(&list->lock)
    199             ;
    200             return false;
    201         }
    202     }
    203     // position the list's cursor to the desired location
    204     listSetIterator(list, location, false);
    205     elem = listGetIterator(list);
    206     cursorIndex = listGetIteratorIndex(list);
    207 
    208     if (elem == NULL) {
    209         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    210                 "Couldn't position to given index (%d) to remove element from list.", location);
    211         pthread_mutex_unlock(&list->lock)
    212         ;
    213         return false;
    214     }
    215 
    216     list->size--;
    217 
    218     if (elem->prev == NULL) {              // head of list?
     87    if (elem == list->head) {        // head of list?
    21988        list->head = elem->next;
    22089    } else {
     
    22291    }
    22392
    224     if (elem->next == NULL) {              // tail of list?
     93    if (elem == list->tail) {        // tail of list?
    22594        list->tail = elem->prev;
    226 
    227         // removed tail, so iter should be the last element of list to keep it valid
    228         if (list->size > 0) {
    229             list->p_iter = list->tail;
    230             list->p_iterIndex = list->size - 1;
     95    } else {
     96        elem->next->prev = elem->prev;
     97    }
     98
     99    psArray* iterators = list->iterators;
     100    for (int i = 0; i < iterators->n; i++) {
     101        psListIterator* iter = (psListIterator*) iterators->data[i];
     102        if (iter->cursor == elem) {
     103            iter->cursor = NULL;
     104        } else if (iter->index > index) {
     105            iter->index--;
     106        }
     107    }
     108
     109    list->size--;
     110
     111    pthread_mutex_unlock(&list->lock)
     112    ;
     113
     114    // OK, delete orphaned list element and its data
     115    psFree(elem->data);
     116    psFree(elem);
     117
     118    return true;
     119}
     120
     121psList* psListAlloc(psPtr data)
     122{
     123    psList* list = psAlloc(sizeof(psList));
     124
     125    p_psMemSetDeallocator(list, (psFreeFcn) listFree);
     126
     127    list->size = 0;
     128    list->head = list->tail = NULL;
     129    list->iterators = psArrayAlloc(16);
     130
     131    // create a default iterator
     132    list->iterators->data[0] = psListIteratorAlloc(list,PS_LIST_HEAD);
     133    list->iterators->n = 1;
     134
     135    pthread_mutex_init(&(list->lock), NULL)
     136    ;
     137
     138    if (data != NULL) {
     139        psListAdd(list, PS_LIST_TAIL, data);
     140    }
     141
     142    return list;
     143}
     144
     145psListIterator* psListIteratorAlloc(psList* list, int location)
     146{
     147    psListIterator* iter = psAlloc(sizeof(psListIterator));
     148
     149    p_psMemSetDeallocator(iter, (psFreeFcn) listIteratorFree);
     150
     151    // initialize the attributes
     152    iter->list = list;
     153    iter->cursor = NULL;
     154    iter->index = 0;
     155    iter->offEnd = false;
     156
     157    // add to the list's array of iterators
     158    psArray* listIterators = list->iterators;
     159    int num = listIterators->n;
     160    if ( num >= listIterators->nalloc) {
     161        // need to resize the array to make more room for another iterator.
     162        list->iterators = psArrayRealloc(listIterators,listIterators->nalloc*2);
     163        listIterators = list->iterators;
     164    }
     165    listIterators->data[num] = iter;
     166    listIterators->n = num+1;
     167
     168    if (! psListIteratorSet(iter,location)) {
     169        psFree(iter);
     170        iter = NULL;
     171    }
     172
     173    return iter;
     174}
     175
     176psBool psListIteratorSet(psListIterator* iterator,
     177                         int location)
     178{
     179    if (iterator == NULL) {
     180        return false;
     181    }
     182
     183    psList* list = iterator->list;
     184
     185    if (location >= list->size) {
     186        psLogMsg(__func__, PS_LOG_WARN,
     187                 "Specified index, %d, is beyond the end of the psList, which "
     188                 "has only %d elements.  Assuming tail.",
     189                 location, list->size);
     190        location = PS_LIST_TAIL;
     191    }
     192
     193    if (location == PS_LIST_TAIL) {
     194        iterator->cursor = list->tail;
     195        iterator->index = list->size - 1;
     196        iterator->offEnd = false;
     197        return true;
     198    }
     199
     200    if (location <= 0) {   // Invalid index
     201        return false;
     202    }
     203
     204
     205    psListElem* cursor = iterator->cursor;
     206    int index = iterator->index;
     207    if (cursor == NULL) {      // set the cursor to the head if it is NULL
     208        if (location > list->size/2) { // closer to tail or head?
     209            cursor = list->tail;
     210            index = list->size - 1;
    231211        } else {
    232             list->p_iter = ITER_INIT_TAIL;
     212            cursor = list->head;
     213            index = 0;
     214        }
     215    }
     216
     217    if (location < index) {
     218        psS32 diff = index - location;
     219
     220        for (psS32 count = 0; count < diff; count++) {
     221            cursor = cursor->prev; // shouldn't need to check for NULL
    233222        }
    234223    } else {
    235         elem->next->prev = elem->prev;
    236         list->p_iter = elem->next;
    237         list->p_iterIndex = cursorIndex;
     224        psS32 diff = location - index;
     225
     226        for (psS32 count = 0; count < diff; count++) {
     227            cursor = cursor->next; // shouldn't need to check for NULL
     228        }
     229    }
     230    iterator->cursor = cursor;
     231    iterator->index = location;
     232    iterator->offEnd = false;
     233
     234    return true;
     235}
     236
     237psBool psListAdd(psList* list, psS32 location, psPtr data)
     238{
     239
     240    if (list == NULL) {
     241        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     242                PS_ERRORTEXT_psList_LIST_NULL);
     243        return false;
     244    }
     245
     246    if (data == NULL) {
     247        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     248                PS_ERRORTEXT_psList_DATA_NULL);
     249        return false;
     250    }
     251
     252    // move ourselves to the given position
     253    if (list->iterators->n < 1 ||
     254            ! psListIteratorSet(list->iterators->data[0],location)) {
     255        // oh no, I can't find where to add this!
     256        psError(PS_ERR_UNKNOWN, false,
     257                PS_ERRORTEXT_psList_LOCATION_INVALID,
     258                location);
     259        return false;
     260    }
     261
     262    if (location == PS_LIST_TAIL) {
     263        // insert the element at the end of the list
     264        return psListAddAfter(list->iterators->data[0],data);
     265    } else {
     266        return psListAddBefore(list->iterators->data[0],data);
     267    }
     268}
     269
     270bool psListAddAfter(psListIterator* iterator, void* data)
     271{
     272    if (data == NULL) {
     273        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     274                PS_ERRORTEXT_psList_DATA_NULL);
     275        return false;
     276    }
     277
     278    if (iterator == NULL) {
     279        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     280                PS_ERRORTEXT_psList_ITERATOR_NULL);
     281        return false;
     282    }
     283
     284    psListElem* cursor = iterator->cursor;
     285
     286    if (cursor == NULL) {
     287        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     288                PS_ERRORTEXT_psList_ITERATOR_INVALID);
     289        return false;
     290    }
     291
     292    psList* list = iterator->list;
     293    psListElem* elem = psAlloc(sizeof(psListElem));
     294
     295    pthread_mutex_lock(&list->lock)
     296    ;
     297
     298    // set the new list element's attributes
     299    elem->prev = cursor;
     300    elem->next = cursor->next;
     301    elem->data = data;
     302
     303    cursor->next = elem;
     304    list->size++;
     305
     306    if (cursor == list->tail) {
     307        list->tail = elem;
     308    }
     309
     310    psArray* iterators = list->iterators;
     311    int index = iterator->index;
     312    for (int i = 0; i < iterators->n; i++) {
     313        psListIterator* iter = (psListIterator*) iterators->data[i];
     314        if (iter->index > index) {
     315            iter->index++;
     316        }
    238317    }
    239318
     
    241320    ;
    242321
    243     // OK, delete list element and its data
    244     psFree(elem->data);
    245     psFree(elem);
    246 
    247322    return true;
    248323}
    249324
    250 void psListSetIterator(psList* list, psS32 where)
    251 {
    252     listSetIterator(list, where, true);
    253 }
    254 
    255 static void listSetIterator(psList* list, psS32 where, psBool lockList)
    256 {
    257     psListElem* cursor;
    258     psS32 position;
    259 
     325bool psListAddBefore(psListIterator* iterator, void* data)
     326{
     327    if (data == NULL) {
     328        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     329                PS_ERRORTEXT_psList_DATA_NULL);
     330        return false;
     331    }
     332
     333    if (iterator == NULL) {
     334        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     335                PS_ERRORTEXT_psList_ITERATOR_NULL);
     336        return false;
     337    }
     338
     339    psListElem* cursor = iterator->cursor;
     340
     341    if (cursor == NULL) {
     342        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     343                PS_ERRORTEXT_psList_ITERATOR_INVALID);
     344        return false;
     345    }
     346
     347    psList* list = iterator->list;
     348    psListElem* elem = psAlloc(sizeof(psListElem));
     349
     350    pthread_mutex_lock(&list->lock)
     351    ;
     352
     353    // set the new list element's attributes
     354    elem->prev = cursor->prev;
     355    elem->next = cursor;
     356    elem->data = data;
     357
     358    cursor->prev = elem;
     359    list->size++;
     360
     361    if (cursor == list->head) {
     362        list->head = elem;
     363    }
     364
     365    psArray* iterators = list->iterators;
     366    int index = iterator->index;
     367    for (int i = 0; i < iterators->n; i++) {
     368        psListIterator* iter = (psListIterator*) iterators->data[i];
     369        if (iter->index >= index) {
     370            iter->index++;
     371        }
     372    }
     373
     374    pthread_mutex_unlock(&list->lock)
     375    ;
     376
     377    return true;
     378}
     379
     380psBool psListRemove(psList* list,
     381                    psS32 location)
     382{
    260383    if (list == NULL) {
    261384        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    262                 "Unexpected null pointer for psList parameter.");
    263         return;
    264     }
    265 
    266     if (where == PS_LIST_CURRENT) {
    267         return;
    268     }
    269 
    270     if (lockList) {
    271         pthread_mutex_lock(&list->lock)
    272         ;
    273         // don't want the list changing on us while we move about
    274     }
    275 
    276     if (where >= (psS32)list->size) {
    277         list->p_iter = NULL;
    278         if (lockList) {
    279             pthread_mutex_unlock(&list->lock)
    280             ;
    281         }
    282         return;
    283     }
    284 
    285     switch (where) {
    286     case PS_LIST_HEAD:
    287         list->p_iter = ITER_INIT_HEAD;
    288         break;
    289 
    290     case PS_LIST_TAIL:
    291         list->p_iter = ITER_INIT_TAIL;
    292         break;
    293 
    294     case PS_LIST_PREVIOUS:
    295         cursor = listGetIterator(list);
    296         position = listGetIteratorIndex(list);
    297 
    298         if (cursor != NULL) {
    299             list->p_iter = cursor->prev;
    300             list->p_iterIndex = position - 1;
    301         }
    302         break;
    303 
    304     case PS_LIST_NEXT:
    305         cursor = listGetIterator(list);
    306         position = listGetIteratorIndex(list);
    307 
    308         if (cursor != NULL) {
    309             list->p_iter = cursor->next;
    310             list->p_iterIndex = position + 1;
    311         }
    312         break;
    313 
    314     case PS_LIST_CURRENT:
    315         break;
    316 
    317     default:
    318         if (where <= PS_LIST_HEAD) {   // bascially same as PS_LIST_UNKNOWN above
    319             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    320                     "Can't move to an unknown position.  Not moving the iterator position.");
    321         } else {
    322             cursor = listGetIterator(list);
    323             if (cursor == NULL) {      // reset the iterator if it is invalid
    324                 list->p_iter = ITER_INIT_HEAD;
    325                 list->p_iterIndex = 0;
    326             }
    327 
    328             psS32 position = listGetIteratorIndex(list);
    329 
    330             if (where < position) {
    331                 psS32 diff = position - where;
    332 
    333                 for (psS32 count = 0; count < diff; count++) {
    334                     listSetIterator(list, PS_LIST_PREVIOUS, false);
    335                 }
    336             } else {
    337                 psS32 diff = where - position;
    338 
    339                 for (psS32 count = 0; count < diff; count++) {
    340                     listSetIterator(list, PS_LIST_NEXT, false);
    341                 }
    342             }
    343         }
    344         break;
    345     }
    346 
    347     if (lockList) {
    348         pthread_mutex_unlock(&list->lock)
    349         ;
    350     }
    351 }
    352 
    353 psListElem* listGetIterator(psList* list)
     385                PS_ERRORTEXT_psList_LIST_NULL);
     386        return false;
     387    }
     388
     389    // move ourselves to the given position
     390    psListIterator* defaultIterator = list->iterators->data[0];
     391    if (list->iterators->n < 1 ||
     392            ! psListIteratorSet(defaultIterator,location)) {
     393        // oh no, I can't find where to add this!
     394        psError(PS_ERR_UNKNOWN, false,
     395                PS_ERRORTEXT_psList_LOCATION_INVALID,
     396                location);
     397        return false;
     398    }
     399
     400    return listIteratorRemove(defaultIterator);
     401}
     402
     403psBool psListRemoveData(psList* list,
     404                        psPtr data)
    354405{
    355406    if (list == NULL) {
     407        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     408                PS_ERRORTEXT_psList_LIST_NULL);
     409        return false;
     410    }
     411
     412    if (data == NULL) {
     413        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     414                PS_ERRORTEXT_psList_DATA_NULL);
     415        return false;
     416    }
     417
     418    psListIterator* iterator = list->iterators->data[0];
     419    psListIteratorSet(iterator,PS_LIST_HEAD);
     420
     421    psPtr iteratorData = psListGetNext(iterator);
     422    while (iteratorData != NULL && iteratorData != data) {
     423        iteratorData = psListGetNext(iterator);
     424    }
     425
     426    if (iteratorData == NULL) {
     427        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     428                PS_ERRORTEXT_psList_DATA_NOT_FOUND);
     429        return false;
     430    }
     431
     432    return listIteratorRemove(iterator);
     433}
     434
     435psPtr psListGet(psList* list, psS32 location)
     436{
     437    psListIterator* iterator = list->iterators->data[0];
     438
     439    if (! psListIteratorSet(iterator,location)) {
     440        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     441                PS_ERRORTEXT_psList_LOCATION_INVALID,
     442                location);
    356443        return NULL;
    357444    }
    358445
    359     if (list->p_iter == ITER_INIT_HEAD) {
    360         return list->head;
    361     } else if (list->p_iter == ITER_INIT_TAIL) {
    362         return list->tail;
    363     } else {
    364         return list->p_iter;
    365     }
    366 }
    367 
    368 psS32 listGetIteratorIndex(psList* list)
    369 {
    370     if (list->p_iter == ITER_INIT_HEAD) {
    371         return 0;
    372     } else if (list->p_iter == ITER_INIT_TAIL) {
    373         return list->size - 1;
    374     } else {
    375         return list->p_iterIndex;
    376     }
    377 }
    378 
    379 psPtr psListGet(psList* list, psS32 location)
    380 {
    381     psListElem* element;
    382 
    383     psListSetIterator(list, location);
    384     element = listGetIterator(list);
    385 
    386     if (element == NULL) {
    387         return NULL;
    388     } else {
    389         return element->data;
    390     }
     446    return iterator->cursor->data;
    391447}
    392448
     
    394450 * and now return the previous/next element of the list
    395451 */
    396 psPtr psListGetNext(psList* list)
    397 {
    398     return psListGet(list, PS_LIST_NEXT);
    399 }
    400 
    401 psPtr psListGetPrevious(psList* list)
    402 {
    403     return psListGet(list, PS_LIST_PREVIOUS);
    404 }
    405 
    406 psPtr psListGetCurrent(psList* list)
    407 {
    408     return psListGet(list, PS_LIST_CURRENT);
     452psPtr psListGetNext(psListIterator* iterator)
     453{
     454    if (iterator == NULL || iterator->cursor == NULL) {
     455        return NULL;
     456    }
     457
     458    psPtr data = iterator->cursor->data;
     459
     460    iterator->cursor = iterator->cursor->next;
     461    iterator->index++;
     462    if (iterator->cursor == NULL) {
     463        iterator->offEnd = true;
     464    }
     465
     466    return data;
     467}
     468
     469psPtr psListGetPrevious(psListIterator* iterator)
     470{
     471    if (iterator == NULL || iterator->cursor == NULL) {
     472        return NULL;
     473    }
     474
     475    psPtr data = iterator->cursor->data;
     476
     477    iterator->cursor = iterator->cursor->prev;
     478    iterator->index--;
     479
     480    return data;
    409481}
    410482
     
    467539    // convert to indexable vector for use by qsort.
    468540    arr = psListToArray(list);
     541    psArray* iterators = psMemIncrRefCounter(list->iterators);
    469542    psFree(list);
    470543
     
    473546    // convert back to linked list
    474547    list = psArrayToList(arr);
     548    psFree(list->iterators);
     549    list->iterators = iterators;
    475550    psFree(arr);
    476551
     552    // sorting should invalidate all iterator positions.
     553    for (int i = 0; i < iterators->n; i++) {
     554        ((psListIterator*)iterators->data[i])->cursor = NULL;
     555    }
     556
    477557    return list;
    478558}
  • trunk/psLib/src/collections/psList.h

    r2375 r2681  
    1010 *  @ingroup LinkedList
    1111 *
    12  *  @version $Revision: 1.17 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2004-11-16 20:00:20 $
     12 *  @version $Revision: 1.18 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2004-12-10 02:50:14 $
    1414 *
    1515 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3434    PS_LIST_HEAD = 0,                  ///< at head
    3535    PS_LIST_TAIL = -1,                 ///< at tail
    36     PS_LIST_PREVIOUS = -2,             ///< previous element
    37     PS_LIST_CURRENT = -3,              ///< current element
    38     PS_LIST_NEXT = -4,                 ///< next element
    39     PS_LIST_UNKNOWN = -5               ///< unknown position (should be last in enum list)
    4036};
    4137
     
    5955    psListElem* head;                  ///< first element on list (may be NULL)
    6056    psListElem* tail;                  ///< last element on list (may be NULL)
    61     psArray* iterators;                ///< iterators
     57    psArray* iterators;
     58    ///< array of all iterators associated with this list.  First iterator is
     59    ///< used internally to improve performance when using indexed access, all
     60    ///< others are user-level iterators created by psListIteratorAlloc.
     61
    6262    pthread_mutex_t lock;              ///< mutex to lock a node during changes
    63 psListElem* p_iter;                ///< internal cursor for increased performance index accessing
    64 int p_iterIndex;                   ///< index position of the iter.
    6563}
    6664psList;
     
    7775{
    7876psList* list;                      ///< List iterator to works on
    79 psU32 number;                      ///< List iterator number
    8077psListElem* cursor;                ///< current cursor position
     78int index;                         ///< the index number in the list
    8179bool offEnd;                       ///< Iterator off the end?
    8280}
     
    9492;
    9593
     94/** Creates a psListIterator object and associates it with a psList.
     95 *
     96 *  @return psListIterator* A new psListIterator object.
     97 */
     98psListIterator* psListIteratorAlloc(
     99    psList* list,                      ///< the psList to iterate with
     100    int location                       ///< the initial starting point.
     101    ///<  This can be a numeric index, PS_LIST_HEAD, or PS_LIST_TAIL.
     102);
     103
     104/** Set the iterator of the list to a given position.  If location is invalid the
     105 *  iterator position is not changed.
     106 *
     107 *  @return psBool        TRUE if iterator successfully set, otherwise FALSE.
     108 */
     109psBool psListIteratorSet(
     110    psListIterator* iterator,            ///< list iterator
     111    int location                         ///< index number, PS_LIST_HEAD, or PS_LIST_TAIL
     112);
     113
    96114/** Adds an element to a psList at position given.
    97115 *
    98  *  @return psList* The psList with added data item.  If list parameter is
    99  *                      NULL, the return value will also be NULL.
     116 *  @return psBool        TRUE if item was successfully added, otherwise FALSE.
    100117 */
    101118psBool psListAdd(
    102     psList* restrict list,             ///< list to add to (if NULL, nothing is done)
    103     psS32 location,                      ///< index, PS_LIST_HEAD, PS_LIST_TAIL, or numbered location.
     119    psList* restrict list,             ///< list to add item to
     120    psS32 location,                    ///< index, PS_LIST_HEAD, PS_LIST_TAIL, or numbered location.
    104121    psPtr data                         ///< data item to add.  If NULL, list is not modified.
    105122);
    106123
    107 /** Remove an item from a list.  If location parameter is PS_LIST_UNKNOWN,
     124/** Adds an data item to a psList at position just after the list position given
     125 *
     126 *  @return psBool        TRUE if item was successfully added, otherwise FALSE.
     127 */
     128psBool psListAddAfter(
     129    psListIterator* list,              ///< list position to add item to
     130    psPtr data                         ///< data item to add.  If NULL, list is not modified.
     131);
     132
     133/** Adds an data item to a psList at position just before the list position given
     134 *
     135 *  @return psBool        TRUE if item was successfully added, otherwise FALSE.
     136 */
     137psBool psListAddBefore(
     138    psListIterator* list,              ///< list position to add item to
     139    psPtr data                         ///< data item to add.  If NULL, list is not modified.
     140);
     141
     142/** Remove an item at the specified location from a list.
    108143 *
    109144 *  @return psBool        TRUE if element is successfully removed, otherwise FALSE.
    110145 */
    111146psBool psListRemove(
    112     psList* restrict list,
    113     ///< list to remove element from
    114     psS32 location,
    115     ///< index of item, or PS_LIST_UNKNOWN, PS_LIST_NEXT, PS_LIST_PREV, or numbered location.
    116     psPtr data
    117     ///< if location is PS_LIST_UNKNOWN, data item to find and remove, otherwise this is ignored.
     147    psList* restrict list,             ///< list to remove element from
     148    psS32 location                     ///< index of item
     149);
     150
     151/** Remove an item from a list.
     152 *
     153 *  @return psBool        TRUE if element is successfully removed, otherwise FALSE.
     154 */
     155psBool psListRemoveData(
     156    psList* restrict list,             ///< list to remove element from
     157    psPtr data                         ///< data item to find and remove
    118158);
    119159
     
    127167psPtr psListGet(
    128168    psList* restrict list,             ///< list to retrieve element from
    129     psS32 location                       ///< index number, or PS_LIST_NEXT, PS_LIST_PREV, PS_LIST_UNKNOWN
    130 );
    131 
    132 /** Set the iterator of the list to a given position.  If location is invalid the
    133  *  iterator position is not changed.
    134  *
    135  */
    136 void psListSetIterator(
    137     psList* restrict list,             ///< list to retrieve element from
    138     psS32 location                       ///< index number, PS_LIST_HEAD, or PS_LIST_TAIL
    139 );
    140 
    141 /** Get next element relative to the iterator.  This also moves the iterator to
    142  *  the next list position.
    143  *
    144  *  @return psPtr       the data item next on the list or NULL if the iterator
    145  *                      is already pointing to the last element or the list
    146  *                      parameter was NULL.
     169    psS32 location                     ///< index number, PS_LIST_HEAD, or PS_LIST_TAIL
     170);
     171
     172/** Position the specified iterator to the next item in list.
     173 *
     174 *  @return psPtr       the data item at the new iterator position or NULL if the
     175 *                      iterator goes past the end of the list.
    147176 */
    148177psPtr psListGetNext(
    149     psList* restrict list              ///< list to retrieve element from
    150 );
    151 
    152 /** Get current element according to the psList's iterator cursor.  This does
    153  *  not move the iterator location.
    154  *
    155  *  @return psPtr       the data item cooresponding to current iterator
    156  *                      cursor position of the list, or NULL if either the
    157  *                      iterator is not valid or list parameter was NULL.
    158  */
    159 psPtr psListGetCurrent(
    160     psList* restrict list              ///< list to retrieve element from
    161 );
    162 
    163 /** Get previous element relative to list's iterator. This also moves the
    164  *  iterator to the previous list position.
    165  *
    166  *  @return psPtr       the data item previous on the list or NULL if the iterator
    167  *                      is already pointing to the first element or the list
    168  *                      parameter was NULL.
     178    psListIterator* restrict iterator  ///< iterator to move
     179);
     180
     181/** Position the specified iterator to the previous item in list.
     182 *
     183 *  @return psPtr       the data item at the new iterator position or NULL if the
     184 *                      iterator goes past the beginning of the list.
    169185 */
    170186psPtr psListGetPrevious(
    171     psList* restrict list              ///< list to retrieve element from
     187    psListIterator* restrict iterator  ///< iterator to move
    172188);
    173189
  • trunk/psLib/src/collections/psMetadata.c

    r2659 r2681  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.42 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2004-12-07 23:27:25 $
     14*  @version $Revision: 1.43 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2004-12-10 02:50:14 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    352352{
    353353    psList* mdList = NULL;
    354     psList* entryList = NULL;
    355354    psHash* mdTable = NULL;
    356355    psMetadataItem* entry = NULL;
    357     psMetadataItem* entryChild = NULL;
    358356
    359357
     
    375373        }
    376374
    377         if (entry->type == PS_META_LIST) {
    378 
    379             // Table entry has children. Entry and children must be removed from metadata collection's list
    380             psListSetIterator(entryList, PS_LIST_HEAD);
    381             entryChild = psListGetCurrent(entryList);
    382             while(entryChild != NULL) {
    383                 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) {
    384                     psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    385                     return false;
    386                 }
    387                 entryChild = psListGetNext(entryList);
    388             }
    389         } else {
    390 
    391             // Table entry has no children. Remove entry from metadata collection's list
    392             if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) {
    393                 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    394                 return false;
    395             }
    396         }
    397         // Remove entry from metadata collection's table
    398         if (!psHashRemove(mdTable, key)) {
    399             psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
    400             return false;
    401         }
    402375    } else {
    403376
     
    414387            return false;
    415388        }
    416         // Use recursive remove, now that key is known
    417         psMetadataRemove(md, PS_LIST_UNKNOWN, key);
     389    }
     390
     391    if (!psListRemoveData(mdList, entry)) {
     392        psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
     393        return false;
     394    }
     395
     396    // Remove entry from metadata collection's table
     397    if (!psHashRemove(mdTable, key)) {
     398        psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
     399        return false;
    418400    }
    419401
  • trunk/psLib/src/collections/psMetadataIO.c

    r2637 r2681  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-12-06 19:59:57 $
     11*  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-10 02:50:14 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    1919#include <string.h>
    2020#include <ctype.h>
     21#include <limits.h>
    2122
    2223#include "psAbort.h"
     
    598599                if(metadataItem->type!=PS_META_LIST) {
    599600                    if(overwrite) {
    600                         psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     601                        psMetadataRemove(md, INT_MIN, strName);
    601602                    } else {
    602603                        (*nFail)++;
     
    790791    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    791792    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
    792     psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
    793     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     793    metadataItem = (psMetadataItem*)psListGet(metadataItem->data.list,PS_LIST_TAIL);
    794794    htAtts = (psHash*)metadataItem->data.list;
    795795    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    848848            if(metadataItem->type != PS_META_LIST) {
    849849                if(overwrite) {
    850                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     850                    psMetadataRemove(md, INT_MIN, strName);
    851851                } else {
    852852                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    943943    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    944944    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    945     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    946     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     945    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    947946    htAtts = (psHash*)table->data.list;
    948947    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10021001            if(metadataItem->type != PS_META_LIST) {
    10031002                if(overwrite) {
    1004                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     1003                    psMetadataRemove(md, INT_MIN, strName);
    10051004                } else {
    10061005                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    10451044    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    10461045    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    1047     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    1048     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1046    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    10491047    htAtts = (psHash*)table->data.list;
    10501048    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10701068
    10711069    // Free temporary metadata item and its hash table
    1072     psListRemove(tables->data.list, PS_LIST_TAIL, table);
     1070    psListRemove(tables->data.list, PS_LIST_TAIL);
    10731071
    10741072    psFree(psEndTagName);
  • trunk/psLib/src/dataIO/psFileUtilsErrors.dat

    r2580 r2681  
    3434psFits_METADATA_ADD_FAILED             Failed to add metadata item, %s.
    3535psFits_WRITE_FAILED                    Could not write psImage data to file,'%s'.\nCFITSIO Error: %s
    36 psFits_IMAGE_NULL                      The input psImage was NULL.  Need a non-NULL psImage for operation.
     36psFits_IMAGE_NULL                      The input psImage was NULL.  Need a non-NULL psImage for operation to be performed.
     37psFits_METADATA_NULL                   The input psMetadata was NULL.  Need a non-NULL psMetadata for operation to be performed.
     38#
  • trunk/psLib/src/dataIO/psFileUtilsErrors.h

    r2600 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-12-02 21:12:52 $
     9 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5656#define PS_ERRORTEXT_psFits_METADATA_ADD_FAILED "Failed to add metadata item, %s."
    5757#define PS_ERRORTEXT_psFits_WRITE_FAILED "Could not write psImage data to file,'%s'.\nCFITSIO Error: %s"
    58 #define PS_ERRORTEXT_psFits_IMAGE_NULL "The input psImage was NULL.  Need a non-NULL psImage for operation."
     58#define PS_ERRORTEXT_psFits_IMAGE_NULL "The input psImage was NULL.  Need a non-NULL psImage for operation to be performed."
     59#define PS_ERRORTEXT_psFits_METADATA_NULL "The input psMetadata was NULL.  Need a non-NULL psMetadata for operation to be performed."
    5960//~End
    6061
  • trunk/psLib/src/dataIO/psFits.c

    r2375 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-16 20:00:21 $
     9 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    200200}
    201201
    202 psFitsType psFitsMoveExtName(psFits* fits,
    203                              const char* extname)
    204 {
    205     int status = 0;
    206 
    207     if (fits == NULL) {
    208         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    209                 PS_ERRORTEXT_psFits_NULL);
    210         return PS_FITS_TYPE_NONE;
     202bool psFitsMoveExtName(psFits* fits,
     203                       const char* extname)
     204{
     205    int status = 0;
     206
     207    if (fits == NULL) {
     208        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     209                PS_ERRORTEXT_psFits_NULL);
     210        return false;
    211211    }
    212212
     
    218218                PS_ERRORTEXT_psFits_EXTNAME_INVALID,
    219219                extname, fits->filename, fitsErr);
    220         return PS_FITS_TYPE_NONE;
    221     }
    222 
    223     return psFitsGetExtType(fits);
    224 }
    225 
    226 psFitsType psFitsMoveExtNum(psFits* fits,
    227                             int extnum,
    228                             bool relative)
    229 {
    230     if (fits == NULL) {
    231         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    232                 PS_ERRORTEXT_psFits_NULL);
    233         return PS_FITS_TYPE_NONE;
     220        return false;
     221    }
     222
     223    return true;
     224}
     225
     226bool psFitsMoveExtNum(psFits* fits,
     227                      int extnum,
     228                      bool relative)
     229{
     230    if (fits == NULL) {
     231        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     232                PS_ERRORTEXT_psFits_NULL);
     233        return false;
    234234    }
    235235
     
    249249                PS_ERRORTEXT_psFits_EXTNUM_INVALID,
    250250                extnum, fits->filename, fitsErr);
    251         return PS_FITS_TYPE_NONE;
    252     }
    253 
    254     return hdutype;
     251        return false;
     252    }
     253
     254    return true;
    255255}
    256256
     
    304304        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    305305                PS_ERRORTEXT_psFits_NULL);
    306         return PS_FITS_TYPE_NONE;
     306        return 0;
    307307    }
    308308
     
    316316                PS_ERRORTEXT_psFits_GETNUMHDUS_FAILED,
    317317                fits->filename, fitsErr);
    318         return -1;
     318        return 0;
    319319    }
    320320
    321321    return num;
    322 }
    323 
    324 bool psFitsCreateExt(psFits* fits)
    325 {
    326     if (fits == NULL) {
    327         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    328                 PS_ERRORTEXT_psFits_NULL);
    329         return false;
    330     }
    331 
    332     int status = 0;
    333 
    334     fits_create_hdu(fits->p_fd,&status);
    335 
    336     if ( status != 0) {
    337         char fitsErr[MAX_STRING_LENGTH];
    338         (void)fits_get_errstatus(status, fitsErr);
    339         psError(PS_ERR_IO, true,
    340                 PS_ERRORTEXT_psFits_CREATE_HDU_FAILED,
    341                 fits->filename, fitsErr);
    342         return false;
    343     }
    344 
    345     return true;
    346322}
    347323
     
    481457    }
    482458
    483     int status = 0;
    484 
    485459    int size = psFitsGetSize(fits);
    486     int position = psFitsGetExtNum(fits);
    487460
    488461    for (int lcv=0; lcv < size; lcv++) {
     
    502475        }
    503476    }
     477
     478    return out;
    504479}
    505480
    506481bool psFitsWriteImage(psFits* fits,
     482                      const psMetadata* header,
    507483                      const psImage* input,
    508                       int x,
    509                       int y,
    510                       int z)
     484                      int numZPlanes)
    511485{
    512486
     
    526500
    527501    int status = 0;
    528 
    529     psFitsType fitsType = psFitsGetExtType(fits);
    530 
    531     if (fitsType != PS_FITS_TYPE_IMAGE && fitsType != PS_FITS_TYPE_ANY) {
    532         psError(PS_ERR_IO, true,
    533                 PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE);
    534         return false;
    535     }
    536502
    537503    // determine the FITS-equivalent parameters
     
    543509    }
    544510
    545     if (fitsType == PS_FITS_TYPE_ANY) {
    546         int naxis = 3;
    547         long naxes[3];
    548 
    549         naxes[0] = numCols;
    550         naxes[1] = numRows;
    551         naxes[2] = z;
    552 
    553         if (z < 2) {
    554             naxis = 2;
    555         }
    556 
    557         /* write the required keys to make an empty HDU be an IMAGE HDU */
    558         fits_write_imghdr(fits->p_fd, bitPix, naxis, naxes, &status);
    559         if (bZero != 0) {        // set the bscale/bzero
    560             fits_write_key_dbl(fits->p_fd, "BZERO", bZero, 12, "Pixel Value Offset", &status);
    561             fits_write_key_dbl(fits->p_fd, "BSCALE", 1.0, 12, "Pixel Value Scale", &status);
    562             // don't think this is needed: fits_set_bscale(fits->p_fd, bScale, bZero, &status);
    563         }
    564     }
    565 
    566     long firstPixel[3];         /* First Pixel to read */
    567     long lastPixel[3];          /* Last Pixel to read */
    568     firstPixel[0] = x + 1;
    569     firstPixel[1] = y + 1;
    570     firstPixel[2] = z + 1;
    571 
    572     lastPixel[0] = firstPixel[0] + numCols - 1;
    573     lastPixel[1] = firstPixel[1] + numRows - 1;
    574     lastPixel[2] = z + 1;
    575 
    576     fits_write_subset(fits->p_fd, dataType, firstPixel, lastPixel, input->data.V[0], &status);
     511    int naxis = 3;
     512    long naxes[3];
     513
     514    naxes[0] = numCols;
     515    naxes[1] = numRows;
     516    naxes[2] = numZPlanes;
     517
     518    if (numZPlanes < 2) {
     519        naxis = 2;
     520    }
     521
     522    fits_create_img(fits->p_fd, bitPix, naxis, naxes, &status);
     523
     524    if (bZero != 0) {        // set the bscale/bzero
     525        fits_write_key_dbl(fits->p_fd, "BZERO", bZero, 12, "Pixel Value Offset", &status);
     526        fits_write_key_dbl(fits->p_fd, "BSCALE", 1.0, 12, "Pixel Value Scale", &status);
     527        fits_set_bscale(fits->p_fd, 1.0, bZero, &status);
     528    }
     529
     530    // write the header, if any.
     531    if (header != NULL) {
     532        psFitsWriteHeader(fits, header);
     533    }
     534
     535    long firstPixel = (numZPlanes-1)*numRows*numCols; // start write in last z-plane
     536
     537    if (input->parent == NULL) { // if no parent, assume that the image data is contiguous
     538        fits_write_img(fits->p_fd,
     539                       dataType,              // datatype
     540                       firstPixel,                     // writing to the first z-plane
     541                       numCols*numRows,       // number of elements to write, i.e., the whole image
     542                       input->data.V[0],      // the data
     543                       &status);
     544    } else { // image data may not be contiguous; write one row at a time
     545        for (int row = 0; row < numRows; row++) {
     546            fits_write_img(fits->p_fd,
     547                           dataType,          // datatype
     548                           firstPixel,
     549                           numCols,           // number of elements to write, i.e., one row's worth
     550                           input->data.V[row],// the raw row data
     551                           &status);
     552            firstPixel += numCols;  // move to next row
     553        }
     554    }
    577555
    578556    if ( status != 0) {
     
    589567}
    590568
     569bool psFitsWriteHeader(psMetadata* header,
     570                       psFits* fits)
     571{
     572
     573    if (fits == NULL) {
     574        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     575                PS_ERRORTEXT_psFits_NULL);
     576        return false;
     577    }
     578
     579    if (header == NULL) {
     580        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     581                PS_ERRORTEXT_psFits_METADATA_NULL);
     582        return false;
     583    }
     584
     585
     586    return true;
     587}
     588
    591589psMetadata* psFitsReadTableRow(psFits* fits,
    592590                               int row)
    593 {
    594 }
     591{}
    595592
    596593psArray* psFitsReadTableColumn(psFits* fits,
    597594                               const char* colname)
    598 {
    599 }
     595{}
    600596
    601597psVector* psFitsReadTableColumnNum(psFits* fits,
    602598                                   const char* colname)
    603 {
    604 }
     599{}
    605600
    606601
    607602psArray* psFitsReadTable(psFits* fits)
    608 {
    609 }
     603{}
    610604
    611605bool psFitsWriteTable(psFits* fits,
    612606                      psArray* table)
    613 {
    614 }
     607{}
  • trunk/psLib/src/dataIO/psFits.h

    r2375 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-16 20:00:21 $
     9 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6363 *  @return psFitsType    The HDU type, or PS_FITS_TYPE_NONE if move failed.
    6464 */
    65 psFitsType psFitsMoveExtName(
     65bool psFitsMoveExtName(
    6666    psFits* fits,                      ///< the psFits object to move
    6767    const char* extname                ///< the extension name
     
    7272 *  @return psFitsType    The HDU type, or PS_FITS_TYPE_NONE if move failed.
    7373 */
    74 psFitsType psFitsMoveExtNum(
     74bool psFitsMoveExtNum(
    7575    psFits* fits,                      ///< the psFits object to move
    7676    int extnum,                        ///< the extension number to move to (zero is primary HDU)
     
    102102 */
    103103int psFitsGetSize(
    104     psFits* fits                       ///< the psFits object
    105 );
    106 
    107 /** Create a new extension on the end of the file of the given type.  The
    108  *  FITS file is
    109  *
    110  *  @return bool       true if successful, otherwise false
    111  */
    112 bool psFitsCreateExt(
    113104    psFits* fits                       ///< the psFits object
    114105);
     
    152143 */
    153144bool psFitsWriteHeader(
    154     psFits* fits,                      ///< the psFits object
    155     psMetadata* out                    ///< the psMetadata data in which to write
     145    psMetadata* header,                ///< the psMetadata data in which to write
     146    psFits* fits                       ///< the psFits object
    156147);
    157148
     
    160151 *  @return psImage*     the read image or NULL if there was an error.
    161152 */
    162 psImage* psfitsReadImageSection(
     153psImage* psFitsReadImageSection(
    163154    psImage* out,                      ///< a psImage to recycle.
    164155    psFits* fits,                      ///< the psFits object
  • trunk/psLib/src/fileUtils/psFileUtilsErrors.dat

    r2580 r2681  
    3434psFits_METADATA_ADD_FAILED             Failed to add metadata item, %s.
    3535psFits_WRITE_FAILED                    Could not write psImage data to file,'%s'.\nCFITSIO Error: %s
    36 psFits_IMAGE_NULL                      The input psImage was NULL.  Need a non-NULL psImage for operation.
     36psFits_IMAGE_NULL                      The input psImage was NULL.  Need a non-NULL psImage for operation to be performed.
     37psFits_METADATA_NULL                   The input psMetadata was NULL.  Need a non-NULL psMetadata for operation to be performed.
     38#
  • trunk/psLib/src/fileUtils/psFileUtilsErrors.h

    r2600 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-12-02 21:12:52 $
     9 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5656#define PS_ERRORTEXT_psFits_METADATA_ADD_FAILED "Failed to add metadata item, %s."
    5757#define PS_ERRORTEXT_psFits_WRITE_FAILED "Could not write psImage data to file,'%s'.\nCFITSIO Error: %s"
    58 #define PS_ERRORTEXT_psFits_IMAGE_NULL "The input psImage was NULL.  Need a non-NULL psImage for operation."
     58#define PS_ERRORTEXT_psFits_IMAGE_NULL "The input psImage was NULL.  Need a non-NULL psImage for operation to be performed."
     59#define PS_ERRORTEXT_psFits_METADATA_NULL "The input psMetadata was NULL.  Need a non-NULL psMetadata for operation to be performed."
    5960//~End
    6061
  • trunk/psLib/src/fileUtils/psFits.c

    r2375 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-16 20:00:21 $
     9 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    200200}
    201201
    202 psFitsType psFitsMoveExtName(psFits* fits,
    203                              const char* extname)
    204 {
    205     int status = 0;
    206 
    207     if (fits == NULL) {
    208         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    209                 PS_ERRORTEXT_psFits_NULL);
    210         return PS_FITS_TYPE_NONE;
     202bool psFitsMoveExtName(psFits* fits,
     203                       const char* extname)
     204{
     205    int status = 0;
     206
     207    if (fits == NULL) {
     208        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     209                PS_ERRORTEXT_psFits_NULL);
     210        return false;
    211211    }
    212212
     
    218218                PS_ERRORTEXT_psFits_EXTNAME_INVALID,
    219219                extname, fits->filename, fitsErr);
    220         return PS_FITS_TYPE_NONE;
    221     }
    222 
    223     return psFitsGetExtType(fits);
    224 }
    225 
    226 psFitsType psFitsMoveExtNum(psFits* fits,
    227                             int extnum,
    228                             bool relative)
    229 {
    230     if (fits == NULL) {
    231         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    232                 PS_ERRORTEXT_psFits_NULL);
    233         return PS_FITS_TYPE_NONE;
     220        return false;
     221    }
     222
     223    return true;
     224}
     225
     226bool psFitsMoveExtNum(psFits* fits,
     227                      int extnum,
     228                      bool relative)
     229{
     230    if (fits == NULL) {
     231        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     232                PS_ERRORTEXT_psFits_NULL);
     233        return false;
    234234    }
    235235
     
    249249                PS_ERRORTEXT_psFits_EXTNUM_INVALID,
    250250                extnum, fits->filename, fitsErr);
    251         return PS_FITS_TYPE_NONE;
    252     }
    253 
    254     return hdutype;
     251        return false;
     252    }
     253
     254    return true;
    255255}
    256256
     
    304304        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    305305                PS_ERRORTEXT_psFits_NULL);
    306         return PS_FITS_TYPE_NONE;
     306        return 0;
    307307    }
    308308
     
    316316                PS_ERRORTEXT_psFits_GETNUMHDUS_FAILED,
    317317                fits->filename, fitsErr);
    318         return -1;
     318        return 0;
    319319    }
    320320
    321321    return num;
    322 }
    323 
    324 bool psFitsCreateExt(psFits* fits)
    325 {
    326     if (fits == NULL) {
    327         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    328                 PS_ERRORTEXT_psFits_NULL);
    329         return false;
    330     }
    331 
    332     int status = 0;
    333 
    334     fits_create_hdu(fits->p_fd,&status);
    335 
    336     if ( status != 0) {
    337         char fitsErr[MAX_STRING_LENGTH];
    338         (void)fits_get_errstatus(status, fitsErr);
    339         psError(PS_ERR_IO, true,
    340                 PS_ERRORTEXT_psFits_CREATE_HDU_FAILED,
    341                 fits->filename, fitsErr);
    342         return false;
    343     }
    344 
    345     return true;
    346322}
    347323
     
    481457    }
    482458
    483     int status = 0;
    484 
    485459    int size = psFitsGetSize(fits);
    486     int position = psFitsGetExtNum(fits);
    487460
    488461    for (int lcv=0; lcv < size; lcv++) {
     
    502475        }
    503476    }
     477
     478    return out;
    504479}
    505480
    506481bool psFitsWriteImage(psFits* fits,
     482                      const psMetadata* header,
    507483                      const psImage* input,
    508                       int x,
    509                       int y,
    510                       int z)
     484                      int numZPlanes)
    511485{
    512486
     
    526500
    527501    int status = 0;
    528 
    529     psFitsType fitsType = psFitsGetExtType(fits);
    530 
    531     if (fitsType != PS_FITS_TYPE_IMAGE && fitsType != PS_FITS_TYPE_ANY) {
    532         psError(PS_ERR_IO, true,
    533                 PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE);
    534         return false;
    535     }
    536502
    537503    // determine the FITS-equivalent parameters
     
    543509    }
    544510
    545     if (fitsType == PS_FITS_TYPE_ANY) {
    546         int naxis = 3;
    547         long naxes[3];
    548 
    549         naxes[0] = numCols;
    550         naxes[1] = numRows;
    551         naxes[2] = z;
    552 
    553         if (z < 2) {
    554             naxis = 2;
    555         }
    556 
    557         /* write the required keys to make an empty HDU be an IMAGE HDU */
    558         fits_write_imghdr(fits->p_fd, bitPix, naxis, naxes, &status);
    559         if (bZero != 0) {        // set the bscale/bzero
    560             fits_write_key_dbl(fits->p_fd, "BZERO", bZero, 12, "Pixel Value Offset", &status);
    561             fits_write_key_dbl(fits->p_fd, "BSCALE", 1.0, 12, "Pixel Value Scale", &status);
    562             // don't think this is needed: fits_set_bscale(fits->p_fd, bScale, bZero, &status);
    563         }
    564     }
    565 
    566     long firstPixel[3];         /* First Pixel to read */
    567     long lastPixel[3];          /* Last Pixel to read */
    568     firstPixel[0] = x + 1;
    569     firstPixel[1] = y + 1;
    570     firstPixel[2] = z + 1;
    571 
    572     lastPixel[0] = firstPixel[0] + numCols - 1;
    573     lastPixel[1] = firstPixel[1] + numRows - 1;
    574     lastPixel[2] = z + 1;
    575 
    576     fits_write_subset(fits->p_fd, dataType, firstPixel, lastPixel, input->data.V[0], &status);
     511    int naxis = 3;
     512    long naxes[3];
     513
     514    naxes[0] = numCols;
     515    naxes[1] = numRows;
     516    naxes[2] = numZPlanes;
     517
     518    if (numZPlanes < 2) {
     519        naxis = 2;
     520    }
     521
     522    fits_create_img(fits->p_fd, bitPix, naxis, naxes, &status);
     523
     524    if (bZero != 0) {        // set the bscale/bzero
     525        fits_write_key_dbl(fits->p_fd, "BZERO", bZero, 12, "Pixel Value Offset", &status);
     526        fits_write_key_dbl(fits->p_fd, "BSCALE", 1.0, 12, "Pixel Value Scale", &status);
     527        fits_set_bscale(fits->p_fd, 1.0, bZero, &status);
     528    }
     529
     530    // write the header, if any.
     531    if (header != NULL) {
     532        psFitsWriteHeader(fits, header);
     533    }
     534
     535    long firstPixel = (numZPlanes-1)*numRows*numCols; // start write in last z-plane
     536
     537    if (input->parent == NULL) { // if no parent, assume that the image data is contiguous
     538        fits_write_img(fits->p_fd,
     539                       dataType,              // datatype
     540                       firstPixel,                     // writing to the first z-plane
     541                       numCols*numRows,       // number of elements to write, i.e., the whole image
     542                       input->data.V[0],      // the data
     543                       &status);
     544    } else { // image data may not be contiguous; write one row at a time
     545        for (int row = 0; row < numRows; row++) {
     546            fits_write_img(fits->p_fd,
     547                           dataType,          // datatype
     548                           firstPixel,
     549                           numCols,           // number of elements to write, i.e., one row's worth
     550                           input->data.V[row],// the raw row data
     551                           &status);
     552            firstPixel += numCols;  // move to next row
     553        }
     554    }
    577555
    578556    if ( status != 0) {
     
    589567}
    590568
     569bool psFitsWriteHeader(psMetadata* header,
     570                       psFits* fits)
     571{
     572
     573    if (fits == NULL) {
     574        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     575                PS_ERRORTEXT_psFits_NULL);
     576        return false;
     577    }
     578
     579    if (header == NULL) {
     580        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     581                PS_ERRORTEXT_psFits_METADATA_NULL);
     582        return false;
     583    }
     584
     585
     586    return true;
     587}
     588
    591589psMetadata* psFitsReadTableRow(psFits* fits,
    592590                               int row)
    593 {
    594 }
     591{}
    595592
    596593psArray* psFitsReadTableColumn(psFits* fits,
    597594                               const char* colname)
    598 {
    599 }
     595{}
    600596
    601597psVector* psFitsReadTableColumnNum(psFits* fits,
    602598                                   const char* colname)
    603 {
    604 }
     599{}
    605600
    606601
    607602psArray* psFitsReadTable(psFits* fits)
    608 {
    609 }
     603{}
    610604
    611605bool psFitsWriteTable(psFits* fits,
    612606                      psArray* table)
    613 {
    614 }
     607{}
  • trunk/psLib/src/fileUtils/psFits.h

    r2375 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-16 20:00:21 $
     9 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6363 *  @return psFitsType    The HDU type, or PS_FITS_TYPE_NONE if move failed.
    6464 */
    65 psFitsType psFitsMoveExtName(
     65bool psFitsMoveExtName(
    6666    psFits* fits,                      ///< the psFits object to move
    6767    const char* extname                ///< the extension name
     
    7272 *  @return psFitsType    The HDU type, or PS_FITS_TYPE_NONE if move failed.
    7373 */
    74 psFitsType psFitsMoveExtNum(
     74bool psFitsMoveExtNum(
    7575    psFits* fits,                      ///< the psFits object to move
    7676    int extnum,                        ///< the extension number to move to (zero is primary HDU)
     
    102102 */
    103103int psFitsGetSize(
    104     psFits* fits                       ///< the psFits object
    105 );
    106 
    107 /** Create a new extension on the end of the file of the given type.  The
    108  *  FITS file is
    109  *
    110  *  @return bool       true if successful, otherwise false
    111  */
    112 bool psFitsCreateExt(
    113104    psFits* fits                       ///< the psFits object
    114105);
     
    152143 */
    153144bool psFitsWriteHeader(
    154     psFits* fits,                      ///< the psFits object
    155     psMetadata* out                    ///< the psMetadata data in which to write
     145    psMetadata* header,                ///< the psMetadata data in which to write
     146    psFits* fits                       ///< the psFits object
    156147);
    157148
     
    160151 *  @return psImage*     the read image or NULL if there was an error.
    161152 */
    162 psImage* psfitsReadImageSection(
     153psImage* psFitsReadImageSection(
    163154    psImage* out,                      ///< a psImage to recycle.
    164155    psFits* fits,                      ///< the psFits object
  • trunk/psLib/src/fits/psFits.c

    r2375 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-16 20:00:21 $
     9 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    200200}
    201201
    202 psFitsType psFitsMoveExtName(psFits* fits,
    203                              const char* extname)
    204 {
    205     int status = 0;
    206 
    207     if (fits == NULL) {
    208         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    209                 PS_ERRORTEXT_psFits_NULL);
    210         return PS_FITS_TYPE_NONE;
     202bool psFitsMoveExtName(psFits* fits,
     203                       const char* extname)
     204{
     205    int status = 0;
     206
     207    if (fits == NULL) {
     208        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     209                PS_ERRORTEXT_psFits_NULL);
     210        return false;
    211211    }
    212212
     
    218218                PS_ERRORTEXT_psFits_EXTNAME_INVALID,
    219219                extname, fits->filename, fitsErr);
    220         return PS_FITS_TYPE_NONE;
    221     }
    222 
    223     return psFitsGetExtType(fits);
    224 }
    225 
    226 psFitsType psFitsMoveExtNum(psFits* fits,
    227                             int extnum,
    228                             bool relative)
    229 {
    230     if (fits == NULL) {
    231         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    232                 PS_ERRORTEXT_psFits_NULL);
    233         return PS_FITS_TYPE_NONE;
     220        return false;
     221    }
     222
     223    return true;
     224}
     225
     226bool psFitsMoveExtNum(psFits* fits,
     227                      int extnum,
     228                      bool relative)
     229{
     230    if (fits == NULL) {
     231        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     232                PS_ERRORTEXT_psFits_NULL);
     233        return false;
    234234    }
    235235
     
    249249                PS_ERRORTEXT_psFits_EXTNUM_INVALID,
    250250                extnum, fits->filename, fitsErr);
    251         return PS_FITS_TYPE_NONE;
    252     }
    253 
    254     return hdutype;
     251        return false;
     252    }
     253
     254    return true;
    255255}
    256256
     
    304304        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    305305                PS_ERRORTEXT_psFits_NULL);
    306         return PS_FITS_TYPE_NONE;
     306        return 0;
    307307    }
    308308
     
    316316                PS_ERRORTEXT_psFits_GETNUMHDUS_FAILED,
    317317                fits->filename, fitsErr);
    318         return -1;
     318        return 0;
    319319    }
    320320
    321321    return num;
    322 }
    323 
    324 bool psFitsCreateExt(psFits* fits)
    325 {
    326     if (fits == NULL) {
    327         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    328                 PS_ERRORTEXT_psFits_NULL);
    329         return false;
    330     }
    331 
    332     int status = 0;
    333 
    334     fits_create_hdu(fits->p_fd,&status);
    335 
    336     if ( status != 0) {
    337         char fitsErr[MAX_STRING_LENGTH];
    338         (void)fits_get_errstatus(status, fitsErr);
    339         psError(PS_ERR_IO, true,
    340                 PS_ERRORTEXT_psFits_CREATE_HDU_FAILED,
    341                 fits->filename, fitsErr);
    342         return false;
    343     }
    344 
    345     return true;
    346322}
    347323
     
    481457    }
    482458
    483     int status = 0;
    484 
    485459    int size = psFitsGetSize(fits);
    486     int position = psFitsGetExtNum(fits);
    487460
    488461    for (int lcv=0; lcv < size; lcv++) {
     
    502475        }
    503476    }
     477
     478    return out;
    504479}
    505480
    506481bool psFitsWriteImage(psFits* fits,
     482                      const psMetadata* header,
    507483                      const psImage* input,
    508                       int x,
    509                       int y,
    510                       int z)
     484                      int numZPlanes)
    511485{
    512486
     
    526500
    527501    int status = 0;
    528 
    529     psFitsType fitsType = psFitsGetExtType(fits);
    530 
    531     if (fitsType != PS_FITS_TYPE_IMAGE && fitsType != PS_FITS_TYPE_ANY) {
    532         psError(PS_ERR_IO, true,
    533                 PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE);
    534         return false;
    535     }
    536502
    537503    // determine the FITS-equivalent parameters
     
    543509    }
    544510
    545     if (fitsType == PS_FITS_TYPE_ANY) {
    546         int naxis = 3;
    547         long naxes[3];
    548 
    549         naxes[0] = numCols;
    550         naxes[1] = numRows;
    551         naxes[2] = z;
    552 
    553         if (z < 2) {
    554             naxis = 2;
    555         }
    556 
    557         /* write the required keys to make an empty HDU be an IMAGE HDU */
    558         fits_write_imghdr(fits->p_fd, bitPix, naxis, naxes, &status);
    559         if (bZero != 0) {        // set the bscale/bzero
    560             fits_write_key_dbl(fits->p_fd, "BZERO", bZero, 12, "Pixel Value Offset", &status);
    561             fits_write_key_dbl(fits->p_fd, "BSCALE", 1.0, 12, "Pixel Value Scale", &status);
    562             // don't think this is needed: fits_set_bscale(fits->p_fd, bScale, bZero, &status);
    563         }
    564     }
    565 
    566     long firstPixel[3];         /* First Pixel to read */
    567     long lastPixel[3];          /* Last Pixel to read */
    568     firstPixel[0] = x + 1;
    569     firstPixel[1] = y + 1;
    570     firstPixel[2] = z + 1;
    571 
    572     lastPixel[0] = firstPixel[0] + numCols - 1;
    573     lastPixel[1] = firstPixel[1] + numRows - 1;
    574     lastPixel[2] = z + 1;
    575 
    576     fits_write_subset(fits->p_fd, dataType, firstPixel, lastPixel, input->data.V[0], &status);
     511    int naxis = 3;
     512    long naxes[3];
     513
     514    naxes[0] = numCols;
     515    naxes[1] = numRows;
     516    naxes[2] = numZPlanes;
     517
     518    if (numZPlanes < 2) {
     519        naxis = 2;
     520    }
     521
     522    fits_create_img(fits->p_fd, bitPix, naxis, naxes, &status);
     523
     524    if (bZero != 0) {        // set the bscale/bzero
     525        fits_write_key_dbl(fits->p_fd, "BZERO", bZero, 12, "Pixel Value Offset", &status);
     526        fits_write_key_dbl(fits->p_fd, "BSCALE", 1.0, 12, "Pixel Value Scale", &status);
     527        fits_set_bscale(fits->p_fd, 1.0, bZero, &status);
     528    }
     529
     530    // write the header, if any.
     531    if (header != NULL) {
     532        psFitsWriteHeader(fits, header);
     533    }
     534
     535    long firstPixel = (numZPlanes-1)*numRows*numCols; // start write in last z-plane
     536
     537    if (input->parent == NULL) { // if no parent, assume that the image data is contiguous
     538        fits_write_img(fits->p_fd,
     539                       dataType,              // datatype
     540                       firstPixel,                     // writing to the first z-plane
     541                       numCols*numRows,       // number of elements to write, i.e., the whole image
     542                       input->data.V[0],      // the data
     543                       &status);
     544    } else { // image data may not be contiguous; write one row at a time
     545        for (int row = 0; row < numRows; row++) {
     546            fits_write_img(fits->p_fd,
     547                           dataType,          // datatype
     548                           firstPixel,
     549                           numCols,           // number of elements to write, i.e., one row's worth
     550                           input->data.V[row],// the raw row data
     551                           &status);
     552            firstPixel += numCols;  // move to next row
     553        }
     554    }
    577555
    578556    if ( status != 0) {
     
    589567}
    590568
     569bool psFitsWriteHeader(psMetadata* header,
     570                       psFits* fits)
     571{
     572
     573    if (fits == NULL) {
     574        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     575                PS_ERRORTEXT_psFits_NULL);
     576        return false;
     577    }
     578
     579    if (header == NULL) {
     580        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     581                PS_ERRORTEXT_psFits_METADATA_NULL);
     582        return false;
     583    }
     584
     585
     586    return true;
     587}
     588
    591589psMetadata* psFitsReadTableRow(psFits* fits,
    592590                               int row)
    593 {
    594 }
     591{}
    595592
    596593psArray* psFitsReadTableColumn(psFits* fits,
    597594                               const char* colname)
    598 {
    599 }
     595{}
    600596
    601597psVector* psFitsReadTableColumnNum(psFits* fits,
    602598                                   const char* colname)
    603 {
    604 }
     599{}
    605600
    606601
    607602psArray* psFitsReadTable(psFits* fits)
    608 {
    609 }
     603{}
    610604
    611605bool psFitsWriteTable(psFits* fits,
    612606                      psArray* table)
    613 {
    614 }
     607{}
  • trunk/psLib/src/fits/psFits.h

    r2375 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-16 20:00:21 $
     9 *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6363 *  @return psFitsType    The HDU type, or PS_FITS_TYPE_NONE if move failed.
    6464 */
    65 psFitsType psFitsMoveExtName(
     65bool psFitsMoveExtName(
    6666    psFits* fits,                      ///< the psFits object to move
    6767    const char* extname                ///< the extension name
     
    7272 *  @return psFitsType    The HDU type, or PS_FITS_TYPE_NONE if move failed.
    7373 */
    74 psFitsType psFitsMoveExtNum(
     74bool psFitsMoveExtNum(
    7575    psFits* fits,                      ///< the psFits object to move
    7676    int extnum,                        ///< the extension number to move to (zero is primary HDU)
     
    102102 */
    103103int psFitsGetSize(
    104     psFits* fits                       ///< the psFits object
    105 );
    106 
    107 /** Create a new extension on the end of the file of the given type.  The
    108  *  FITS file is
    109  *
    110  *  @return bool       true if successful, otherwise false
    111  */
    112 bool psFitsCreateExt(
    113104    psFits* fits                       ///< the psFits object
    114105);
     
    152143 */
    153144bool psFitsWriteHeader(
    154     psFits* fits,                      ///< the psFits object
    155     psMetadata* out                    ///< the psMetadata data in which to write
     145    psMetadata* header,                ///< the psMetadata data in which to write
     146    psFits* fits                       ///< the psFits object
    156147);
    157148
     
    160151 *  @return psImage*     the read image or NULL if there was an error.
    161152 */
    162 psImage* psfitsReadImageSection(
     153psImage* psFitsReadImageSection(
    163154    psImage* out,                      ///< a psImage to recycle.
    164155    psFits* fits,                      ///< the psFits object
  • trunk/psLib/src/sys/psErrorCodes.c

    r2273 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-04 01:05:00 $
     9 *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    7676
    7777        // search dynamic list of error descriptions before giving up.
    78         desc = (psErrorDescription*)psListGet(dynamicErrorCodes,PS_LIST_HEAD);
    79         while (desc != NULL) {
     78        psListIterator* iter = psListIteratorAlloc(dynamicErrorCodes,PS_LIST_HEAD);
     79        while ((desc = (psErrorDescription*)psListGetNext(iter)) != NULL) {
    8080            if (desc->code == code) {
    8181                return desc;
    8282            }
    83             desc = (psErrorDescription*)psListGetNext(dynamicErrorCodes);
    8483        }
    8584    }
     
    178177    }
    179178
    180     return psListRemove(dynamicErrorCodes,PS_LIST_UNKNOWN,(psPtr)desc);
     179    return psListRemoveData(dynamicErrorCodes,(psPtr)desc);
    181180}
  • trunk/psLib/src/sysUtils/psErrorCodes.c

    r2273 r2681  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-04 01:05:00 $
     9 *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-10 02:50:15 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    7676
    7777        // search dynamic list of error descriptions before giving up.
    78         desc = (psErrorDescription*)psListGet(dynamicErrorCodes,PS_LIST_HEAD);
    79         while (desc != NULL) {
     78        psListIterator* iter = psListIteratorAlloc(dynamicErrorCodes,PS_LIST_HEAD);
     79        while ((desc = (psErrorDescription*)psListGetNext(iter)) != NULL) {
    8080            if (desc->code == code) {
    8181                return desc;
    8282            }
    83             desc = (psErrorDescription*)psListGetNext(dynamicErrorCodes);
    8483        }
    8584    }
     
    178177    }
    179178
    180     return psListRemove(dynamicErrorCodes,PS_LIST_UNKNOWN,(psPtr)desc);
     179    return psListRemoveData(dynamicErrorCodes,(psPtr)desc);
    181180}
  • trunk/psLib/src/types/psList.c

    r2375 r2681  
    66 *  @author Robert Daniel DeSonia, MHPCC
    77 *
    8  *  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2004-11-16 20:00:20 $
     8 *  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2004-12-10 02:50:14 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2929
    3030// private functions.
    31 static psListElem* listGetIterator(psList* list);
    32 static psS32 listGetIteratorIndex(psList* list);
    33 static void listSetIterator(psList* list, psS32 where, psBool lockList);
    3431static void listFree(psList* list);
    35 
    36 psList* psListAlloc(psPtr data)
    37 {
    38     psList* list = psAlloc(sizeof(psList));
    39 
    40     p_psMemSetDeallocator(list, (psFreeFcn) listFree);
    41 
    42     list->size = 0;
    43     list->head = list->tail = NULL;
    44     list->p_iter = ITER_INIT_HEAD;
    45     list->p_iterIndex = PS_LIST_HEAD;
    46 
    47     pthread_mutex_init(&(list->lock), NULL)
    48     ;
    49 
    50     if (data != NULL) {
    51         psListAdd(list, PS_LIST_TAIL, data);
    52     }
    53 
    54     return list;
    55 }
     32static void listIteratorFree(psListIterator* iter);
     33static psBool listIteratorRemove(psListIterator* iterator);
    5634
    5735static void listFree(psList* list)
     
    6442    ;
    6543
     44    psFree(list->iterators);
     45
    6646    for (psListElem* ptr = list->head; ptr != NULL;) {
    6747        psListElem* next = ptr->next;
     
    8161}
    8262
    83 psBool psListAdd(psList* list, psS32 location, psPtr data)
    84 {
    85     psListElem* position;
    86     psListElem* elem;
    87     psS32 cursorIndex = 0;
    88 
    89     if (list == NULL) {
    90         return false;
    91     }
    92 
    93     if (data == NULL) {
    94         return false;
    95     }
    96 
    97     if (location <= PS_LIST_UNKNOWN) {
    98         // / XXX What is the better way to communicate this failure to the caller?
    99         psLogMsg(__func__, PS_LOG_WARN, "The given insert location (%i) for psListAdd is invalid.", location);
    100         return false;
    101     }
    102 
    103     elem = psAlloc(sizeof(psListElem));
     63static void listIteratorFree(psListIterator* iter)
     64{
     65    if (iter == NULL) {
     66        return;
     67    }
     68
     69    // remove this iterator from the parent list
     70    psArrayRemove(iter->list->iterators,iter);
     71
     72}
     73
     74static psBool listIteratorRemove(psListIterator* iterator)
     75{
     76    if (iterator == NULL) {
     77        return false;
     78    }
     79
     80    psListElem* elem = iterator->cursor;
     81    psList* list = iterator->list;
     82    int index = iterator->index;
    10483
    10584    pthread_mutex_lock(&list->lock)
    10685    ;
    10786
    108     if (location > 0 && location > list->size) {
    109         psLogMsg(__func__, PS_LOG_WARN,
    110                  "Invalid index %d (only %d elements in psList); assuming tail.", location, list->size);
    111         location = PS_LIST_TAIL;
    112     }
    113 
    114     if (location == PS_LIST_TAIL || list->size == 0) {
    115         // insert the element at the end of the list
    116         elem->prev = list->tail;
    117         elem->next = NULL;
    118 
    119         if (list->tail != NULL) {
    120             list->tail->next = elem;
    121         }
    122 
    123         if (list->head == NULL) {
    124             list->head = elem;
    125         }
    126         list->tail = elem;
    127 
    128         list->size++;
    129         list->p_iter = elem;
    130         list->p_iterIndex = list->size - 1;
    131     } else {
    132         // move ourselves to the given position
    133         listSetIterator(list, location, false);
    134         position = listGetIterator(list);
    135         cursorIndex = listGetIteratorIndex(list);
    136 
    137         if (position == NULL) {
    138             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    139                     "Failed to move cursor to specified location (%d)", location);
    140             position = list->head;         // since we no list->size != 0, this must be non-NULL
    141         }
    142         // insert our new element in front of the given position
    143         elem->prev = position->prev;
    144         elem->next = position;
    145         position->prev = elem;
    146 
    147         if (elem->prev == NULL) {          // must be front of list
    148             list->head = elem;
    149         } else {
    150             elem->prev->next = elem;
    151         }
    152 
    153         list->size++;
    154         list->p_iter = elem;
    155         list->p_iterIndex = cursorIndex;
    156     }
    157 
    158     elem->data = psMemIncrRefCounter(data);
    159 
    160     pthread_mutex_unlock(&list->lock)
    161     ;
    162 
    163     return true;
    164 }
    165 
    166 
    167 /*
    168  * Remove an element from a list
    169  */
    170 psBool psListRemove(psList* list, psS32 location, psPtr data)
    171 {
    172     psListElem* elem = NULL;    // element to remove
    173     psS32 cursorIndex = 0;
    174 
    175     if (list == NULL) {
    176         psError(PS_ERR_BAD_PARAMETER_NULL, true, "list parameter found to be NULL.");
    177         return false;
    178     }
    179     // get exclusive access to list so that other threads will not get in the way.
    180     pthread_mutex_lock(&list->lock)
    181     ;
    182 
    183     if (location == PS_LIST_UNKNOWN) {
    184         // search list for the data item.
    185 
    186         psS32 i = 0;              // index
    187 
    188         for (psListElem* ptr = list->head; ptr != NULL; ptr = ptr->next) {
    189             if (ptr->data == data) {
    190                 location = i;
    191                 break;
    192             }
    193             i++;
    194         }
    195 
    196         if (location == PS_LIST_UNKNOWN) {
    197             psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Failed to find item in given psList.");
    198             pthread_mutex_unlock(&list->lock)
    199             ;
    200             return false;
    201         }
    202     }
    203     // position the list's cursor to the desired location
    204     listSetIterator(list, location, false);
    205     elem = listGetIterator(list);
    206     cursorIndex = listGetIteratorIndex(list);
    207 
    208     if (elem == NULL) {
    209         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    210                 "Couldn't position to given index (%d) to remove element from list.", location);
    211         pthread_mutex_unlock(&list->lock)
    212         ;
    213         return false;
    214     }
    215 
    216     list->size--;
    217 
    218     if (elem->prev == NULL) {              // head of list?
     87    if (elem == list->head) {        // head of list?
    21988        list->head = elem->next;
    22089    } else {
     
    22291    }
    22392
    224     if (elem->next == NULL) {              // tail of list?
     93    if (elem == list->tail) {        // tail of list?
    22594        list->tail = elem->prev;
    226 
    227         // removed tail, so iter should be the last element of list to keep it valid
    228         if (list->size > 0) {
    229             list->p_iter = list->tail;
    230             list->p_iterIndex = list->size - 1;
     95    } else {
     96        elem->next->prev = elem->prev;
     97    }
     98
     99    psArray* iterators = list->iterators;
     100    for (int i = 0; i < iterators->n; i++) {
     101        psListIterator* iter = (psListIterator*) iterators->data[i];
     102        if (iter->cursor == elem) {
     103            iter->cursor = NULL;
     104        } else if (iter->index > index) {
     105            iter->index--;
     106        }
     107    }
     108
     109    list->size--;
     110
     111    pthread_mutex_unlock(&list->lock)
     112    ;
     113
     114    // OK, delete orphaned list element and its data
     115    psFree(elem->data);
     116    psFree(elem);
     117
     118    return true;
     119}
     120
     121psList* psListAlloc(psPtr data)
     122{
     123    psList* list = psAlloc(sizeof(psList));
     124
     125    p_psMemSetDeallocator(list, (psFreeFcn) listFree);
     126
     127    list->size = 0;
     128    list->head = list->tail = NULL;
     129    list->iterators = psArrayAlloc(16);
     130
     131    // create a default iterator
     132    list->iterators->data[0] = psListIteratorAlloc(list,PS_LIST_HEAD);
     133    list->iterators->n = 1;
     134
     135    pthread_mutex_init(&(list->lock), NULL)
     136    ;
     137
     138    if (data != NULL) {
     139        psListAdd(list, PS_LIST_TAIL, data);
     140    }
     141
     142    return list;
     143}
     144
     145psListIterator* psListIteratorAlloc(psList* list, int location)
     146{
     147    psListIterator* iter = psAlloc(sizeof(psListIterator));
     148
     149    p_psMemSetDeallocator(iter, (psFreeFcn) listIteratorFree);
     150
     151    // initialize the attributes
     152    iter->list = list;
     153    iter->cursor = NULL;
     154    iter->index = 0;
     155    iter->offEnd = false;
     156
     157    // add to the list's array of iterators
     158    psArray* listIterators = list->iterators;
     159    int num = listIterators->n;
     160    if ( num >= listIterators->nalloc) {
     161        // need to resize the array to make more room for another iterator.
     162        list->iterators = psArrayRealloc(listIterators,listIterators->nalloc*2);
     163        listIterators = list->iterators;
     164    }
     165    listIterators->data[num] = iter;
     166    listIterators->n = num+1;
     167
     168    if (! psListIteratorSet(iter,location)) {
     169        psFree(iter);
     170        iter = NULL;
     171    }
     172
     173    return iter;
     174}
     175
     176psBool psListIteratorSet(psListIterator* iterator,
     177                         int location)
     178{
     179    if (iterator == NULL) {
     180        return false;
     181    }
     182
     183    psList* list = iterator->list;
     184
     185    if (location >= list->size) {
     186        psLogMsg(__func__, PS_LOG_WARN,
     187                 "Specified index, %d, is beyond the end of the psList, which "
     188                 "has only %d elements.  Assuming tail.",
     189                 location, list->size);
     190        location = PS_LIST_TAIL;
     191    }
     192
     193    if (location == PS_LIST_TAIL) {
     194        iterator->cursor = list->tail;
     195        iterator->index = list->size - 1;
     196        iterator->offEnd = false;
     197        return true;
     198    }
     199
     200    if (location <= 0) {   // Invalid index
     201        return false;
     202    }
     203
     204
     205    psListElem* cursor = iterator->cursor;
     206    int index = iterator->index;
     207    if (cursor == NULL) {      // set the cursor to the head if it is NULL
     208        if (location > list->size/2) { // closer to tail or head?
     209            cursor = list->tail;
     210            index = list->size - 1;
    231211        } else {
    232             list->p_iter = ITER_INIT_TAIL;
     212            cursor = list->head;
     213            index = 0;
     214        }
     215    }
     216
     217    if (location < index) {
     218        psS32 diff = index - location;
     219
     220        for (psS32 count = 0; count < diff; count++) {
     221            cursor = cursor->prev; // shouldn't need to check for NULL
    233222        }
    234223    } else {
    235         elem->next->prev = elem->prev;
    236         list->p_iter = elem->next;
    237         list->p_iterIndex = cursorIndex;
     224        psS32 diff = location - index;
     225
     226        for (psS32 count = 0; count < diff; count++) {
     227            cursor = cursor->next; // shouldn't need to check for NULL
     228        }
     229    }
     230    iterator->cursor = cursor;
     231    iterator->index = location;
     232    iterator->offEnd = false;
     233
     234    return true;
     235}
     236
     237psBool psListAdd(psList* list, psS32 location, psPtr data)
     238{
     239
     240    if (list == NULL) {
     241        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     242                PS_ERRORTEXT_psList_LIST_NULL);
     243        return false;
     244    }
     245
     246    if (data == NULL) {
     247        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     248                PS_ERRORTEXT_psList_DATA_NULL);
     249        return false;
     250    }
     251
     252    // move ourselves to the given position
     253    if (list->iterators->n < 1 ||
     254            ! psListIteratorSet(list->iterators->data[0],location)) {
     255        // oh no, I can't find where to add this!
     256        psError(PS_ERR_UNKNOWN, false,
     257                PS_ERRORTEXT_psList_LOCATION_INVALID,
     258                location);
     259        return false;
     260    }
     261
     262    if (location == PS_LIST_TAIL) {
     263        // insert the element at the end of the list
     264        return psListAddAfter(list->iterators->data[0],data);
     265    } else {
     266        return psListAddBefore(list->iterators->data[0],data);
     267    }
     268}
     269
     270bool psListAddAfter(psListIterator* iterator, void* data)
     271{
     272    if (data == NULL) {
     273        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     274                PS_ERRORTEXT_psList_DATA_NULL);
     275        return false;
     276    }
     277
     278    if (iterator == NULL) {
     279        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     280                PS_ERRORTEXT_psList_ITERATOR_NULL);
     281        return false;
     282    }
     283
     284    psListElem* cursor = iterator->cursor;
     285
     286    if (cursor == NULL) {
     287        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     288                PS_ERRORTEXT_psList_ITERATOR_INVALID);
     289        return false;
     290    }
     291
     292    psList* list = iterator->list;
     293    psListElem* elem = psAlloc(sizeof(psListElem));
     294
     295    pthread_mutex_lock(&list->lock)
     296    ;
     297
     298    // set the new list element's attributes
     299    elem->prev = cursor;
     300    elem->next = cursor->next;
     301    elem->data = data;
     302
     303    cursor->next = elem;
     304    list->size++;
     305
     306    if (cursor == list->tail) {
     307        list->tail = elem;
     308    }
     309
     310    psArray* iterators = list->iterators;
     311    int index = iterator->index;
     312    for (int i = 0; i < iterators->n; i++) {
     313        psListIterator* iter = (psListIterator*) iterators->data[i];
     314        if (iter->index > index) {
     315            iter->index++;
     316        }
    238317    }
    239318
     
    241320    ;
    242321
    243     // OK, delete list element and its data
    244     psFree(elem->data);
    245     psFree(elem);
    246 
    247322    return true;
    248323}
    249324
    250 void psListSetIterator(psList* list, psS32 where)
    251 {
    252     listSetIterator(list, where, true);
    253 }
    254 
    255 static void listSetIterator(psList* list, psS32 where, psBool lockList)
    256 {
    257     psListElem* cursor;
    258     psS32 position;
    259 
     325bool psListAddBefore(psListIterator* iterator, void* data)
     326{
     327    if (data == NULL) {
     328        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     329                PS_ERRORTEXT_psList_DATA_NULL);
     330        return false;
     331    }
     332
     333    if (iterator == NULL) {
     334        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     335                PS_ERRORTEXT_psList_ITERATOR_NULL);
     336        return false;
     337    }
     338
     339    psListElem* cursor = iterator->cursor;
     340
     341    if (cursor == NULL) {
     342        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     343                PS_ERRORTEXT_psList_ITERATOR_INVALID);
     344        return false;
     345    }
     346
     347    psList* list = iterator->list;
     348    psListElem* elem = psAlloc(sizeof(psListElem));
     349
     350    pthread_mutex_lock(&list->lock)
     351    ;
     352
     353    // set the new list element's attributes
     354    elem->prev = cursor->prev;
     355    elem->next = cursor;
     356    elem->data = data;
     357
     358    cursor->prev = elem;
     359    list->size++;
     360
     361    if (cursor == list->head) {
     362        list->head = elem;
     363    }
     364
     365    psArray* iterators = list->iterators;
     366    int index = iterator->index;
     367    for (int i = 0; i < iterators->n; i++) {
     368        psListIterator* iter = (psListIterator*) iterators->data[i];
     369        if (iter->index >= index) {
     370            iter->index++;
     371        }
     372    }
     373
     374    pthread_mutex_unlock(&list->lock)
     375    ;
     376
     377    return true;
     378}
     379
     380psBool psListRemove(psList* list,
     381                    psS32 location)
     382{
    260383    if (list == NULL) {
    261384        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    262                 "Unexpected null pointer for psList parameter.");
    263         return;
    264     }
    265 
    266     if (where == PS_LIST_CURRENT) {
    267         return;
    268     }
    269 
    270     if (lockList) {
    271         pthread_mutex_lock(&list->lock)
    272         ;
    273         // don't want the list changing on us while we move about
    274     }
    275 
    276     if (where >= (psS32)list->size) {
    277         list->p_iter = NULL;
    278         if (lockList) {
    279             pthread_mutex_unlock(&list->lock)
    280             ;
    281         }
    282         return;
    283     }
    284 
    285     switch (where) {
    286     case PS_LIST_HEAD:
    287         list->p_iter = ITER_INIT_HEAD;
    288         break;
    289 
    290     case PS_LIST_TAIL:
    291         list->p_iter = ITER_INIT_TAIL;
    292         break;
    293 
    294     case PS_LIST_PREVIOUS:
    295         cursor = listGetIterator(list);
    296         position = listGetIteratorIndex(list);
    297 
    298         if (cursor != NULL) {
    299             list->p_iter = cursor->prev;
    300             list->p_iterIndex = position - 1;
    301         }
    302         break;
    303 
    304     case PS_LIST_NEXT:
    305         cursor = listGetIterator(list);
    306         position = listGetIteratorIndex(list);
    307 
    308         if (cursor != NULL) {
    309             list->p_iter = cursor->next;
    310             list->p_iterIndex = position + 1;
    311         }
    312         break;
    313 
    314     case PS_LIST_CURRENT:
    315         break;
    316 
    317     default:
    318         if (where <= PS_LIST_HEAD) {   // bascially same as PS_LIST_UNKNOWN above
    319             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    320                     "Can't move to an unknown position.  Not moving the iterator position.");
    321         } else {
    322             cursor = listGetIterator(list);
    323             if (cursor == NULL) {      // reset the iterator if it is invalid
    324                 list->p_iter = ITER_INIT_HEAD;
    325                 list->p_iterIndex = 0;
    326             }
    327 
    328             psS32 position = listGetIteratorIndex(list);
    329 
    330             if (where < position) {
    331                 psS32 diff = position - where;
    332 
    333                 for (psS32 count = 0; count < diff; count++) {
    334                     listSetIterator(list, PS_LIST_PREVIOUS, false);
    335                 }
    336             } else {
    337                 psS32 diff = where - position;
    338 
    339                 for (psS32 count = 0; count < diff; count++) {
    340                     listSetIterator(list, PS_LIST_NEXT, false);
    341                 }
    342             }
    343         }
    344         break;
    345     }
    346 
    347     if (lockList) {
    348         pthread_mutex_unlock(&list->lock)
    349         ;
    350     }
    351 }
    352 
    353 psListElem* listGetIterator(psList* list)
     385                PS_ERRORTEXT_psList_LIST_NULL);
     386        return false;
     387    }
     388
     389    // move ourselves to the given position
     390    psListIterator* defaultIterator = list->iterators->data[0];
     391    if (list->iterators->n < 1 ||
     392            ! psListIteratorSet(defaultIterator,location)) {
     393        // oh no, I can't find where to add this!
     394        psError(PS_ERR_UNKNOWN, false,
     395                PS_ERRORTEXT_psList_LOCATION_INVALID,
     396                location);
     397        return false;
     398    }
     399
     400    return listIteratorRemove(defaultIterator);
     401}
     402
     403psBool psListRemoveData(psList* list,
     404                        psPtr data)
    354405{
    355406    if (list == NULL) {
     407        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     408                PS_ERRORTEXT_psList_LIST_NULL);
     409        return false;
     410    }
     411
     412    if (data == NULL) {
     413        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     414                PS_ERRORTEXT_psList_DATA_NULL);
     415        return false;
     416    }
     417
     418    psListIterator* iterator = list->iterators->data[0];
     419    psListIteratorSet(iterator,PS_LIST_HEAD);
     420
     421    psPtr iteratorData = psListGetNext(iterator);
     422    while (iteratorData != NULL && iteratorData != data) {
     423        iteratorData = psListGetNext(iterator);
     424    }
     425
     426    if (iteratorData == NULL) {
     427        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     428                PS_ERRORTEXT_psList_DATA_NOT_FOUND);
     429        return false;
     430    }
     431
     432    return listIteratorRemove(iterator);
     433}
     434
     435psPtr psListGet(psList* list, psS32 location)
     436{
     437    psListIterator* iterator = list->iterators->data[0];
     438
     439    if (! psListIteratorSet(iterator,location)) {
     440        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     441                PS_ERRORTEXT_psList_LOCATION_INVALID,
     442                location);
    356443        return NULL;
    357444    }
    358445
    359     if (list->p_iter == ITER_INIT_HEAD) {
    360         return list->head;
    361     } else if (list->p_iter == ITER_INIT_TAIL) {
    362         return list->tail;
    363     } else {
    364         return list->p_iter;
    365     }
    366 }
    367 
    368 psS32 listGetIteratorIndex(psList* list)
    369 {
    370     if (list->p_iter == ITER_INIT_HEAD) {
    371         return 0;
    372     } else if (list->p_iter == ITER_INIT_TAIL) {
    373         return list->size - 1;
    374     } else {
    375         return list->p_iterIndex;
    376     }
    377 }
    378 
    379 psPtr psListGet(psList* list, psS32 location)
    380 {
    381     psListElem* element;
    382 
    383     psListSetIterator(list, location);
    384     element = listGetIterator(list);
    385 
    386     if (element == NULL) {
    387         return NULL;
    388     } else {
    389         return element->data;
    390     }
     446    return iterator->cursor->data;
    391447}
    392448
     
    394450 * and now return the previous/next element of the list
    395451 */
    396 psPtr psListGetNext(psList* list)
    397 {
    398     return psListGet(list, PS_LIST_NEXT);
    399 }
    400 
    401 psPtr psListGetPrevious(psList* list)
    402 {
    403     return psListGet(list, PS_LIST_PREVIOUS);
    404 }
    405 
    406 psPtr psListGetCurrent(psList* list)
    407 {
    408     return psListGet(list, PS_LIST_CURRENT);
     452psPtr psListGetNext(psListIterator* iterator)
     453{
     454    if (iterator == NULL || iterator->cursor == NULL) {
     455        return NULL;
     456    }
     457
     458    psPtr data = iterator->cursor->data;
     459
     460    iterator->cursor = iterator->cursor->next;
     461    iterator->index++;
     462    if (iterator->cursor == NULL) {
     463        iterator->offEnd = true;
     464    }
     465
     466    return data;
     467}
     468
     469psPtr psListGetPrevious(psListIterator* iterator)
     470{
     471    if (iterator == NULL || iterator->cursor == NULL) {
     472        return NULL;
     473    }
     474
     475    psPtr data = iterator->cursor->data;
     476
     477    iterator->cursor = iterator->cursor->prev;
     478    iterator->index--;
     479
     480    return data;
    409481}
    410482
     
    467539    // convert to indexable vector for use by qsort.
    468540    arr = psListToArray(list);
     541    psArray* iterators = psMemIncrRefCounter(list->iterators);
    469542    psFree(list);
    470543
     
    473546    // convert back to linked list
    474547    list = psArrayToList(arr);
     548    psFree(list->iterators);
     549    list->iterators = iterators;
    475550    psFree(arr);
    476551
     552    // sorting should invalidate all iterator positions.
     553    for (int i = 0; i < iterators->n; i++) {
     554        ((psListIterator*)iterators->data[i])->cursor = NULL;
     555    }
     556
    477557    return list;
    478558}
  • trunk/psLib/src/types/psList.h

    r2375 r2681  
    1010 *  @ingroup LinkedList
    1111 *
    12  *  @version $Revision: 1.17 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2004-11-16 20:00:20 $
     12 *  @version $Revision: 1.18 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2004-12-10 02:50:14 $
    1414 *
    1515 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3434    PS_LIST_HEAD = 0,                  ///< at head
    3535    PS_LIST_TAIL = -1,                 ///< at tail
    36     PS_LIST_PREVIOUS = -2,             ///< previous element
    37     PS_LIST_CURRENT = -3,              ///< current element
    38     PS_LIST_NEXT = -4,                 ///< next element
    39     PS_LIST_UNKNOWN = -5               ///< unknown position (should be last in enum list)
    4036};
    4137
     
    5955    psListElem* head;                  ///< first element on list (may be NULL)
    6056    psListElem* tail;                  ///< last element on list (may be NULL)
    61     psArray* iterators;                ///< iterators
     57    psArray* iterators;
     58    ///< array of all iterators associated with this list.  First iterator is
     59    ///< used internally to improve performance when using indexed access, all
     60    ///< others are user-level iterators created by psListIteratorAlloc.
     61
    6262    pthread_mutex_t lock;              ///< mutex to lock a node during changes
    63 psListElem* p_iter;                ///< internal cursor for increased performance index accessing
    64 int p_iterIndex;                   ///< index position of the iter.
    6563}
    6664psList;
     
    7775{
    7876psList* list;                      ///< List iterator to works on
    79 psU32 number;                      ///< List iterator number
    8077psListElem* cursor;                ///< current cursor position
     78int index;                         ///< the index number in the list
    8179bool offEnd;                       ///< Iterator off the end?
    8280}
     
    9492;
    9593
     94/** Creates a psListIterator object and associates it with a psList.
     95 *
     96 *  @return psListIterator* A new psListIterator object.
     97 */
     98psListIterator* psListIteratorAlloc(
     99    psList* list,                      ///< the psList to iterate with
     100    int location                       ///< the initial starting point.
     101    ///<  This can be a numeric index, PS_LIST_HEAD, or PS_LIST_TAIL.
     102);
     103
     104/** Set the iterator of the list to a given position.  If location is invalid the
     105 *  iterator position is not changed.
     106 *
     107 *  @return psBool        TRUE if iterator successfully set, otherwise FALSE.
     108 */
     109psBool psListIteratorSet(
     110    psListIterator* iterator,            ///< list iterator
     111    int location                         ///< index number, PS_LIST_HEAD, or PS_LIST_TAIL
     112);
     113
    96114/** Adds an element to a psList at position given.
    97115 *
    98  *  @return psList* The psList with added data item.  If list parameter is
    99  *                      NULL, the return value will also be NULL.
     116 *  @return psBool        TRUE if item was successfully added, otherwise FALSE.
    100117 */
    101118psBool psListAdd(
    102     psList* restrict list,             ///< list to add to (if NULL, nothing is done)
    103     psS32 location,                      ///< index, PS_LIST_HEAD, PS_LIST_TAIL, or numbered location.
     119    psList* restrict list,             ///< list to add item to
     120    psS32 location,                    ///< index, PS_LIST_HEAD, PS_LIST_TAIL, or numbered location.
    104121    psPtr data                         ///< data item to add.  If NULL, list is not modified.
    105122);
    106123
    107 /** Remove an item from a list.  If location parameter is PS_LIST_UNKNOWN,
     124/** Adds an data item to a psList at position just after the list position given
     125 *
     126 *  @return psBool        TRUE if item was successfully added, otherwise FALSE.
     127 */
     128psBool psListAddAfter(
     129    psListIterator* list,              ///< list position to add item to
     130    psPtr data                         ///< data item to add.  If NULL, list is not modified.
     131);
     132
     133/** Adds an data item to a psList at position just before the list position given
     134 *
     135 *  @return psBool        TRUE if item was successfully added, otherwise FALSE.
     136 */
     137psBool psListAddBefore(
     138    psListIterator* list,              ///< list position to add item to
     139    psPtr data                         ///< data item to add.  If NULL, list is not modified.
     140);
     141
     142/** Remove an item at the specified location from a list.
    108143 *
    109144 *  @return psBool        TRUE if element is successfully removed, otherwise FALSE.
    110145 */
    111146psBool psListRemove(
    112     psList* restrict list,
    113     ///< list to remove element from
    114     psS32 location,
    115     ///< index of item, or PS_LIST_UNKNOWN, PS_LIST_NEXT, PS_LIST_PREV, or numbered location.
    116     psPtr data
    117     ///< if location is PS_LIST_UNKNOWN, data item to find and remove, otherwise this is ignored.
     147    psList* restrict list,             ///< list to remove element from
     148    psS32 location                     ///< index of item
     149);
     150
     151/** Remove an item from a list.
     152 *
     153 *  @return psBool        TRUE if element is successfully removed, otherwise FALSE.
     154 */
     155psBool psListRemoveData(
     156    psList* restrict list,             ///< list to remove element from
     157    psPtr data                         ///< data item to find and remove
    118158);
    119159
     
    127167psPtr psListGet(
    128168    psList* restrict list,             ///< list to retrieve element from
    129     psS32 location                       ///< index number, or PS_LIST_NEXT, PS_LIST_PREV, PS_LIST_UNKNOWN
    130 );
    131 
    132 /** Set the iterator of the list to a given position.  If location is invalid the
    133  *  iterator position is not changed.
    134  *
    135  */
    136 void psListSetIterator(
    137     psList* restrict list,             ///< list to retrieve element from
    138     psS32 location                       ///< index number, PS_LIST_HEAD, or PS_LIST_TAIL
    139 );
    140 
    141 /** Get next element relative to the iterator.  This also moves the iterator to
    142  *  the next list position.
    143  *
    144  *  @return psPtr       the data item next on the list or NULL if the iterator
    145  *                      is already pointing to the last element or the list
    146  *                      parameter was NULL.
     169    psS32 location                     ///< index number, PS_LIST_HEAD, or PS_LIST_TAIL
     170);
     171
     172/** Position the specified iterator to the next item in list.
     173 *
     174 *  @return psPtr       the data item at the new iterator position or NULL if the
     175 *                      iterator goes past the end of the list.
    147176 */
    148177psPtr psListGetNext(
    149     psList* restrict list              ///< list to retrieve element from
    150 );
    151 
    152 /** Get current element according to the psList's iterator cursor.  This does
    153  *  not move the iterator location.
    154  *
    155  *  @return psPtr       the data item cooresponding to current iterator
    156  *                      cursor position of the list, or NULL if either the
    157  *                      iterator is not valid or list parameter was NULL.
    158  */
    159 psPtr psListGetCurrent(
    160     psList* restrict list              ///< list to retrieve element from
    161 );
    162 
    163 /** Get previous element relative to list's iterator. This also moves the
    164  *  iterator to the previous list position.
    165  *
    166  *  @return psPtr       the data item previous on the list or NULL if the iterator
    167  *                      is already pointing to the first element or the list
    168  *                      parameter was NULL.
     178    psListIterator* restrict iterator  ///< iterator to move
     179);
     180
     181/** Position the specified iterator to the previous item in list.
     182 *
     183 *  @return psPtr       the data item at the new iterator position or NULL if the
     184 *                      iterator goes past the beginning of the list.
    169185 */
    170186psPtr psListGetPrevious(
    171     psList* restrict list              ///< list to retrieve element from
     187    psListIterator* restrict iterator  ///< iterator to move
    172188);
    173189
  • trunk/psLib/src/types/psMetadata.c

    r2659 r2681  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.42 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2004-12-07 23:27:25 $
     14*  @version $Revision: 1.43 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2004-12-10 02:50:14 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    352352{
    353353    psList* mdList = NULL;
    354     psList* entryList = NULL;
    355354    psHash* mdTable = NULL;
    356355    psMetadataItem* entry = NULL;
    357     psMetadataItem* entryChild = NULL;
    358356
    359357
     
    375373        }
    376374
    377         if (entry->type == PS_META_LIST) {
    378 
    379             // Table entry has children. Entry and children must be removed from metadata collection's list
    380             psListSetIterator(entryList, PS_LIST_HEAD);
    381             entryChild = psListGetCurrent(entryList);
    382             while(entryChild != NULL) {
    383                 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) {
    384                     psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    385                     return false;
    386                 }
    387                 entryChild = psListGetNext(entryList);
    388             }
    389         } else {
    390 
    391             // Table entry has no children. Remove entry from metadata collection's list
    392             if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) {
    393                 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    394                 return false;
    395             }
    396         }
    397         // Remove entry from metadata collection's table
    398         if (!psHashRemove(mdTable, key)) {
    399             psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
    400             return false;
    401         }
    402375    } else {
    403376
     
    414387            return false;
    415388        }
    416         // Use recursive remove, now that key is known
    417         psMetadataRemove(md, PS_LIST_UNKNOWN, key);
     389    }
     390
     391    if (!psListRemoveData(mdList, entry)) {
     392        psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
     393        return false;
     394    }
     395
     396    // Remove entry from metadata collection's table
     397    if (!psHashRemove(mdTable, key)) {
     398        psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
     399        return false;
    418400    }
    419401
  • trunk/psLib/src/types/psMetadataConfig.c

    r2637 r2681  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-12-06 19:59:57 $
     11*  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-10 02:50:14 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    1919#include <string.h>
    2020#include <ctype.h>
     21#include <limits.h>
    2122
    2223#include "psAbort.h"
     
    598599                if(metadataItem->type!=PS_META_LIST) {
    599600                    if(overwrite) {
    600                         psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     601                        psMetadataRemove(md, INT_MIN, strName);
    601602                    } else {
    602603                        (*nFail)++;
     
    790791    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    791792    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
    792     psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
    793     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     793    metadataItem = (psMetadataItem*)psListGet(metadataItem->data.list,PS_LIST_TAIL);
    794794    htAtts = (psHash*)metadataItem->data.list;
    795795    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    848848            if(metadataItem->type != PS_META_LIST) {
    849849                if(overwrite) {
    850                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     850                    psMetadataRemove(md, INT_MIN, strName);
    851851                } else {
    852852                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    943943    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    944944    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    945     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    946     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     945    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    947946    htAtts = (psHash*)table->data.list;
    948947    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10021001            if(metadataItem->type != PS_META_LIST) {
    10031002                if(overwrite) {
    1004                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     1003                    psMetadataRemove(md, INT_MIN, strName);
    10051004                } else {
    10061005                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    10451044    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    10461045    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    1047     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    1048     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1046    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    10491047    htAtts = (psHash*)table->data.list;
    10501048    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10701068
    10711069    // Free temporary metadata item and its hash table
    1072     psListRemove(tables->data.list, PS_LIST_TAIL, table);
     1070    psListRemove(tables->data.list, PS_LIST_TAIL);
    10731071
    10741072    psFree(psEndTagName);
  • trunk/psLib/src/xml/psXML.c

    r2637 r2681  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-12-06 19:59:57 $
     11*  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-10 02:50:14 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    1919#include <string.h>
    2020#include <ctype.h>
     21#include <limits.h>
    2122
    2223#include "psAbort.h"
     
    598599                if(metadataItem->type!=PS_META_LIST) {
    599600                    if(overwrite) {
    600                         psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     601                        psMetadataRemove(md, INT_MIN, strName);
    601602                    } else {
    602603                        (*nFail)++;
     
    790791    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    791792    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
    792     psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
    793     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     793    metadataItem = (psMetadataItem*)psListGet(metadataItem->data.list,PS_LIST_TAIL);
    794794    htAtts = (psHash*)metadataItem->data.list;
    795795    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    848848            if(metadataItem->type != PS_META_LIST) {
    849849                if(overwrite) {
    850                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     850                    psMetadataRemove(md, INT_MIN, strName);
    851851                } else {
    852852                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    943943    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    944944    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    945     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    946     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     945    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    947946    htAtts = (psHash*)table->data.list;
    948947    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10021001            if(metadataItem->type != PS_META_LIST) {
    10031002                if(overwrite) {
    1004                     psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     1003                    psMetadataRemove(md, INT_MIN, strName);
    10051004                } else {
    10061005                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineNumber,
     
    10451044    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    10461045    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
    1047     psListSetIterator(tables->data.list, PS_LIST_TAIL);
    1048     table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1046    table = (psMetadataItem*)psListGet(tables->data.list,PS_LIST_TAIL);
    10491047    htAtts = (psHash*)table->data.list;
    10501048    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
     
    10701068
    10711069    // Free temporary metadata item and its hash table
    1072     psListRemove(tables->data.list, PS_LIST_TAIL, table);
     1070    psListRemove(tables->data.list, PS_LIST_TAIL);
    10731071
    10741072    psFree(psEndTagName);
  • trunk/psLib/tags

    r2285 r2681  
    44!_TAG_PROGRAM_NAME      Exuberant Ctags //
    55!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
    6 !_TAG_PROGRAM_VERSION   5.5.2   //
     6!_TAG_PROGRAM_VERSION   5.5.4   //
    77A       test/dataManip/tst_psFunc07.c   /^#define A /;" d       file:
    88A       test/dataManip/tst_psMinimize04.c       /^#define A /;" d       file:
     
    137137FPA_MIN_X       test/astronomy/tst_psAstrometry01.c     /^#define FPA_MIN_X /;" d       file:
    138138FPA_MIN_Y       test/astronomy/tst_psAstrometry01.c     /^#define FPA_MIN_Y /;" d       file:
     139FUNC_MACRO_FULL_INTERPOLATE_1D  src/dataManip/psFunctions.c     /^#define FUNC_MACRO_FULL_INTERPOLATE_1D(/;"    d       file:
     140FUNC_MACRO_VECTOR_BIN_DISECT    src/dataManip/psFunctions.c     /^#define FUNC_MACRO_VECTOR_BIN_DISECT(/;"      d       file:
     141FUNC_MACRO_VECTOR_BIN_DISECT    src/dataManip/psFunctions.c     /^FUNC_MACRO_VECTOR_BIN_DISECT(S8)$/;"  f
    139142FitChebyF32     test/image/tst_psImageStats04.c /^psS32 FitChebyF32(int numCols, int numRows)$/;"       f
    140143FitChebyF64     test/image/tst_psImageStats04.c /^psS32 FitChebyF64(int numCols, int numRows)$/;"       f
     
    187190LINEAR  test/dataManip/tst_psFunc03.c   /^#define LINEAR /;"    d       file:
    188191LINEAR_CUT_CASE src/image/psImageExtraction.c   /^    #define LINEAR_CUT_CASE(/;"       d       file:
    189 LINESIZE        src/astronomy/psTime.c  /^                #define LINESIZE /;"  d       file:
    190192LONGITUDE       test/astronomy/tst_psAstrometry01.c     /^#define LONGITUDE /;" d       file:
    191193LOWER   test/dataManip/tst_psHist00.c   /^#define LOWER /;"     d       file:
     
    202204MAX_STRING_LENGTH       src/astronomy/psMetadata.c      /^#define MAX_STRING_LENGTH /;" d       file:
    203205MAX_STRING_LENGTH       src/astronomy/psMetadataIO.c    /^#define MAX_STRING_LENGTH /;" d       file:
     206MAX_STRING_LENGTH       src/astronomy/psTime.c  /^#define MAX_STRING_LENGTH /;" d       file:
     207MAX_STRING_LENGTH       src/fileUtils/psFits.c  /^#define MAX_STRING_LENGTH /;" d       file:
     208MAX_STRING_LENGTH       src/fileUtils/psLookupTable.c   /^#define MAX_STRING_LENGTH /;" d       file:
    204209MAX_TIME_STRING_LENGTH  src/astronomy/psTime.c  /^                #define MAX_TIME_STRING_LENGTH /;"    d       file:
    205210MEAN    test/dataManip/tst_psMinimize07.c       /^#define MEAN /;"      d       file:
     
    347352PS_ASTROMETRY_H include/psAstrometry.h  /^#define PS_ASTROMETRY_H$/;"   d
    348353PS_ASTROMETRY_H src/astronomy/psAstrometry.h    /^#define PS_ASTROMETRY_H$/;"   d
     354PS_ASTRONOMY_ERRORS_H   src/astronomy/psAstronomyErrors.h       /^#define PS_ASTRONOMY_ERRORS_H$/;"     d
    349355PS_BADPIXEL_BITMASK     include/psType.h        /^#define PS_BADPIXEL_BITMASK /;"       d
    350356PS_BADPIXEL_BITMASK     src/sysUtils/psType.h   /^#define PS_BADPIXEL_BITMASK /;"       d
     
    362368PS_COMPARE_H    src/collections/psCompare.h     /^#define PS_COMPARE_H$/;"      d
    363369PS_COMPARE_TINY_THEN_PRINT_ERROR        test/astronomy/tst_psCoord.c    /^#define PS_COMPARE_TINY_THEN_PRINT_ERROR(/;"  d       file:
     370PS_CONFIGURE_H  include/psConfigure.h   /^#define PS_CONFIGURE_H$/;"    d
     371PS_CONFIGURE_H  src/sysUtils/psConfigure.h      /^#define PS_CONFIGURE_H$/;"    d
    364372PS_COORD_H      include/psCoord.h       /^#define PS_COORD_H$/;"        d
    365373PS_COORD_H      src/astronomy/psCoord.h /^#define PS_COORD_H$/;"        d
     
    397405PS_ERRORNAME_DOMAIN     src/collections/psCollectionsErrors.h   /^#define PS_ERRORNAME_DOMAIN /;"       d
    398406PS_ERRORNAME_DOMAIN     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORNAME_DOMAIN /;"       d
     407PS_ERRORNAME_DOMAIN     src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORNAME_DOMAIN /;"       d
    399408PS_ERRORNAME_DOMAIN     src/image/psImageErrors.h       /^#define PS_ERRORNAME_DOMAIN /;"       d
    400409PS_ERRORNAME_DOMAIN     src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORNAME_DOMAIN /;"       d
     410PS_ERRORTEXT_psArray_REALLOC_NULL       src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psArray_REALLOC_NULL /;" d
    401411PS_ERRORTEXT_psAstrometry_NONLINEAR_TRANSFORM   src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psAstrometry_NONLINEAR_TRANSFORM /;"     d
    402412PS_ERRORTEXT_psBitSet_ALLOC_NEG_SIZE    src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psBitSet_ALLOC_NEG_SIZE /;"      d
     
    410420PS_ERRORTEXT_psBitSet_SECOND_OPERAND_NULL       src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psBitSet_SECOND_OPERAND_NULL /;" d
    411421PS_ERRORTEXT_psBitSet_SET_NULL  src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psBitSet_SET_NULL /;"    d
     422PS_ERRORTEXT_psConfigure_FINALIZATION_FAILED    src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psConfigure_FINALIZATION_FAILED /;"      d
     423PS_ERRORTEXT_psConfigure_INITIALIZATION_FAILED  src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psConfigure_INITIALIZATION_FAILED /;"    d
    412424PS_ERRORTEXT_psCoord_OFFSET_MODE_UNKNOWN        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psCoord_OFFSET_MODE_UNKNOWN /;"  d
    413425PS_ERRORTEXT_psCoord_PROJECTION_TYPE_UNDEFINED  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psCoord_PROJECTION_TYPE_UNDEFINED /;"    d
     
    416428PS_ERRORTEXT_psErrorCode_ERRORCODE_REGISTER_FAILED      src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psErrorCode_ERRORCODE_REGISTER_FAILED /;"        d
    417429PS_ERRORTEXT_psErrorCode_NULL_ERRORDESCRIPTION  src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psErrorCode_NULL_ERRORDESCRIPTION /;"    d
    418 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE /;" d
    419 PS_ERRORTEXT_psFunctions_NOT_ENOUGH_DATAPOINTS  src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psFunctions_NOT_ENOUGH_DATAPOINTS /;"   d
    420 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED     src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED /;"      d
     430PS_ERRORTEXT_psFits_CFITSIO_ERROR       src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_CFITSIO_ERROR /;" d
     431PS_ERRORTEXT_psFits_CREATE_HDU_FAILED   src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_CREATE_HDU_FAILED /;"     d
     432PS_ERRORTEXT_psFits_EXTNAME_INVALID     src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_EXTNAME_INVALID /;"       d
     433PS_ERRORTEXT_psFits_EXTNUM_INVALID      src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_EXTNUM_INVALID /;"        d
     434PS_ERRORTEXT_psFits_FILENAME_CREATE_FAILED      src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_FILENAME_CREATE_FAILED /;"        d
     435PS_ERRORTEXT_psFits_FILENAME_INVALID    src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_FILENAME_INVALID /;"      d
     436PS_ERRORTEXT_psFits_FILENAME_NULL       src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_FILENAME_NULL /;" d
     437PS_ERRORTEXT_psFits_GETHDUTYPE_FAILED   src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_GETHDUTYPE_FAILED /;"     d
     438PS_ERRORTEXT_psFits_GETNUMHDUS_FAILED   src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_GETNUMHDUS_FAILED /;"     d
     439PS_ERRORTEXT_psFits_GETNUMKEYS_FAILED   src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_GETNUMKEYS_FAILED /;"     d
     440PS_ERRORTEXT_psFits_GET_EXTNUM_FAILED   src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_GET_EXTNUM_FAILED /;"     d
     441PS_ERRORTEXT_psFits_IMAGE_NULL  src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_IMAGE_NULL /;"    d
     442PS_ERRORTEXT_psFits_METADATA_ADD_FAILED src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_METADATA_ADD_FAILED /;"   d
     443PS_ERRORTEXT_psFits_METATYPE_INVALID    src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_METATYPE_INVALID /;"      d
     444PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE      src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE /;"        d
     445PS_ERRORTEXT_psFits_NULL        src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_NULL /;"  d
     446PS_ERRORTEXT_psFits_TABLE_FIRSTROW_NULL src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_TABLE_FIRSTROW_NULL /;"   d
     447PS_ERRORTEXT_psFits_TYPE_UNSUPPORTED    src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_TYPE_UNSUPPORTED /;"      d
     448PS_ERRORTEXT_psFits_WRITE_FAILED        src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psFits_WRITE_FAILED /;"  d
     449PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE /;"  d
     450PS_ERRORTEXT_psFunctions_NOT_ENOUGH_DATAPOINTS  src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psFunctions_NOT_ENOUGH_DATAPOINTS /;"    d
     451PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED /;"       d
    421452PS_ERRORTEXT_psHash_DATA_NULL   src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psHash_DATA_NULL /;"     d
    422453PS_ERRORTEXT_psHash_KEY_NULL    src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psHash_KEY_NULL /;"      d
     
    494525PS_ERRORTEXT_psLogMsg_UNKNOWN_KEY       src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psLogMsg_UNKNOWN_KEY /;" d
    495526PS_ERRORTEXT_psLogMsg_UNSUPPORTED_PROTOCOL      src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psLogMsg_UNSUPPORTED_PROTOCOL /;"        d
    496 PS_ERRORTEXT_psMatrix_COUNT_DIFFERS     src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_COUNT_DIFFERS /;"      d
    497 PS_ERRORTEXT_psMatrix_DIMEN_INVALID     src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_DIMEN_INVALID /;"      d
    498 PS_ERRORTEXT_psMatrix_DIMEN_OTHER_FOUND src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_DIMEN_OTHER_FOUND /;"  d
    499 PS_ERRORTEXT_psMatrix_IMAGE_EMPTY       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_IMAGE_EMPTY /;"        d
    500 PS_ERRORTEXT_psMatrix_IMAGE_SIZE_DIFFERS        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_IMAGE_SIZE_DIFFERS /;" d
    501 PS_ERRORTEXT_psMatrix_MAX_COMPLEX_SUPPORT       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_MAX_COMPLEX_SUPPORT /;"        d
    502 PS_ERRORTEXT_psMatrix_MIN_COMPLEX_SUPPORT       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_MIN_COMPLEX_SUPPORT /;"        d
    503 PS_ERRORTEXT_psMatrix_OPERATION_UNSUPPORTED     src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_OPERATION_UNSUPPORTED /;"      d
    504 PS_ERRORTEXT_psMatrix_OUTPUT_IMAGE_NOT_CREATED  src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_OUTPUT_IMAGE_NOT_CREATED /;"   d
    505 PS_ERRORTEXT_psMatrix_OUTPUT_VECTOR_NOT_CREATED src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_OUTPUT_VECTOR_NOT_CREATED /;"  d
    506 PS_ERRORTEXT_psMatrix_TYPE_MISMATCH     src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_TYPE_MISMATCH /;"      d
    507 PS_ERRORTEXT_psMatrix_VECTOR_EMPTY      src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psMatrix_VECTOR_EMPTY /;"       d
     527PS_ERRORTEXT_psLookupTable_DIVIDE_BY_ZERO       src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_DIVIDE_BY_ZERO /;" d
     528PS_ERRORTEXT_psLookupTable_FILE_NOT_FOUND       src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_FILE_NOT_FOUND /;" d
     529PS_ERRORTEXT_psLookupTable_INTERPOLATE_HIGH     src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_INTERPOLATE_HIGH /;"       d
     530PS_ERRORTEXT_psLookupTable_INTERPOLATE_LOW      src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_INTERPOLATE_LOW /;"        d
     531PS_ERRORTEXT_psLookupTable_INVALID_TYPE src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_INVALID_TYPE /;"   d
     532PS_ERRORTEXT_psLookupTable_PARSE_GENERAL        src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_PARSE_GENERAL /;"  d
     533PS_ERRORTEXT_psLookupTable_PARSE_TYPE   src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_PARSE_TYPE /;"     d
     534PS_ERRORTEXT_psLookupTable_PARSE_VALUE  src/fileUtils/psFileUtilsErrors.h       /^#define PS_ERRORTEXT_psLookupTable_PARSE_VALUE /;"    d
     535PS_ERRORTEXT_psMatrix_COUNT_DIFFERS     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_COUNT_DIFFERS /;"       d
     536PS_ERRORTEXT_psMatrix_DIMEN_INVALID     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_DIMEN_INVALID /;"       d
     537PS_ERRORTEXT_psMatrix_DIMEN_OTHER_FOUND src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_DIMEN_OTHER_FOUND /;"   d
     538PS_ERRORTEXT_psMatrix_IMAGE_EMPTY       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_IMAGE_EMPTY /;" d
     539PS_ERRORTEXT_psMatrix_IMAGE_SIZE_DIFFERS        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_IMAGE_SIZE_DIFFERS /;"  d
     540PS_ERRORTEXT_psMatrix_MAX_COMPLEX_SUPPORT       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_MAX_COMPLEX_SUPPORT /;" d
     541PS_ERRORTEXT_psMatrix_MIN_COMPLEX_SUPPORT       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_MIN_COMPLEX_SUPPORT /;" d
     542PS_ERRORTEXT_psMatrix_OPERATION_UNSUPPORTED     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_OPERATION_UNSUPPORTED /;"       d
     543PS_ERRORTEXT_psMatrix_OUTPUT_IMAGE_NOT_CREATED  src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_OUTPUT_IMAGE_NOT_CREATED /;"    d
     544PS_ERRORTEXT_psMatrix_OUTPUT_VECTOR_NOT_CREATED src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_OUTPUT_VECTOR_NOT_CREATED /;"   d
     545PS_ERRORTEXT_psMatrix_TYPE_MISMATCH     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_TYPE_MISMATCH /;"       d
     546PS_ERRORTEXT_psMatrix_VECTOR_EMPTY      src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psMatrix_VECTOR_EMPTY /;"        d
    508547PS_ERRORTEXT_psMemory_DEREF_BLOCK_USE   src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psMemory_DEREF_BLOCK_USE /;"     d
    509548PS_ERRORTEXT_psMemory_MULTIPLE_FREE     src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psMemory_MULTIPLE_FREE /;"       d
     
    518557PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID     src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID /;"       d
    519558PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID /;"   d
     559PS_ERRORTEXT_psMetadataIO_NO_NAME       src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_NO_NAME /;" d
    520560PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM /;"  d
    521561PS_ERRORTEXT_psMetadataIO_PARSE_FAILED  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_PARSE_FAILED /;"    d
     562PS_ERRORTEXT_psMetadataIO_TAG_MISMATCH  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_TAG_MISMATCH /;"    d
     563PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN   src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN /;"     d
    522564PS_ERRORTEXT_psMetadataIO_TYPE_INVALID  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID /;"    d
     565PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE /;"  d
    523566PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED   src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED /;"     d
    524567PS_ERRORTEXT_psMetadata_ADD_FAILED      src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadata_ADD_FAILED /;"        d
     
    531574PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED /;"  d
    532575PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED     src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED /;"       d
     576PS_ERRORTEXT_psRandom_UNKNOWN_RANDFOM_NUMBER_GENERATOR_TYPE     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psRandom_UNKNOWN_RANDFOM_NUMBER_GENERATOR_TYPE /;"       d
    533577PS_ERRORTEXT_psScalar_COPY_NULL src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psScalar_COPY_NULL /;"   d
    534578PS_ERRORTEXT_psScalar_UNSUPPORTED_TYPE  src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psScalar_UNSUPPORTED_TYPE /;"    d
    535 PS_ERRORTEXT_psStats_NOT_F32_F64        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psStats_NOT_F32_F64 /;" d
    536 PS_ERRORTEXT_psStats_ROBUST_QUARTILE_BINS_FAILED        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psStats_ROBUST_QUARTILE_BINS_FAILED /;" d
    537 PS_ERRORTEXT_psStats_STATS_FAILED       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psStats_STATS_FAILED /;"        d
    538 PS_ERRORTEXT_psStats_VECTOR_TYPE_UNSUPPORTED    src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psStats_VECTOR_TYPE_UNSUPPORTED /;"     d
    539 PS_ERRORTEXT_psStats_YVAL_OUT_OF_RANGE  src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psStats_YVAL_OUT_OF_RANGE /;"   d
     579PS_ERRORTEXT_psStats_NOT_F32_F64        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_NOT_F32_F64 /;"  d
     580PS_ERRORTEXT_psStats_ROBUST_QUARTILE_BINS_FAILED        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_ROBUST_QUARTILE_BINS_FAILED /;"  d
     581PS_ERRORTEXT_psStats_ROBUST_STATS_CLIPPED_STATS src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_ROBUST_STATS_CLIPPED_STATS /;"   d
     582PS_ERRORTEXT_psStats_STATS_FAILED       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_STATS_FAILED /;" d
     583PS_ERRORTEXT_psStats_STATS_FIT_QUADRATIC_POLYNOMIAL_1D_FIT      src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_STATS_FIT_QUADRATIC_POLYNOMIAL_1D_FIT /;"        d
     584PS_ERRORTEXT_psStats_STATS_FIT_QUADRATIC_POLY_MEDIAN    src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_STATS_FIT_QUADRATIC_POLY_MEDIAN /;"      d
     585PS_ERRORTEXT_psStats_STATS_POLY_MEDIAN_OUT_OF_RANGE     src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_STATS_POLY_MEDIAN_OUT_OF_RANGE /;"       d
     586PS_ERRORTEXT_psStats_STATS_SAMPLE_MEDIAN_SORT_PROBLEM   src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_STATS_SAMPLE_MEDIAN_SORT_PROBLEM /;"     d
     587PS_ERRORTEXT_psStats_STATS_VECTOR_BIN_DISECT_PROBLEM    src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_STATS_VECTOR_BIN_DISECT_PROBLEM /;"      d
     588PS_ERRORTEXT_psStats_VECTOR_TYPE_UNSUPPORTED    src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_VECTOR_TYPE_UNSUPPORTED /;"      d
     589PS_ERRORTEXT_psStats_YVAL_OUT_OF_RANGE  src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psStats_YVAL_OUT_OF_RANGE /;"    d
    540590PS_ERRORTEXT_psString_NCHAR_NEGATIVE    src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psString_NCHAR_NEGATIVE /;"      d
    541591PS_ERRORTEXT_psTime_APPEND_MSEC_FAILED  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_APPEND_MSEC_FAILED /;"    d
     592PS_ERRORTEXT_psTime_BAD_TABLE_COUNT     src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_BAD_TABLE_COUNT /;"       d
     593PS_ERRORTEXT_psTime_BAD_VECTOR  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_BAD_VECTOR /;"    d
    542594PS_ERRORTEXT_psTime_CONVERT_TIME_TO_STRING_FAILED       src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_CONVERT_TIME_TO_STRING_FAILED /;" d
    543595PS_ERRORTEXT_psTime_FILE_NOT_FOUND      src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_FILE_NOT_FOUND /;"        d
    544596PS_ERRORTEXT_psTime_FILE_TOO_MANY_ROWS  src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_FILE_TOO_MANY_ROWS /;"    d
    545597PS_ERRORTEXT_psTime_GET_TOD_FAILED      src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_GET_TOD_FAILED /;"        d
     598PS_ERRORTEXT_psTime_INTERPOLATION_FAILED        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_INTERPOLATION_FAILED /;"  d
     599PS_ERRORTEXT_psTime_INTERPOLATION_FAILED_NAME   src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_INTERPOLATION_FAILED_NAME /;"     d
    546600PS_ERRORTEXT_psTime_ISOTIME_MALFORMED   src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_ISOTIME_MALFORMED /;"     d
     601PS_ERRORTEXT_psTime_LOOKUP_METADATA_FAILED      src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_LOOKUP_METADATA_FAILED /;"        d
    547602PS_ERRORTEXT_psTime_TABLE_DUPLICATE_ROWS        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TABLE_DUPLICATE_ROWS /;"  d
    548603PS_ERRORTEXT_psTime_TIME_POSTDATES_TABLE        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TIME_POSTDATES_TABLE /;"  d
     604PS_ERRORTEXT_psTime_TIME_POSTDATES_TABLES       src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TIME_POSTDATES_TABLES /;" d
    549605PS_ERRORTEXT_psTime_TIME_PREDATES_TABLE src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TIME_PREDATES_TABLE /;"   d
     606PS_ERRORTEXT_psTime_TIME_PREDATES_TABLES        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TIME_PREDATES_TABLES /;"  d
     607PS_ERRORTEXT_psTime_TYPE_INCORRECT      src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TYPE_INCORRECT /;"        d
    550608PS_ERRORTEXT_psTime_TYPE_MISMATCH       src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TYPE_MISMATCH /;" d
    551609PS_ERRORTEXT_psTime_TYPE_UNKNOWN        src/astronomy/psAstronomyErrors.h       /^#define PS_ERRORTEXT_psTime_TYPE_UNKNOWN /;"  d
     
    556614PS_ERRORTEXT_psTrace_NULL_SUBCOMPONENT  src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psTrace_NULL_SUBCOMPONENT /;"    d
    557615PS_ERRORTEXT_psTrace_NULL_TRACETREE     src/sysUtils/psSysUtilsErrors.h /^#define PS_ERRORTEXT_psTrace_NULL_TRACETREE /;"       d
    558 PS_ERRORTEXT_psVectorFFT_DIRECTION_NOTSET       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_DIRECTION_NOTSET /;"        d
    559 PS_ERRORTEXT_psVectorFFT_FFTW_PLAN_NULL src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_FFTW_PLAN_NULL /;"  d
    560 PS_ERRORTEXT_psVectorFFT_FORWARD_NOT_REAL       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_FORWARD_NOT_REAL /;"        d
    561 PS_ERRORTEXT_psVectorFFT_NONCOMPLEX_NOTSUPPORTED        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_NONCOMPLEX_NOTSUPPORTED /;" d
    562 PS_ERRORTEXT_psVectorFFT_NONREAL_NOTSUPPORTED   src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_NONREAL_NOTSUPPORTED /;"    d
    563 PS_ERRORTEXT_psVectorFFT_REAL_IMAG_SIZE_MISMATCH        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_REAL_IMAG_SIZE_MISMATCH /;" d
    564 PS_ERRORTEXT_psVectorFFT_REAL_IMAG_TYPE_MISMATCH        src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_REAL_IMAG_TYPE_MISMATCH /;" d
    565 PS_ERRORTEXT_psVectorFFT_REVERSE_NOT_COMPLEX    src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_REVERSE_NOT_COMPLEX /;"     d
    566 PS_ERRORTEXT_psVectorFFT_TYPE_NOT_F32_C32       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_TYPE_NOT_F32_C32 /;"        d
    567 PS_ERRORTEXT_psVectorFFT_TYPE_UNSUPPORTED       src/dataManip/psDataManipErrors.h       /^ #define PS_ERRORTEXT_psVectorFFT_TYPE_UNSUPPORTED /;"        d
     616PS_ERRORTEXT_psVectorFFT_DIRECTION_NOTSET       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_DIRECTION_NOTSET /;" d
     617PS_ERRORTEXT_psVectorFFT_FFTW_PLAN_NULL src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_FFTW_PLAN_NULL /;"   d
     618PS_ERRORTEXT_psVectorFFT_FORWARD_NOT_REAL       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_FORWARD_NOT_REAL /;" d
     619PS_ERRORTEXT_psVectorFFT_NONCOMPLEX_NOTSUPPORTED        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_NONCOMPLEX_NOTSUPPORTED /;"  d
     620PS_ERRORTEXT_psVectorFFT_NONREAL_NOTSUPPORTED   src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_NONREAL_NOTSUPPORTED /;"     d
     621PS_ERRORTEXT_psVectorFFT_REAL_IMAG_SIZE_MISMATCH        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_REAL_IMAG_SIZE_MISMATCH /;"  d
     622PS_ERRORTEXT_psVectorFFT_REAL_IMAG_TYPE_MISMATCH        src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_REAL_IMAG_TYPE_MISMATCH /;"  d
     623PS_ERRORTEXT_psVectorFFT_REVERSE_NOT_COMPLEX    src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_REVERSE_NOT_COMPLEX /;"      d
     624PS_ERRORTEXT_psVectorFFT_TYPE_NOT_F32_C32       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_TYPE_NOT_F32_C32 /;" d
     625PS_ERRORTEXT_psVectorFFT_TYPE_UNSUPPORTED       src/dataManip/psDataManipErrors.h       /^#define PS_ERRORTEXT_psVectorFFT_TYPE_UNSUPPORTED /;" d
    568626PS_ERRORTEXT_psVector_NOT_A_VECTOR      src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psVector_NOT_A_VECTOR /;"        d
    569627PS_ERRORTEXT_psVector_REALLOC_NULL      src/collections/psCollectionsErrors.h   /^#define PS_ERRORTEXT_psVector_REALLOC_NULL /;"        d
     
    610668PS_FFT_REVERSE  src/dataManip/psVectorFFT.h     /^    PS_FFT_REVERSE = 2,$/;"   e
    611669PS_FILE src/dataManip/psMinimize.c      /^#define PS_FILE /;"   d       file:
     670PS_FILEUTIL_ERRORS_H    src/fileUtils/psFileUtilsErrors.h       /^#define PS_FILEUTIL_ERRORS_H$/;"      d
     671PS_FITS_H       src/fileUtils/psFits.h  /^#define PS_FITS_H$/;" d
     672PS_FITS_TYPE_ANY        src/fileUtils/psFits.h  /^    PS_FITS_TYPE_ANY = ANY_HDU$/;"    e
     673PS_FITS_TYPE_ASCII_TABLE        src/fileUtils/psFits.h  /^    PS_FITS_TYPE_ASCII_TABLE = ASCII_TBL,$/;" e
     674PS_FITS_TYPE_BINARY_TABLE       src/fileUtils/psFits.h  /^    PS_FITS_TYPE_BINARY_TABLE = BINARY_TBL,$/;"       e
     675PS_FITS_TYPE_IMAGE      src/fileUtils/psFits.h  /^    PS_FITS_TYPE_IMAGE = IMAGE_HDU,$/;"       e
     676PS_FITS_TYPE_NONE       src/fileUtils/psFits.h  /^    PS_FITS_TYPE_NONE = -1,$/;"       e
    612677PS_FLOAT_CHECK_NON_EQUAL        include/psConstants.h   /^#define PS_FLOAT_CHECK_NON_EQUAL(/;"  d
    613678PS_FLOAT_CHECK_NON_EQUAL        src/dataManip/psConstants.h     /^#define PS_FLOAT_CHECK_NON_EQUAL(/;"  d
     
    615680PS_FLOAT_COMPARE        src/dataManip/psConstants.h     /^#define PS_FLOAT_COMPARE(/;"  d
    616681PS_FUNCTIONS_H  include/psFunctions.h   /^#define PS_FUNCTIONS_H$/;"    d
     682PS_FUNCTIONS_H  include/psRandom.h      /^#define PS_FUNCTIONS_H$/;"    d
    617683PS_FUNCTIONS_H  src/dataManip/psFunctions.h     /^#define PS_FUNCTIONS_H$/;"    d
     684PS_FUNCTIONS_H  src/dataManip/psRandom.h        /^#define PS_FUNCTIONS_H$/;"    d
     685PS_FUNC_MACRO_NORMALIZE_VECTOR_RANGE    src/dataManip/psStats.c /^#define PS_FUNC_MACRO_NORMALIZE_VECTOR_RANGE(/;"      d       file:
     686PS_FUNC_MACRO_NORMALIZE_VECTOR_RANGE    src/dataManip/psStats.c /^PS_FUNC_MACRO_NORMALIZE_VECTOR_RANGE(U8)$/;"  f
    618687PS_GAUSS_WIDTH  src/dataManip/psStats.c /^#define PS_GAUSS_WIDTH /;"    d       file:
    619688PS_GET_BADPIXEL include/psType.h        /^#define PS_GET_BADPIXEL(/;"   d
     
    632701PS_IMAGE_CHECK_NULL_GENERAL     include/psConstants.h   /^#define PS_IMAGE_CHECK_NULL_GENERAL(/;"       d
    633702PS_IMAGE_CHECK_NULL_GENERAL     src/dataManip/psConstants.h     /^#define PS_IMAGE_CHECK_NULL_GENERAL(/;"       d
     703PS_IMAGE_CHECK_SIZE     include/psConstants.h   /^#define PS_IMAGE_CHECK_SIZE(/;"       d
     704PS_IMAGE_CHECK_SIZE     src/dataManip/psConstants.h     /^#define PS_IMAGE_CHECK_SIZE(/;"       d
     705PS_IMAGE_CHECK_SIZE_EQUAL       include/psConstants.h   /^#define PS_IMAGE_CHECK_SIZE_EQUAL(/;" d
     706PS_IMAGE_CHECK_SIZE_EQUAL       src/dataManip/psConstants.h     /^#define PS_IMAGE_CHECK_SIZE_EQUAL(/;" d
    634707PS_IMAGE_CHECK_TYPE     include/psConstants.h   /^#define PS_IMAGE_CHECK_TYPE(/;"       d
    635708PS_IMAGE_CHECK_TYPE     src/dataManip/psConstants.h     /^#define PS_IMAGE_CHECK_TYPE(/;"       d
     
    656729PS_INTERPOLATE_SINC     include/psImage.h       /^    PS_INTERPOLATE_SINC,               \/\/\/< sinc interpolation$/;" e
    657730PS_INTERPOLATE_SINC     src/image/psImage.h     /^    PS_INTERPOLATE_SINC,               \/\/\/< sinc interpolation$/;" e
     731PS_INT_CHECK_EQUALS     include/psConstants.h   /^#define PS_INT_CHECK_EQUALS(/;"       d
     732PS_INT_CHECK_EQUALS     src/dataManip/psConstants.h     /^#define PS_INT_CHECK_EQUALS(/;"       d
    658733PS_INT_CHECK_NON_NEGATIVE       include/psConstants.h   /^#define PS_INT_CHECK_NON_NEGATIVE(/;" d
    659734PS_INT_CHECK_NON_NEGATIVE       src/dataManip/psConstants.h     /^#define PS_INT_CHECK_NON_NEGATIVE(/;" d
     
    662737PS_INT_CHECK_RANGE      include/psConstants.h   /^#define PS_INT_CHECK_RANGE(/;"        d
    663738PS_INT_CHECK_RANGE      src/dataManip/psConstants.h     /^#define PS_INT_CHECK_RANGE(/;"        d
     739PS_INT_CHECK_ZERO       include/psConstants.h   /^#define PS_INT_CHECK_ZERO(/;" d
     740PS_INT_CHECK_ZERO       src/dataManip/psConstants.h     /^#define PS_INT_CHECK_ZERO(/;" d
    664741PS_INT_COMPARE  include/psConstants.h   /^#define PS_INT_COMPARE(/;"    d
    665742PS_INT_COMPARE  src/dataManip/psConstants.h     /^#define PS_INT_COMPARE(/;"    d
     
    711788PS_LOG_WARN     include/psLogMsg.h      /^    PS_LOG_WARN,                       \/\/\/< log message is a warning$/;"   e
    712789PS_LOG_WARN     src/sysUtils/psLogMsg.h /^    PS_LOG_WARN,                       \/\/\/< log message is a warning$/;"   e
     790PS_LOOKUPTABLE_H        include/psLookupTable.h /^#define PS_LOOKUPTABLE_H$/;"  d
    713791PS_LOOKUPTABLE_H        src/fileUtils/psLookupTable.h   /^#define PS_LOOKUPTABLE_H$/;"  d
    714 PS_LOOKUP_BOTTOM        src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_BOTTOM  = 0x0002,        \/\/\/< Lookup off bottom of table.$/;"        e
    715 PS_LOOKUP_ERROR src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_ERROR   = 0x0003,        \/\/\/< Any other type of lookup error.$/;"    e
    716 PS_LOOKUP_SUCCESS       src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_SUCCESS = 0x000,         \/\/\/< Table lookup succeeded.$/;"    e
    717 PS_LOOKUP_TOP   src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_TOP     = 0x0001,        \/\/\/< Lookup off top of table.$/;"   e
     792PS_LOOKUP_ERROR include/psLookupTable.h /^    PS_LOOKUP_ERROR               = 0x0104         \/\/\/< Any other type of lookup error$/;" e
     793PS_LOOKUP_ERROR src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_ERROR               = 0x0104         \/\/\/< Any other type of lookup error$/;" e
     794PS_LOOKUP_PAST_BOTTOM   include/psLookupTable.h /^    PS_LOOKUP_PAST_BOTTOM         = 0x0102,        \/\/\/< Lookup off bottom of table$/;"     e
     795PS_LOOKUP_PAST_BOTTOM   src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_PAST_BOTTOM         = 0x0102,        \/\/\/< Lookup off bottom of table$/;"     e
     796PS_LOOKUP_PAST_TOP      include/psLookupTable.h /^    PS_LOOKUP_PAST_TOP            = 0x0101,        \/\/\/< Lookup off top of table$/;"        e
     797PS_LOOKUP_PAST_TOP      src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_PAST_TOP            = 0x0101,        \/\/\/< Lookup off top of table$/;"        e
     798PS_LOOKUP_SUCCESS       include/psLookupTable.h /^    PS_LOOKUP_SUCCESS             = 0x0000,        \/\/\/< Table lookup succeeded$/;" e
     799PS_LOOKUP_SUCCESS       src/fileUtils/psLookupTable.h   /^    PS_LOOKUP_SUCCESS             = 0x0000,        \/\/\/< Table lookup succeeded$/;" e
    718800PS_MAX  include/psConstants.h   /^#define PS_MAX(/;"    d
    719801PS_MAX  src/dataManip/psConstants.h     /^#define PS_MAX(/;"    d
     
    726808PS_MAX_F64      include/psType.h        /^#define PS_MAX_F64 /;"        d
    727809PS_MAX_F64      src/sysUtils/psType.h   /^#define PS_MAX_F64 /;"        d
    728 PS_MAX_FLOAT    src/dataManip/psStats.c /^#define PS_MAX_FLOAT /;"      d       file:
    729810PS_MAX_LMM_ITERATIONS   include/psConstants.h   /^#define PS_MAX_LMM_ITERATIONS /;"     d
    730811PS_MAX_LMM_ITERATIONS   src/dataManip/psConstants.h     /^#define PS_MAX_LMM_ITERATIONS /;"     d
     
    761842PS_META_F64     include/psMetadata.h    /^    PS_META_F64,                       \/\/\/< Double-precision float data.$/;"       e
    762843PS_META_F64     src/astronomy/psMetadata.h      /^    PS_META_F64,                       \/\/\/< Double-precision float data.$/;"       e
     844PS_META_HASH    include/psMetadata.h    /^    PS_META_HASH,                      \/\/\/< Hash data (Stored in as psPtr ).$/;"   e
     845PS_META_HASH    src/astronomy/psMetadata.h      /^    PS_META_HASH,                      \/\/\/< Hash data (Stored in as psPtr ).$/;"   e
    763846PS_META_IMG     include/psMetadata.h    /^    PS_META_IMG,                       \/\/\/< Image data (Stored in as psPtr ).$/;"  e
    764847PS_META_IMG     src/astronomy/psMetadata.h      /^    PS_META_IMG,                       \/\/\/< Image data (Stored in as psPtr ).$/;"  e
     
    767850PS_META_JPEG    include/psMetadata.h    /^    PS_META_JPEG,                      \/\/\/< JPEG data (Stored in as psPtr ).$/;"   e
    768851PS_META_JPEG    src/astronomy/psMetadata.h      /^    PS_META_JPEG,                      \/\/\/< JPEG data (Stored in as psPtr ).$/;"   e
     852PS_META_LOOKUPTABLE     include/psMetadata.h    /^    PS_META_LOOKUPTABLE,               \/\/\/< Lookup table data (Stored as void *).$/;"      e
     853PS_META_LOOKUPTABLE     src/astronomy/psMetadata.h      /^    PS_META_LOOKUPTABLE,               \/\/\/< Lookup table data (Stored as void *).$/;"      e
    769854PS_META_NTYPE   include/psMetadata.h    /^    PS_META_NTYPE                      \/\/\/< Number of types. Must be last.$/;"     e
    770855PS_META_NTYPE   src/astronomy/psMetadata.h      /^    PS_META_NTYPE                      \/\/\/< Number of types. Must be last.$/;"     e
     
    811896PS_ONE  include/psConstants.h   /^#define PS_ONE /;"    d
    812897PS_ONE  src/dataManip/psConstants.h     /^#define PS_ONE /;"    d
     898PS_PARSE_ERROR_GENERAL  include/psLookupTable.h /^    PS_PARSE_ERROR_GENERAL        = 0x0104         \/\/\/< Any other type of lookup error$/;" e
     899PS_PARSE_ERROR_GENERAL  src/fileUtils/psLookupTable.h   /^    PS_PARSE_ERROR_GENERAL        = 0x0104         \/\/\/< Any other type of lookup error$/;" e
     900PS_PARSE_ERROR_TYPE     include/psLookupTable.h /^    PS_PARSE_ERROR_TYPE           = 0x0101,        \/\/\/< Error parsing type$/;"     e
     901PS_PARSE_ERROR_TYPE     src/fileUtils/psLookupTable.h   /^    PS_PARSE_ERROR_TYPE           = 0x0101,        \/\/\/< Error parsing type$/;"     e
     902PS_PARSE_ERROR_VALUE    include/psLookupTable.h /^    PS_PARSE_ERROR_VALUE          = 0x0102,        \/\/\/< Error parsing numerical value$/;"  e
     903PS_PARSE_ERROR_VALUE    src/fileUtils/psLookupTable.h   /^    PS_PARSE_ERROR_VALUE          = 0x0102,        \/\/\/< Error parsing numerical value$/;"  e
     904PS_PARSE_SUCCESS        include/psLookupTable.h /^    PS_PARSE_SUCCESS              = 0x0000,        \/\/\/< Table lookup succeeded$/;" e
     905PS_PARSE_SUCCESS        src/fileUtils/psLookupTable.h   /^    PS_PARSE_SUCCESS              = 0x0000,        \/\/\/< Table lookup succeeded$/;" e
    813906PS_PHOTOMETRIC_H        include/psPhotometry.h  /^#define PS_PHOTOMETRIC_H$/;"  d
    814907PS_PHOTOMETRIC_H        src/astronomy/psPhotometry.h    /^#define PS_PHOTOMETRIC_H$/;"  d
     
    817910PS_POLYNOMIAL_ORD       include/psFunctions.h   /^    PS_POLYNOMIAL_ORD,                 \/\/\/< Ordinary Polynomial$/;"        e
    818911PS_POLYNOMIAL_ORD       src/dataManip/psFunctions.h     /^    PS_POLYNOMIAL_ORD,                 \/\/\/< Ordinary Polynomial$/;"        e
     912PS_POLY_1D_DECLARE_ALLOC_STATIC include/psConstants.h   /^#define PS_POLY_1D_DECLARE_ALLOC_STATIC(/;"   d
     913PS_POLY_1D_DECLARE_ALLOC_STATIC src/dataManip/psConstants.h     /^#define PS_POLY_1D_DECLARE_ALLOC_STATIC(/;"   d
     914PS_POLY_1D_D_DECLARE_ALLOC_STATIC       include/psConstants.h   /^#define PS_POLY_1D_D_DECLARE_ALLOC_STATIC(/;" d
     915PS_POLY_1D_D_DECLARE_ALLOC_STATIC       src/dataManip/psConstants.h     /^#define PS_POLY_1D_D_DECLARE_ALLOC_STATIC(/;" d
     916PS_POLY_2D_DECLARE_ALLOC_STATIC include/psConstants.h   /^#define PS_POLY_2D_DECLARE_ALLOC_STATIC(/;"   d
     917PS_POLY_2D_DECLARE_ALLOC_STATIC src/dataManip/psConstants.h     /^#define PS_POLY_2D_DECLARE_ALLOC_STATIC(/;"   d
     918PS_POLY_2D_D_DECLARE_ALLOC_STATIC       include/psConstants.h   /^#define PS_POLY_2D_D_DECLARE_ALLOC_STATIC(/;" d
     919PS_POLY_2D_D_DECLARE_ALLOC_STATIC       src/dataManip/psConstants.h     /^#define PS_POLY_2D_D_DECLARE_ALLOC_STATIC(/;" d
     920PS_POLY_3D_DECLARE_ALLOC_STATIC include/psConstants.h   /^#define PS_POLY_3D_DECLARE_ALLOC_STATIC(/;"   d
     921PS_POLY_3D_DECLARE_ALLOC_STATIC src/dataManip/psConstants.h     /^#define PS_POLY_3D_DECLARE_ALLOC_STATIC(/;"   d
     922PS_POLY_3D_D_DECLARE_ALLOC_STATIC       include/psConstants.h   /^#define PS_POLY_3D_D_DECLARE_ALLOC_STATIC(/;" d
     923PS_POLY_3D_D_DECLARE_ALLOC_STATIC       src/dataManip/psConstants.h     /^#define PS_POLY_3D_D_DECLARE_ALLOC_STATIC(/;" d
     924PS_POLY_4D_DECLARE_ALLOC_STATIC include/psConstants.h   /^#define PS_POLY_4D_DECLARE_ALLOC_STATIC(/;"   d
     925PS_POLY_4D_DECLARE_ALLOC_STATIC src/dataManip/psConstants.h     /^#define PS_POLY_4D_DECLARE_ALLOC_STATIC(/;"   d
     926PS_POLY_4D_D_DECLARE_ALLOC_STATIC       include/psConstants.h   /^#define PS_POLY_4D_D_DECLARE_ALLOC_STATIC(/;" d
     927PS_POLY_4D_D_DECLARE_ALLOC_STATIC       src/dataManip/psConstants.h     /^#define PS_POLY_4D_D_DECLARE_ALLOC_STATIC(/;" d
    819928PS_POLY_CHECK_NULL      include/psConstants.h   /^#define PS_POLY_CHECK_NULL(/;"        d
    820929PS_POLY_CHECK_NULL      src/dataManip/psConstants.h     /^#define PS_POLY_CHECK_NULL(/;"        d
     
    857966PS_RADIAN       include/psCoord.h       /^    PS_RADIAN                   \/\/\/< Radians$/;"   e
    858967PS_RADIAN       src/astronomy/psCoord.h /^    PS_RADIAN                   \/\/\/< Radians$/;"   e
     968PS_RANDOM_TAUS  include/psRandom.h      /^    PS_RANDOM_TAUS    \/\/\/< A maximally equidistributed combined Tausworthe generator.$/;"  e
     969PS_RANDOM_TAUS  src/dataManip/psRandom.h        /^    PS_RANDOM_TAUS    \/\/\/< A maximally equidistributed combined Tausworthe generator.$/;"  e
    859970PS_READOUT_CHECK_EMPTY  include/psConstants.h   /^#define PS_READOUT_CHECK_EMPTY(/;"    d
    860971PS_READOUT_CHECK_EMPTY  src/dataManip/psConstants.h     /^#define PS_READOUT_CHECK_EMPTY(/;"    d
     
    9101021PS_STRING_H     include/psString.h      /^#define PS_STRING_H$/;"       d
    9111022PS_STRING_H     src/sysUtils/psString.h /^#define PS_STRING_H$/;"       d
    912 PS_SYSUTILS_ERRORS_H    src/astronomy/psAstronomyErrors.h       /^#define PS_SYSUTILS_ERRORS_H$/;"      d
    9131023PS_SYSUTILS_ERRORS_H    src/sysUtils/psSysUtilsErrors.h /^#define PS_SYSUTILS_ERRORS_H$/;"      d
     1024PS_THE_OTHER_DEFAULT_TRACE_LEVEL        include/psTrace.h       /^#define PS_THE_OTHER_DEFAULT_TRACE_LEVEL /;"  d
     1025PS_THE_OTHER_DEFAULT_TRACE_LEVEL        src/sysUtils/psTrace.h  /^#define PS_THE_OTHER_DEFAULT_TRACE_LEVEL /;"  d
    9141026PS_TIME_TAI     include/psTime.h        /^    PS_TIME_TAI,        \/\/\/< Temps Atomique International (TAI) time (time with leapseconds).$/;"  e
    9151027PS_TIME_TAI     src/astronomy/psTime.h  /^    PS_TIME_TAI,        \/\/\/< Temps Atomique International (TAI) time (time with leapseconds).$/;"  e
     
    10441156READOUT_NUM_COLS        test/astronomy/tst_psAstrometry01.c     /^#define READOUT_NUM_COLS /;"  d       file:
    10451157READOUT_NUM_ROWS        test/astronomy/tst_psAstrometry01.c     /^#define READOUT_NUM_ROWS /;"  d       file:
     1158RELATIVE_KERNEL_GENERATE_CASE   src/image/psImageConvolve.c     /^    #define RELATIVE_KERNEL_GENERATE_CASE(/;" d       file:
    10461159RETURN_FINAL_BRACKET    src/dataManip/psMinimize.c      /^#define RETURN_FINAL_BRACKET(/;"      d       file:
    10471160ROT_ANGLE       test/astronomy/tst_psAstrometry01.c     /^#define ROT_ANGLE /;" d       file:
     
    10821195SEC_PER_MINUTE  src/astronomy/psTime.c  /^                #define  SEC_PER_MINUTE /;"   d       file:
    10831196SEC_PER_YEAR    src/astronomy/psTime.c  /^                #define  SEC_PER_YEAR /;"     d       file:
    1084 SER7_FILE       src/astronomy/psTime.c  /^#define SER7_FILE /;" d       file:
    10851197SLALIB_H        include/slalib.h        /^#define SLALIB_H$/;"  d
    10861198SLALIB_H        src/astronomy/slalib.h  /^#define SLALIB_H$/;"  d
     
    10911203STDEV   test/dataManip/tst_psMinimize07.c       /^#define STDEV /;"     d       file:
    10921204STDEV   test/dataManip/tst_psStats07.c  /^#define STDEV /;"     d       file:
    1093 TAIUTC_FILE     src/astronomy/psTime.c  /^#define TAIUTC_FILE /;"       d       file:
    10941205TEMPERATURE     test/astronomy/tst_psAstrometry01.c     /^#define TEMPERATURE /;"       d       file:
    10951206THRESHOLD       test/image/tst_psImageStats02.c /^#define THRESHOLD /;" d       file:
     1207TIME_CONFIG_FILE        src/astronomy/psTime.c  /^#define TIME_CONFIG_FILE /;"  d       file:
    10961208TPCheckBufferPositive   test/sysUtils/tst_psMemory.c    /^psS32 TPCheckBufferPositive( void )$/;"       f
    10971209TPCheckBufferPositive   test/sysUtils/tst_psMemory.c    /^static psS32 TPCheckBufferPositive( void );$/;"       p       file:
     
    11571269VECTOR_SCALAR   src/dataManip/psMatrixVectorArithmetic.c        /^#define VECTOR_SCALAR(/;"     d       file:
    11581270VECTOR_VECTOR   src/dataManip/psMatrixVectorArithmetic.c        /^#define VECTOR_VECTOR(/;"     d       file:
    1159 VeccalcScaleFactors     src/image/psImageStats.c        /^psVector *VeccalcScaleFactors(psVector *scalingFactors, psS32 n)$/;"  f
    11601271VectorFitPolynomial1DCheby      src/dataManip/psMinimize.c      /^psPolynomial1D *VectorFitPolynomial1DCheby(psPolynomial1D* myPoly,$/;"        f
    11611272VectorFitPolynomial1DOrd        src/dataManip/psMinimize.c      /^psPolynomial1D* VectorFitPolynomial1DOrd(psPolynomial1D* myPoly,$/;"  f
     
    11681279X_NUM_ROWS      test/astronomy/tst_psAstrometry01.c     /^#define X_NUM_ROWS /;"        d       file:
    11691280X_SCALE test/astronomy/tst_psAstrometry01.c     /^#define X_SCALE /;"   d       file:
    1170 Xo      include/psCoord.h       /^    double Xo;                  \/\/\/< First PT of Ares lon$/;"      m
    1171 Xo      src/astronomy/psCoord.h /^    double Xo;                  \/\/\/< First PT of Ares lon$/;"      m
    11721281Xs      include/psCoord.h       /^    double Xs;                  \/\/\/< plate-scale in X direction$/;"        m
    11731282Xs      src/astronomy/psCoord.h /^    double Xs;                  \/\/\/< plate-scale in X direction$/;"        m
     
    11811290Ys      src/astronomy/psCoord.h /^    double Ys;                  \/\/\/< plate-scale in Y direction$/;"        m
    11821291ZD      test/astronomy/tst_psAstrometry01.c     /^#define ZD /;"        d       file:
     1292__STRICT_ANSI__ src/fileUtils/psLookupTable.c   /^#define __STRICT_ANSI__$/;"   d       file:
     1293__STRICT_ANSI__ src/fileUtils/psLookupTable.c   /^#undef __STRICT_ANSI__$/;"    d       file:
    11831294abberationMag   include/psAstrometry.h  /^    const double abberationMag;        \/\/\/< magnitude of diurnal aberration vector$/;"     m
    11841295abberationMag   src/astronomy/psAstrometry.h    /^    const double abberationMag;        \/\/\/< magnitude of diurnal aberration vector$/;"     m
     
    11861297airmass src/astronomy/psAstrometry.h    /^    const float airmass;               \/\/\/< Airmass, calculated from zenith distance$/;"   m       struct:psExposure
    11871298allocCallbackCalled     test/sysUtils/tst_psMemory.c    /^static psS32 allocCallbackCalled = 0;$/;"     v       file:
     1299alphaP  include/psCoord.h       /^    double alphaP;                    \/\/\/< Longitude of the target system pole in the source system$/;"    m
     1300alphaP  src/astronomy/psCoord.h /^    double alphaP;                    \/\/\/< Longitude of the target system pole in the source system$/;"    m
    11881301arrayFree       src/collections/psArray.c       /^static void arrayFree(psArray* restrict psArr)$/;"    f       file:
    11891302arrayFree       src/collections/psArray.c       /^static void arrayFree(psArray* restrict psArr);$/;"   p       file:
     
    12301343chips   src/astronomy/psAstrometry.h    /^    psArray* chips;                    \/\/\/< chips in the focal plane array$/;"     m       struct:psFPA
    12311344cleanString     src/astronomy/psMetadataIO.c    /^char *cleanString(char *inString, psS32 sLen)$/;"     f
     1345cleanString     src/astronomy/psTime.c  /^static char *cleanString(char *inString, int sLen)$/;"        f       file:
     1346cleanString     src/astronomy/psTime.c  /^static char *cleanString(char *inString, int sLen);$/;"       p       file:
     1347cleanString     src/fileUtils/psLookupTable.c   /^static char *cleanString(char *inString, int sLen)$/;"        f       file:
     1348cleanString     src/fileUtils/psLookupTable.c   /^static char *cleanString(char *inString, int sLen);$/;"       p       file:
    12321349clipIter        include/psStats.h       /^    psS32 clipIter;               \/\/\/< Number of clipping iterations; user input$/;"       m
    12331350clipIter        src/dataManip/psStats.h /^    psS32 clipIter;               \/\/\/< Number of clipping iterations; user input$/;"       m
     
    12971414componentFree   src/sysUtils/psTrace.c  /^static void componentFree(p_psComponent* comp)$/;"    f       file:
    12981415componentFree   src/sysUtils/psTrace.c  /^static void componentFree(p_psComponent* comp);$/;"   p       file:
     1416convertPsMetadataTypeToBinaryTForm      src/fileUtils/psFits.c  /^static bool convertPsMetadataTypeToBinaryTForm(psMetadataType type, char** fitsType)$/;"      f       file:
     1417convertPsTypeToFits     src/fileUtils/psFits.c  /^static bool convertPsTypeToFits(psElemType type, int* bitPix, double* bZero, int* dataType)$/;"       f       file:
     1418cosDeltaP       include/psCoord.h       /^    double cosDeltaP;                 \/\/\/< Cosine of target pole latitude in the source system$/;" m
     1419cosDeltaP       src/astronomy/psCoord.h /^    double cosDeltaP;                 \/\/\/< Cosine of target pole latitude in the source system$/;" m
    12991420cosLat  include/psAstrometry.h  /^    const double cosLat;               \/\/\/< cosine of geodetic latitude$/;"        m
    13001421cosLat  src/astronomy/psAstrometry.h    /^    const double cosLat;               \/\/\/< cosine of geodetic latitude$/;"        m
    1301 cosPhi  include/psCoord.h       /^    double cosPhi;              \/\/\/< cos of North Pole lattitude$/;"       m
    1302 cosPhi  src/astronomy/psCoord.h /^    double cosPhi;              \/\/\/< cos of North Pole lattitude$/;"       m
    13031422createChebyshevPolys    src/dataManip/psFunctions.c     /^static psPolynomial1D **createChebyshevPolys(psS32 maxChebyPoly)$/;"  f       file:
    13041423currentId       test/collections/tst_psHash03.c /^psS32 currentId = 0;$/;"      v
     1424cursor  include/psList.h        /^psListElem* cursor;                \/\/\/< current cursor position$/;"        m
     1425cursor  src/collections/psList.h        /^psListElem* cursor;                \/\/\/< current cursor position$/;"        m
    13051426d       include/psCoord.h       /^    double d;                   \/\/\/< Dec$/;"       m       struct:psSphere
    13061427d       src/astronomy/psCoord.h /^    double d;                   \/\/\/< Dec$/;"       m       struct:psSphere
     
    13811502file    include/psMemory.h      /^    const char *file;                  \/\/\/< set from __FILE__ in e.g. p_psAlloc$/;"        m       struct:psMemBlock
    13821503file    src/sysUtils/psMemory.h /^    const char *file;                  \/\/\/< set from __FILE__ in e.g. p_psAlloc$/;"        m       struct:psMemBlock
     1504fileName        include/psLookupTable.h /^    const char *fileName;              \/\/\/< Name of file with table$/;"    m
     1505fileName        src/fileUtils/psLookupTable.h   /^    const char *fileName;              \/\/\/< Name of file with table$/;"    m
     1506filename        src/fileUtils/psFits.h  /^    const char* filename;              \/\/\/< the filename of the fits file$/;"      m
    13831507filter  include/psPhotometry.h  /^    const char *filter;         \/\/\/< Filter used for photometric system$/;"        m
    13841508filter  src/astronomy/psPhotometry.h    /^    const char *filter;         \/\/\/< Filter used for photometric system$/;"        m
     
    13861510filterStdFiles  testbin/FullUnitTest    /^sub filterStdFiles {$/;"      s
    13871511fitQuadraticSearchForYThenReturnX       src/dataManip/psStats.c /^float fitQuadraticSearchForYThenReturnX(psVector *xVec,$/;"   f
     1512fitsFree        src/fileUtils/psFits.c  /^static void fitsFree(psFits* fits)$/;"        f       file:
    13881513fixedPatternFree        src/astronomy/psAstrometry.c    /^static void fixedPatternFree(psFixedPattern* fp)$/;"  f       file:
    13891514free    include/psMemory.h      /^#define free(/;"      d
     
    14171542fslaOapqk       src/astronomy/slalib.h  /^#define fslaOapqk /;" d
    14181543fslaOapqk       src/astronomy/slalib.h  /^extern void fslaOapqk($/;"    p
    1419 fullInterpolate1DF32    src/dataManip/psFunctions.c     /^static float fullInterpolate1DF32(float *domain,$/;"  f       file:
    14201544genGaussianVector       test/dataManip/tst_psMinimize07.c       /^psVector *genGaussianVector(int n, float mean, float stdev)$/;"       f
    14211545genSystem       test/astronomy/tst_psAstrometry01.c     /^psFPA *genSystem()$/;"        f
     
    14231547getErrorDescription     src/sysUtils/psErrorCodes.c     /^static const psErrorDescription* getErrorDescription(psErrorCode code);$/;"   p       file:
    14241548getToken        src/astronomy/psMetadataIO.c    /^char* getToken(char **inString, char *delimiter, psS32 *status)$/;"   f
     1549getToken        src/astronomy/psTime.c  /^static char* getToken(char **inString, char *delimiter, psParseErrorType *status)$/;" f       file:
     1550getToken        src/astronomy/psTime.c  /^static char* getToken(char **inString, char *delimiter, psParseErrorType *status);$/;"        p       file:
     1551getToken        src/fileUtils/psLookupTable.c   /^static char* getToken(char **inString, char *delimiter, psParseErrorType *status)$/;" f       file:
     1552getToken        src/fileUtils/psLookupTable.c   /^static char* getToken(char **inString, char *delimiter, psParseErrorType *status);$/;"        p       file:
    14251553globalLogLevel  src/sysUtils/psLogMsg.c /^static psS32 globalLogLevel = PS_LOG_INFO;        \/\/ log all messages at this or above$/;"  v       file:
    14261554grommit include/psAstrometry.h  /^    psGrommit *grommit;                \/\/\/< Wallace's grommit$/;"  m       struct:psFPA
    14271555grommit src/astronomy/psAstrometry.h    /^    psGrommit *grommit;                \/\/\/< Wallace's grommit$/;"  m       struct:psFPA
     1556gsl     include/psRandom.h      /^    gsl_rng *gsl; \/\/\/< The RNG itself$/;"  m
     1557gsl     src/dataManip/psRandom.h        /^    gsl_rng *gsl; \/\/\/< The RNG itself$/;"  m
    14281558hashBucketAlloc src/collections/psHash.c        /^static psHashBucket* hashBucketAlloc(const char *key, psPtr data, psHashBucket* next);$/;"    p       file:
    14291559hashBucketAlloc src/collections/psHash.c        /^static psHashBucket* hashBucketAlloc(const char *key,$/;"     f       file:
     
    14511581id      src/sysUtils/psMemory.h /^    const psMemoryId id;               \/\/\/< a unique ID for this allocation$/;"    m       struct:psMemBlock
    14521582ignoreLine      src/astronomy/psMetadataIO.c    /^psBool ignoreLine(char *inString)$/;" f
     1583ignoreLine      src/fileUtils/psLookupTable.c   /^static bool ignoreLine(char *inString)$/;"    f       file:
     1584ignoreLine      src/fileUtils/psLookupTable.c   /^static bool ignoreLine(char *inString);$/;"   p       file:
    14531585imGlobal        test/collections/tst_psHash01.c /^psS32 imGlobal = 0;$/;"       v
    14541586imGlobal        test/collections/tst_psHash02.c /^psS32 imGlobal = 0;$/;"       v
     
    14601592image   src/image/psImageConvolve.h     /^    psImage* image;                    \/\/\/< Kernel data, in the form of an image$/;"       m
    14611593imageFree       src/image/psImage.c     /^static void imageFree(psImage* image)$/;"     f       file:
    1462 imageFree       src/image/psImage.c     /^static void imageFree(psImage* image);$/;"    p       file:
    14631594imageSubset     src/image/psImageExtraction.c   /^psImage* imageSubset(psImage* out,$/;"        f
     1595index   include/psLookupTable.h /^    psVector *index;                   \/\/\/< Vector of independent index values$/;" m
    14641596index   src/fileUtils/psLookupTable.h   /^    psVector *index;                   \/\/\/< Vector of independent index values$/;" m
    14651597initTrace       src/sysUtils/psTrace.c  /^static void initTrace(void)$/;"       f       file:
     
    14681600isDuplicateEntry        include/psTest.h        /^    psBool      isDuplicateEntry;$/;" m
    14691601isDuplicateEntry        test/psTest.h   /^    psBool      isDuplicateEntry;$/;" m
     1602isHDUEmpty      src/fileUtils/psFits.c  /^static bool isHDUEmpty(psFits* fits)$/;"      f       file:
    14701603isProjectionLinear      src/astronomy/psAstrometry.c    /^static psS32 isProjectionLinear(psPlaneTransform *transform)$/;"      f       file:
    14711604items   include/psMetadata.h    /^    psList* restrict items;            \/\/\/< List of psMetadataItems with same name.$/;"    m       struct:psMetadataItem
    14721605items   src/astronomy/psMetadata.h      /^    psList* restrict items;            \/\/\/< List of psMetadataItems with same name.$/;"    m       struct:psMetadataItem
    1473 iter    include/psList.h        /^    psListElem* iter;                  \/\/\/< iteration cursor$/;"   m
    14741606iter    include/psMinimize.h    /^    psS32 iter;                          \/\/\/< Number of iterations required$/;"    m
    1475 iter    src/collections/psList.h        /^    psListElem* iter;                  \/\/\/< iteration cursor$/;"   m
    14761607iter    src/dataManip/psMinimize.h      /^    psS32 iter;                          \/\/\/< Number of iterations required$/;"    m
    1477 iterIndex       include/psList.h        /^    psU32 iterIndex;            \/\/\/< the numeric position of the iteration cursor in the list$/;"  m
    1478 iterIndex       src/collections/psList.h        /^    psU32 iterIndex;            \/\/\/< the numeric position of the iteration cursor in the list$/;"  m
     1608iterators       include/psList.h        /^    psArray* iterators;                \/\/\/< iterators$/;"  m
     1609iterators       src/collections/psList.h        /^    psArray* iterators;                \/\/\/< iterators$/;"  m
    14791610kernel  include/psImageConvolve.h       /^    psKernelType** kernel;             \/\/\/< Pointer to the kernel data$/;" m
    14801611kernel  src/image/psImageConvolve.h     /^    psKernelType** kernel;             \/\/\/< Pointer to the kernel data$/;" m
     
    14941625lineno  include/psMemory.h      /^    const psS32 lineno;                  \/\/\/< set from __LINE__ in e.g. p_psAlloc$/;"      m       struct:psMemBlock
    14951626lineno  src/sysUtils/psMemory.h /^    const psS32 lineno;                  \/\/\/< set from __LINE__ in e.g. p_psAlloc$/;"      m       struct:psMemBlock
     1627list    include/psList.h        /^psList* list;                      \/\/\/< List iterator to works on$/;"      m
    14961628list    include/psMetadata.h    /^    psList* restrict list;             \/\/\/< the metadata in linked-list$/;"        m       struct:psMetadata
    14971629list    src/astronomy/psMetadata.h      /^    psList* restrict list;             \/\/\/< the metadata in linked-list$/;"        m       struct:psMetadata
     1630list    src/collections/psList.h        /^psList* list;                      \/\/\/< List iterator to works on$/;"      m
    14981631listFree        src/collections/psList.c        /^static void listFree(psList* list)$/;"        f       file:
    14991632listFree        src/collections/psList.c        /^static void listFree(psList* list);$/;"       p       file:
     
    15171650longitudeOffset include/psAstrometry.h  /^    const double longitudeOffset;      \/\/\/< longitude + ... (radians)$/;"  m
    15181651longitudeOffset src/astronomy/psAstrometry.h    /^    const double longitudeOffset;      \/\/\/< longitude + ... (radians)$/;"  m
    1519 lookupSer7Table src/astronomy/psTime.c  /^static double lookupSer7Table($/;"    p       file:
    1520 lookupSer7Table src/astronomy/psTime.c  /^static double lookupSer7Table(const psTime *time, psS32 col)$/;"      f       file:
    1521 lookupTaiUtcTable       src/astronomy/psTime.c  /^static double lookupTaiUtcTable($/;"  p       file:
    1522 lookupTaiUtcTable       src/astronomy/psTime.c  /^static double lookupTaiUtcTable(const psTime *time)$/;"       f       file:
     1652lookupTableFree src/fileUtils/psLookupTable.c   /^static void lookupTableFree(psLookupTable* table)$/;" f       file:
     1653lookupTableFree src/fileUtils/psLookupTable.c   /^static void lookupTableFree(psLookupTable* table);$/;"        p       file:
    15231654lst     include/psAstrometry.h  /^    const double lst;                  \/\/\/< Local Sidereal Time$/;"        m       struct:psExposure
    15241655lst     src/astronomy/psAstrometry.h    /^    const double lst;                  \/\/\/< Local Sidereal Time$/;"        m       struct:psExposure
     
    15331664main    test/astronomy/tst_psMetadata_05.c      /^psS32 main( psS32 argc, char* argv[] )$/;"    f
    15341665main    test/astronomy/tst_psMetadata_06.c      /^psS32 main( psS32 argc, char* argv[] )$/;"    f
     1666main    test/astronomy/tst_psMetadata_07.c      /^int main(int argc, char* argv[])$/;"  f
    15351667main    test/astronomy/tst_psTime_01.c  /^psS32 main(psS32 argc, char* argv[])$/;"      f
    15361668main    test/astronomy/tst_psTime_02.c  /^psS32 main(psS32 argc, char* argv[])$/;"      f
    15371669main    test/astronomy/tst_psTime_03.c  /^psS32 main(psS32 argc, char* argv[])$/;"      f
     1670main    test/astronomy/tst_psTime_04.c  /^int main(int argc, char* argv[])$/;"  f
    15381671main    test/collections/tst_psArray.c  /^psS32 main(psS32 argc,$/;"    f
     1672main    test/collections/tst_psArray01.c        /^psS32 main(psS32 argc,$/;"    f
    15391673main    test/collections/tst_psBitSet.c /^psS32 main( psS32 argc, char* argv[] )$/;"    f
    15401674main    test/collections/tst_psHash00.c /^psS32 main()$/;"      f
     
    15921726main    test/dataManip/tst_psStats09.c  /^psS32 main()$/;"      f
    15931727main    test/dataManip/tst_psVectorFFT.c        /^psS32 main( psS32 argc, char* argv[] )$/;"    f
     1728main    test/fileUtils/tst_psLookupTable_01.c   /^int main(int argc, char* argv[])$/;"  f
    15941729main    test/image/tst_psImage.c        /^psS32 main(psS32 argc, char* argv[])$/;"      f
    15951730main    test/image/tst_psImageConvolve.c        /^psS32 main(psS32 argc, char* argv[])$/;"      f
     
    16861821myLogMsg        test/sysUtils/tst_psLogMsg.c    /^static void myLogMsg(const char *name,$/;"    f       file:
    16871822myPowellChi2Func        src/dataManip/psMinimize.c      /^float myPowellChi2Func(const psVector *params,$/;"    f
     1823myStruct        src/astronomy/psMetadataIO.c    /^myStruct;$/;" t       file:
    16881824myValue src/dataManip/psMinimize.c      /^static psVector *myValue;$/;" v       file:
    16891825n       include/psArray.h       /^    psU32 n;             \/\/\/< Number of elements in use.$/;"       m
     
    17381874nextBlock       src/sysUtils/psMemory.h /^    struct psMemBlock* nextBlock;      \/\/\/< next block allocation list$/;" m       struct:psMemBlock
    17391875numCols include/psImage.h       /^    const psU32 numCols;        \/\/\/< Number of columns in image$/;"        m       struct:psImage
     1876numCols include/psLookupTable.h /^    psU64 numCols;                     \/\/\/< Number of table columns$/;"    m
     1877numCols src/fileUtils/psLookupTable.h   /^    psU64 numCols;                     \/\/\/< Number of table columns$/;"    m
    17401878numCols src/image/psImage.h     /^    const psU32 numCols;        \/\/\/< Number of columns in image$/;"        m       struct:psImage
    17411879numRows include/psImage.h       /^    const psU32 numRows;        \/\/\/< Number of rows in image.$/;"  m       struct:psImage
     1880numRows include/psLookupTable.h /^    psU64 numRows;                     \/\/\/< Number of table rows$/;"       m
     1881numRows src/fileUtils/psLookupTable.h   /^    psU64 numRows;                     \/\/\/< Number of table rows$/;"       m
    17421882numRows src/image/psImage.h     /^    const psU32 numRows;        \/\/\/< Number of rows in image.$/;"  m       struct:psImage
     1883number  include/psList.h        /^psU32 number;                      \/\/\/< List iterator number$/;"   m
     1884number  src/collections/psList.h        /^psU32 number;                      \/\/\/< List iterator number$/;"   m
    17431885nums    include/psStats.h       /^    psVector* nums;                    \/\/\/< Number in each of the bins (INT)$/;"   m
    17441886nums    src/dataManip/psStats.h /^    psVector* nums;                    \/\/\/< Number in each of the bins (INT)$/;"   m
     
    17481890observatory     src/astronomy/psAstrometry.h    /^    const psObservatory* observatory;  \/\/\/< Observatory data$/;"   m       struct:psExposure
    17491891observatoryFree src/astronomy/psAstrometry.c    /^static void observatoryFree(psObservatory* obs)$/;"   f       file:
     1892offEnd  include/psList.h        /^bool offEnd;                       \/\/\/< Iterator off the end?$/;"  m
     1893offEnd  src/collections/psList.h        /^bool offEnd;                       \/\/\/< Iterator off the end?$/;"  m
    17501894options include/psStats.h       /^    psStatsOptions options;     \/\/\/< bitmask of calculated values$/;"      m
    17511895options src/dataManip/psStats.h /^    psStatsOptions options;     \/\/\/< bitmask of calculated values$/;"      m
     
    17601904pP      include/psPhotometry.h  /^    psPhotSystem pP;            \/\/\/< Primary color reference$/;"   m
    17611905pP      src/astronomy/psPhotometry.h    /^    psPhotSystem pP;            \/\/\/< Primary color reference$/;"   m
     1906p_fd    src/fileUtils/psFits.h  /^    fitsfile* p_fd;                    \/\/\/< the CFITSIO fits files handle.$/;"     m
    17621907p_fftwWisdomImported    src/dataManip/psVectorFFT.c     /^static psBool p_fftwWisdomImported = false;$/;"       v       file:
    17631908p_fftwWisdomImported    src/image/psImageFFT.c  /^static psBool p_fftwWisdomImported = false;$/;"       v       file:
     1909p_iter  include/psList.h        /^psListElem* p_iter;                \/\/\/< internal cursor for increased performance index accessing$/;"      m
     1910p_iter  src/collections/psList.h        /^psListElem* p_iter;                \/\/\/< internal cursor for increased performance index accessing$/;"      m
     1911p_iterIndex     include/psList.h        /^int p_iterIndex;                   \/\/\/< index position of the iter.$/;"    m
     1912p_iterIndex     src/collections/psList.h        /^int p_iterIndex;                   \/\/\/< index position of the iter.$/;"    m
    17641913p_kernelRows    include/psImageConvolve.h       /^    psKernelType** p_kernelRows;       \/\/\/< Pointer to the rows of the kernel data; not intended for user use.$/;" m
    17651914p_kernelRows    src/image/psImageConvolve.h     /^    psKernelType** p_kernelRows;       \/\/\/< Pointer to the rows of the kernel data; not intended for user use.$/;" m
     
    17981947p_psFree        src/sysUtils/psMemory.c /^void p_psFree(psPtr vptr, const char *file, psS32 lineno)$/;" f
    17991948p_psFree        src/sysUtils/psMemory.h /^void p_psFree($/;"    p
     1949p_psGaussianDev include/psFunctions.h   /^psVector* p_psGaussianDev($/;"        p
     1950p_psGaussianDev src/dataManip/psFunctions.c     /^psVector* p_psGaussianDev(float mean, float sigma, psS32 Npts)$/;"    f
     1951p_psGaussianDev src/dataManip/psFunctions.h     /^psVector* p_psGaussianDev($/;"        p
    18001952p_psGetStatValue        include/psStats.h       /^psBool p_psGetStatValue($/;"  p
    18011953p_psGetStatValue        src/dataManip/psStats.c /^psBool p_psGetStatValue(const psStats* stats, double *value)$/;"      f
     
    18051957p_psImagePixelInterpolateFcns   include/psImage.h       /^#define p_psImagePixelInterpolateFcns(/;"     d
    18061958p_psImagePixelInterpolateFcns   src/image/psImage.h     /^#define p_psImagePixelInterpolateFcns(/;"     d
     1959p_psInitMetadataItemXml src/astronomy/psMetadataIO.c    /^static void p_psInitMetadataItemXml(void *ctx, char *tagName)$/;"     f       file:
     1960p_psInitMetadataItemXml src/astronomy/psMetadataIO.c    /^static void p_psInitMetadataItemXml(void *ctx, char *tagName);$/;"    p       file:
     1961p_psInitVectorXml       src/astronomy/psMetadataIO.c    /^static void p_psInitVectorXml(void *ctx, char *tagName)$/;"   f       file:
     1962p_psInitVectorXml       src/astronomy/psMetadataIO.c    /^static void p_psInitVectorXml(void *ctx, char *tagName);$/;"  p       file:
    18071963p_psLineMin     src/dataManip/psMinimize.c      /^float p_psLineMin(psMinimization *min,$/;"    f
    18081964p_psMemAllocateID       src/sysUtils/psMemory.c /^psMemoryId p_psMemAllocateID = 0;       \/\/ notify user this block is allocated$/;"  v
     
    18281984p_psNRSpline1DEval      include/psFunctions.h   /^float p_psNRSpline1DEval(psSpline1D *spline,$/;"      p
    18291985p_psNRSpline1DEval      src/dataManip/psFunctions.h     /^float p_psNRSpline1DEval(psSpline1D *spline,$/;"      p
    1830 p_psNormalizeVectorRangeF32     src/dataManip/psStats.c /^void p_psNormalizeVectorRangeF32(psVector* myData,$/;"        f
    1831 p_psNormalizeVectorRangeF64     src/dataManip/psStats.c /^void p_psNormalizeVectorRangeF64(psVector* myData,$/;"        f
     1986p_psNormalizeVectorRangeF32     include/psStats.h       /^void p_psNormalizeVectorRangeF32(psVector* myData, psF32 low, psF32 high);$/;"        p
     1987p_psNormalizeVectorRangeF32     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeF32(psVector* myData, psF32 low, psF32 high);$/;"        p
     1988p_psNormalizeVectorRangeF64     include/psStats.h       /^void p_psNormalizeVectorRangeF64(psVector* myData, psF64 low, psF64 high);$/;"        p
     1989p_psNormalizeVectorRangeF64     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeF64(psVector* myData, psF64 low, psF64 high);$/;"        p
     1990p_psNormalizeVectorRangeS16     include/psStats.h       /^void p_psNormalizeVectorRangeS16(psVector* myData, psS16 low, psS16 high);$/;"        p
     1991p_psNormalizeVectorRangeS16     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeS16(psVector* myData, psS16 low, psS16 high);$/;"        p
     1992p_psNormalizeVectorRangeS32     include/psStats.h       /^void p_psNormalizeVectorRangeS32(psVector* myData, psS32 low, psS32 high);$/;"        p
     1993p_psNormalizeVectorRangeS32     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeS32(psVector* myData, psS32 low, psS32 high);$/;"        p
     1994p_psNormalizeVectorRangeS64     include/psStats.h       /^void p_psNormalizeVectorRangeS64(psVector* myData, psS64 low, psS64 high);$/;"        p
     1995p_psNormalizeVectorRangeS64     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeS64(psVector* myData, psS64 low, psS64 high);$/;"        p
     1996p_psNormalizeVectorRangeS8      include/psStats.h       /^void p_psNormalizeVectorRangeS8(psVector* myData, psS8 low, psS8 high);$/;"   p
     1997p_psNormalizeVectorRangeS8      src/dataManip/psStats.h /^void p_psNormalizeVectorRangeS8(psVector* myData, psS8 low, psS8 high);$/;"   p
     1998p_psNormalizeVectorRangeU16     include/psStats.h       /^void p_psNormalizeVectorRangeU16(psVector* myData, psU16 low, psU16 high);$/;"        p
     1999p_psNormalizeVectorRangeU16     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeU16(psVector* myData, psU16 low, psU16 high);$/;"        p
     2000p_psNormalizeVectorRangeU32     include/psStats.h       /^void p_psNormalizeVectorRangeU32(psVector* myData, psU32 low, psU32 high);$/;"        p
     2001p_psNormalizeVectorRangeU32     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeU32(psVector* myData, psU32 low, psU32 high);$/;"        p
     2002p_psNormalizeVectorRangeU64     include/psStats.h       /^void p_psNormalizeVectorRangeU64(psVector* myData, psU64 low, psU64 high);$/;"        p
     2003p_psNormalizeVectorRangeU64     src/dataManip/psStats.h /^void p_psNormalizeVectorRangeU64(psVector* myData, psU64 low, psU64 high);$/;"        p
     2004p_psNormalizeVectorRangeU8      include/psStats.h       /^void p_psNormalizeVectorRangeU8(psVector* myData, psU8 low, psU8 high);$/;"   p
     2005p_psNormalizeVectorRangeU8      src/dataManip/psStats.h /^void p_psNormalizeVectorRangeU8(psVector* myData, psU8 low, psU8 high);$/;"   p
    18322006p_psRealloc     include/psMemory.h      /^psPtr p_psRealloc($/;"        p
    18332007p_psRealloc     src/sysUtils/psMemory.c /^psPtr p_psRealloc(psPtr vptr, size_t size, const char *file, psS32 lineno)$/;"        f
     
    18422016p_psTraceReset  src/sysUtils/psTrace.c  /^void p_psTraceReset(p_psComponent* currentNode)$/;"   f
    18432017p_psVectorBinDisect     include/psFunctions.h   /^psS32 p_psVectorBinDisect(psVector *bins,$/;" p
    1844 p_psVectorBinDisect     src/dataManip/psFunctions.c     /^psS32 p_psVectorBinDisect(psVector *bins,$/;" f
    18452018p_psVectorBinDisect     src/dataManip/psFunctions.h     /^psS32 p_psVectorBinDisect(psVector *bins,$/;" p
     2019p_psVectorCheckNonEmpty src/dataManip/psStats.c /^bool p_psVectorCheckNonEmpty(const psVector* restrict myVector,$/;"   f
    18462020p_psVectorClippedStats  src/dataManip/psStats.c /^int p_psVectorClippedStats(const psVector* restrict myVector,$/;"     f
    18472021p_psVectorInterpolate   include/psFunctions.h   /^psScalar *p_psVectorInterpolate(psVector *domain,$/;" p
    18482022p_psVectorInterpolate   src/dataManip/psFunctions.c     /^psScalar *p_psVectorInterpolate(psVector *domain,$/;" f
    18492023p_psVectorInterpolate   src/dataManip/psFunctions.h     /^psScalar *p_psVectorInterpolate(psVector *domain,$/;" p
    1850 p_psVectorMax   src/dataManip/psStats.c /^void p_psVectorMax(const psVector* restrict myVector,$/;"     f
    1851 p_psVectorMin   src/dataManip/psStats.c /^void p_psVectorMin(const psVector* restrict myVector,$/;"     f
     2024p_psVectorMax   src/dataManip/psStats.c /^int p_psVectorMax(const psVector* restrict myVector,$/;"      f
     2025p_psVectorMin   src/dataManip/psStats.c /^int p_psVectorMin(const psVector* restrict myVector,$/;"      f
    18522026p_psVectorNValues       src/dataManip/psStats.c /^psS32 p_psVectorNValues(const psVector* restrict myVector,$/;"        f
    18532027p_psVectorRobustStats   src/dataManip/psStats.c /^int p_psVectorRobustStats(const psVector* restrict myVector,$/;"      f
    1854 p_psVectorRobustStats   src/dataManip/psStats.c /^int p_psVectorRobustStats(const psVector* restrict myVector,$/;"      p       file:
    1855 p_psVectorSampleMean    src/dataManip/psStats.c /^void p_psVectorSampleMean(const psVector* restrict myVector,$/;"      f
    1856 p_psVectorSampleMedian  src/dataManip/psStats.c /^void p_psVectorSampleMedian(const psVector* restrict myVector,$/;"    f
    1857 p_psVectorSampleQuartiles       src/dataManip/psStats.c /^void p_psVectorSampleQuartiles(const psVector* restrict myVector,$/;" f
     2028p_psVectorSampleMean    src/dataManip/psStats.c /^int p_psVectorSampleMean(const psVector* restrict myVector,$/;"       f
     2029p_psVectorSampleMedian  src/dataManip/psStats.c /^bool p_psVectorSampleMedian(const psVector* restrict myVector,$/;"    f
     2030p_psVectorSampleQuartiles       src/dataManip/psStats.c /^bool p_psVectorSampleQuartiles(const psVector* restrict myVector,$/;" f
    18582031p_psVectorSampleStdev   src/dataManip/psStats.c /^void p_psVectorSampleStdev(const psVector* restrict myVector,$/;"     f
    18592032p_psVectorSmoothHistGaussian    src/dataManip/psStats.c /^psVector* p_psVectorSmoothHistGaussian(psHistogram* robustHistogram,$/;"      f
     
    18722045p_runTestSuite  test/psTest.c   /^psBool p_runTestSuite( FILE *fp, const char* testPointFile, const char* packageName,$/;"      f
    18732046p_runTestSuite  test/psTest.h   /^psBool p_runTestSuite($/;"    p
     2047p_saxEndElement src/astronomy/psMetadataIO.c    /^static void p_saxEndElement(void *ctx, const xmlChar *tagName)$/;"    f       file:
     2048p_saxEndElement src/astronomy/psMetadataIO.c    /^static void p_saxEndElement(void *ctx, const xmlChar *tagName);$/;"   p       file:
     2049p_saxStartElement       src/astronomy/psMetadataIO.c    /^static void p_saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts)$/;"    f       file:
     2050p_saxStartElement       src/astronomy/psMetadataIO.c    /^static void p_saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts);$/;"   p       file:
    18742051parallacticAngle        include/psAstrometry.h  /^    const float parallacticAngle;      \/\/\/< Parallactic angle$/;"  m       struct:psExposure
    18752052parallacticAngle        src/astronomy/psAstrometry.h    /^    const float parallacticAngle;      \/\/\/< Parallactic angle$/;"  m       struct:psExposure
     
    18832060parent  src/image/psImage.h     /^    const struct psImage* parent;      \/\/\/< Parent, if a subimage.$/;"     m       struct:psImage
    18842061parseBool       src/astronomy/psMetadataIO.c    /^psBool parseBool(char *inString, psS32 *status)$/;"   f
     2062parseF32        src/fileUtils/psLookupTable.c   /^static psF32 parseF32(char *inString, psParseErrorType *status)$/;"   f       file:
     2063parseF32        src/fileUtils/psLookupTable.c   /^static psF32 parseF32(char *inString, psParseErrorType *status);$/;"  p       file:
     2064parseF64        src/fileUtils/psLookupTable.c   /^static psF64 parseF64(char *inString, psParseErrorType *status)$/;"   f       file:
     2065parseF64        src/fileUtils/psLookupTable.c   /^static psF64 parseF64(char *inString, psParseErrorType *status);$/;"  p       file:
     2066parseS16        src/fileUtils/psLookupTable.c   /^static psS16 parseS16(char *inString, psParseErrorType *status)$/;"   f       file:
     2067parseS16        src/fileUtils/psLookupTable.c   /^static psS16 parseS16(char *inString, psParseErrorType *status);$/;"  p       file:
     2068parseS32        src/fileUtils/psLookupTable.c   /^static psS32 parseS32(char *inString, psParseErrorType *status)$/;"   f       file:
     2069parseS32        src/fileUtils/psLookupTable.c   /^static psS32 parseS32(char *inString, psParseErrorType *status);$/;"  p       file:
     2070parseS64        src/fileUtils/psLookupTable.c   /^static psS64 parseS64(char *inString, psParseErrorType *status)$/;"   f       file:
     2071parseS64        src/fileUtils/psLookupTable.c   /^static psS64 parseS64(char *inString, psParseErrorType *status);$/;"  p       file:
     2072parseS8 src/fileUtils/psLookupTable.c   /^static psS8 parseS8(char *inString, psParseErrorType *status)$/;"     f       file:
     2073parseS8 src/fileUtils/psLookupTable.c   /^static psS8 parseS8(char *inString, psParseErrorType *status);$/;"    p       file:
     2074parseU16        src/fileUtils/psLookupTable.c   /^static psU16 parseU16(char *inString, psParseErrorType *status)$/;"   f       file:
     2075parseU16        src/fileUtils/psLookupTable.c   /^static psU16 parseU16(char *inString, psParseErrorType *status);$/;"  p       file:
     2076parseU32        src/fileUtils/psLookupTable.c   /^static psU32 parseU32(char *inString, psParseErrorType *status)$/;"   f       file:
     2077parseU32        src/fileUtils/psLookupTable.c   /^static psU32 parseU32(char *inString, psParseErrorType *status);$/;"  p       file:
     2078parseU64        src/fileUtils/psLookupTable.c   /^static psU64 parseU64(char *inString, psParseErrorType *status)$/;"   f       file:
     2079parseU64        src/fileUtils/psLookupTable.c   /^static psU64 parseU64(char *inString, psParseErrorType *status);$/;"  p       file:
     2080parseU8 src/fileUtils/psLookupTable.c   /^static psU8 parseU8(char *inString, psParseErrorType *status)$/;"     f       file:
     2081parseU8 src/fileUtils/psLookupTable.c   /^static psU8 parseU8(char *inString, psParseErrorType *status);$/;"    p       file:
    18852082parseValue      src/astronomy/psMetadataIO.c    /^double parseValue(char *inString, psS32 *status)$/;"  f
     2083parseValue      src/fileUtils/psLookupTable.c   /^static void parseValue(psVector *vec, psU64 index, char* strValue, psParseErrorType *status)$/;"      f       file:
     2084parseValue      src/fileUtils/psLookupTable.c   /^static void parseValue(psVector *vec, psU64 index, char* strValue, psParseErrorType *status);$/;"     p       file:
    18862085parseVector     src/astronomy/psMetadataIO.c    /^psVector* parseVector(char *inString, psElemType elemType, psS32 *status)$/;" f
    18872086pattern include/psAstrometry.h  /^    psFixedPattern* pattern;           \/\/\/< fixed pattern residual offsets$/;"     m       struct:psFPA
     
    18892088persistent      include/psMemory.h      /^    psBool persistent;                   \/\/\/< marks if this non-user persistent data like error stack, etc.$/;"    m       struct:psMemBlock
    18902089persistent      src/sysUtils/psMemory.h /^    psBool persistent;                   \/\/\/< marks if this non-user persistent data like error stack, etc.$/;"    m       struct:psMemBlock
     2090phiP    include/psCoord.h       /^    double phiP;                      \/\/\/< Longitude of the ascending node in the target system$/;"        m
     2091phiP    src/astronomy/psCoord.h /^    double phiP;                      \/\/\/< Longitude of the ascending node in the target system$/;"        m
    18912092planeDistortFree        src/astronomy/psCoord.c /^static void planeDistortFree(psPlaneDistort *pt)$/;"  f       file:
    18922093planeTransformFree      src/astronomy/psCoord.c /^static void planeTransformFree(psPlaneTransform *pt)$/;"      f       file:
     
    19102111previousBlock   src/sysUtils/psMemory.h /^    struct psMemBlock* previousBlock;  \/\/\/< previous block in allocation list$/;"  m       struct:psMemBlock
    19112112printCell       test/astronomy/tst_psAstrometry01.c     /^psS32 printCell(psCell *cell)$/;"     f
     2113printError      src/fileUtils/psLookupTable.c   /^static psParseErrorType printError(psU64 lineCount, char* badText, psParseErrorType status)$/;"       f       file:
    19122114printFooter     include/psTest.h        /^#define printFooter(/;"       d
    19132115printFooter     test/psTest.h   /^#define printFooter(/;"       d
     
    21502352psDPolynomial1DAlloc    src/dataManip/psFunctions.h     /^psDPolynomial1D* psDPolynomial1DAlloc($/;"    p
    21512353psDPolynomial1DEval     include/psFunctions.h   /^double psDPolynomial1DEval($/;"       p
    2152 psDPolynomial1DEval     src/dataManip/psFunctions.c     /^double psDPolynomial1DEval(double x, const psDPolynomial1D* myPoly)$/;"       f
     2354psDPolynomial1DEval     src/dataManip/psFunctions.c     /^double psDPolynomial1DEval(const psDPolynomial1D* myPoly, double x)$/;"       f
    21532355psDPolynomial1DEval     src/dataManip/psFunctions.h     /^double psDPolynomial1DEval($/;"       p
    2154 psDPolynomial1DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial1DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"       p
    2155 psDPolynomial1DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial1DEvalVector(const psVector *x,$/;"    f
    2156 psDPolynomial1DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial1DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"       p
     2356psDPolynomial1DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial1DEvalVector($/;"      p
     2357psDPolynomial1DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial1DEvalVector(const psDPolynomial1D *myPoly,$/;"        f
     2358psDPolynomial1DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial1DEvalVector($/;"      p
    21572359psDPolynomial2D include/psFunctions.h   /^psDPolynomial2D;$/;"  t
    21582360psDPolynomial2D src/dataManip/psFunctions.h     /^psDPolynomial2D;$/;"  t
     
    21612363psDPolynomial2DAlloc    src/dataManip/psFunctions.h     /^psDPolynomial2D* psDPolynomial2DAlloc($/;"    p
    21622364psDPolynomial2DEval     include/psFunctions.h   /^double psDPolynomial2DEval($/;"       p
    2163 psDPolynomial2DEval     src/dataManip/psFunctions.c     /^double psDPolynomial2DEval(double x, double y, const psDPolynomial2D* myPoly)$/;"     f
     2365psDPolynomial2DEval     src/dataManip/psFunctions.c     /^double psDPolynomial2DEval(const psDPolynomial2D* myPoly,$/;" f
    21642366psDPolynomial2DEval     src/dataManip/psFunctions.h     /^double psDPolynomial2DEval($/;"       p
    2165 psDPolynomial2DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial2DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"       p
    2166 psDPolynomial2DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial2DEvalVector(const psVector *x,$/;"    f
    2167 psDPolynomial2DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial2DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"       p
     2367psDPolynomial2DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial2DEvalVector($/;"      p
     2368psDPolynomial2DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial2DEvalVector(const psDPolynomial2D *myPoly,$/;"        f
     2369psDPolynomial2DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial2DEvalVector($/;"      p
    21682370psDPolynomial3D include/psFunctions.h   /^psDPolynomial3D;$/;"  t
    21692371psDPolynomial3D src/dataManip/psFunctions.h     /^psDPolynomial3D;$/;"  t
     
    21722374psDPolynomial3DAlloc    src/dataManip/psFunctions.h     /^psDPolynomial3D* psDPolynomial3DAlloc($/;"    p
    21732375psDPolynomial3DEval     include/psFunctions.h   /^double psDPolynomial3DEval($/;"       p
    2174 psDPolynomial3DEval     src/dataManip/psFunctions.c     /^double psDPolynomial3DEval(double x, double y, double z, const psDPolynomial3D* myPoly)$/;"   f
     2376psDPolynomial3DEval     src/dataManip/psFunctions.c     /^double psDPolynomial3DEval(const psDPolynomial3D* myPoly,$/;" f
    21752377psDPolynomial3DEval     src/dataManip/psFunctions.h     /^double psDPolynomial3DEval($/;"       p
    2176 psDPolynomial3DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial3DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"       p
    2177 psDPolynomial3DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial3DEvalVector(const psVector *x,$/;"    f
    2178 psDPolynomial3DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial3DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"       p
     2378psDPolynomial3DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial3DEvalVector($/;"      p
     2379psDPolynomial3DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial3DEvalVector(const psDPolynomial3D *myPoly,$/;"        f
     2380psDPolynomial3DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial3DEvalVector($/;"      p
    21792381psDPolynomial4D include/psFunctions.h   /^psDPolynomial4D;$/;"  t
    21802382psDPolynomial4D src/dataManip/psFunctions.h     /^psDPolynomial4D;$/;"  t
     
    21832385psDPolynomial4DAlloc    src/dataManip/psFunctions.h     /^psDPolynomial4D* psDPolynomial4DAlloc($/;"    p
    21842386psDPolynomial4DEval     include/psFunctions.h   /^double psDPolynomial4DEval($/;"       p
    2185 psDPolynomial4DEval     src/dataManip/psFunctions.c     /^double psDPolynomial4DEval(double w, double x, double y, double z, const psDPolynomial4D* myPoly)$/;" f
     2387psDPolynomial4DEval     src/dataManip/psFunctions.c     /^double psDPolynomial4DEval(const psDPolynomial4D* myPoly,$/;" f
    21862388psDPolynomial4DEval     src/dataManip/psFunctions.h     /^double psDPolynomial4DEval($/;"       p
    2187 psDPolynomial4DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial4DEvalVector(const psVector *w,             \/\/\/< w locations at which to evaluate$/;"       p
    2188 psDPolynomial4DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial4DEvalVector(const psVector *w,$/;"    f
    2189 psDPolynomial4DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial4DEvalVector(const psVector *w,             \/\/\/< w locations at which to evaluate$/;"       p
     2389psDPolynomial4DEvalVector       include/psFunctions.h   /^psVector *psDPolynomial4DEvalVector($/;"      p
     2390psDPolynomial4DEvalVector       src/dataManip/psFunctions.c     /^psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *myPoly,$/;"        f
     2391psDPolynomial4DEvalVector       src/dataManip/psFunctions.h     /^psVector *psDPolynomial4DEvalVector($/;"      p
    21902392psDeproject     include/psCoord.h       /^psSphere* psDeproject($/;"    p
    21912393psDeproject     src/astronomy/psCoord.c /^psSphere* psDeproject(const psPlane* coord,$/;"       f
     
    22412443psF64   include/psType.h        /^typedef double psF64;                  \/\/\/< 64-bit floating point$/;"      t
    22422444psF64   src/sysUtils/psType.h   /^typedef double psF64;                  \/\/\/< 64-bit floating point$/;"      t
     2445psFFTFlags      include/psVectorFFT.h   /^} psFFTFlags;$/;"     t
     2446psFFTFlags      src/dataManip/psVectorFFT.h     /^} psFFTFlags;$/;"     t
    22432447psFPA   include/psAstrometry.h  /^psFPA;$/;"    t
    22442448psFPA   include/psAstrometry.h  /^typedef struct psFPA$/;"      s
     
    22482452psFPAAlloc      src/astronomy/psAstrometry.c    /^psFPA* psFPAAlloc(psS32 nChips,$/;"   f
    22492453psFPAAlloc      src/astronomy/psAstrometry.h    /^psFPA* psFPAAlloc($/;"        p
    2250 psFftDirection  include/psVectorFFT.h   /^} psFftDirection;$/;" t
    2251 psFftDirection  src/dataManip/psVectorFFT.h     /^} psFftDirection;$/;" t
     2454psFits  src/fileUtils/psFits.h  /^psFits;$/;"   t
     2455psFitsAlloc     src/fileUtils/psFits.c  /^psFits* psFitsAlloc(const char* name,                  \/\/\/< the FITS file name$/;" f
     2456psFitsAlloc     src/fileUtils/psFits.h  /^psFits* psFitsAlloc($/;"      p
     2457psFitsCreateExt src/fileUtils/psFits.c  /^bool psFitsCreateExt(psFits* fits)$/;"        f
     2458psFitsCreateExt src/fileUtils/psFits.h  /^bool psFitsCreateExt($/;"     p
     2459psFitsGetExtName        src/fileUtils/psFits.c  /^char* psFitsGetExtName(psFits* fits)$/;"      f
     2460psFitsGetExtName        src/fileUtils/psFits.h  /^char* psFitsGetExtName($/;"   p
     2461psFitsGetExtNum src/fileUtils/psFits.c  /^int psFitsGetExtNum(psFits* fits)$/;" f
     2462psFitsGetExtNum src/fileUtils/psFits.h  /^int psFitsGetExtNum($/;"      p
     2463psFitsGetExtType        src/fileUtils/psFits.c  /^psFitsType psFitsGetExtType(psFits* fits)$/;" f
     2464psFitsGetExtType        src/fileUtils/psFits.h  /^psFitsType psFitsGetExtType($/;"      p
     2465psFitsGetSize   src/fileUtils/psFits.c  /^int psFitsGetSize(psFits* fits)$/;"   f
     2466psFitsGetSize   src/fileUtils/psFits.h  /^int psFitsGetSize($/;"        p
     2467psFitsMoveExtName       src/fileUtils/psFits.c  /^psFitsType psFitsMoveExtName(psFits* fits,$/;"        f
     2468psFitsMoveExtName       src/fileUtils/psFits.h  /^psFitsType psFitsMoveExtName($/;"     p
     2469psFitsMoveExtNum        src/fileUtils/psFits.c  /^psFitsType psFitsMoveExtNum(psFits* fits,$/;" f
     2470psFitsMoveExtNum        src/fileUtils/psFits.h  /^psFitsType psFitsMoveExtNum($/;"      p
     2471psFitsReadHeader        src/fileUtils/psFits.c  /^psMetadata* psFitsReadHeader(psMetadata* out,$/;"     f
     2472psFitsReadHeader        src/fileUtils/psFits.h  /^psMetadata* psFitsReadHeader($/;"     p
     2473psFitsReadHeaderSet     src/fileUtils/psFits.c  /^psHash* psFitsReadHeaderSet(psHash* out,$/;"  f
     2474psFitsReadHeaderSet     src/fileUtils/psFits.h  /^psHash* psFitsReadHeaderSet($/;"      p
     2475psFitsReadTable src/fileUtils/psFits.c  /^psArray* psFitsReadTable(psFits* fits)$/;"    f
     2476psFitsReadTable src/fileUtils/psFits.h  /^psArray* psFitsReadTable($/;" p
     2477psFitsReadTableColumn   src/fileUtils/psFits.c  /^psArray* psFitsReadTableColumn(psFits* fits,$/;"      f
     2478psFitsReadTableColumn   src/fileUtils/psFits.h  /^psArray* psFitsReadTableColumn($/;"   p
     2479psFitsReadTableColumnNum        src/fileUtils/psFits.c  /^psVector* psFitsReadTableColumnNum(psFits* fits,$/;"  f
     2480psFitsReadTableColumnNum        src/fileUtils/psFits.h  /^psVector* psFitsReadTableColumnNum($/;"       p
     2481psFitsReadTableRow      src/fileUtils/psFits.c  /^psMetadata* psFitsReadTableRow(psFits* fits,$/;"      f
     2482psFitsReadTableRow      src/fileUtils/psFits.h  /^psMetadata* psFitsReadTableRow($/;"   p
     2483psFitsType      src/fileUtils/psFits.h  /^} psFitsType;$/;"     t
     2484psFitsWriteHeader       src/fileUtils/psFits.h  /^bool psFitsWriteHeader($/;"   p
     2485psFitsWriteImage        src/fileUtils/psFits.c  /^bool psFitsWriteImage(psFits* fits,$/;"       f
     2486psFitsWriteImageSection src/fileUtils/psFits.h  /^bool psFitsWriteImageSection($/;"     p
     2487psFitsWriteTable        src/fileUtils/psFits.c  /^bool psFitsWriteTable(psFits* fits,$/;"       f
     2488psFitsWriteTable        src/fileUtils/psFits.h  /^bool psFitsWriteTable($/;"    p
    22522489psFixedPattern  include/psAstrometry.h  /^psFixedPattern;$/;"   t
    22532490psFixedPattern  src/astronomy/psAstrometry.h    /^psFixedPattern;$/;"   t
     
    22642501psGaussian      src/dataManip/psFunctions.c     /^float psGaussian(float x, float mean, float sigma, psBool normal)$/;" f
    22652502psGaussian      src/dataManip/psFunctions.h     /^float psGaussian($/;" p
    2266 psGaussianDev   include/psFunctions.h   /^psVector* psGaussianDev($/;"  p
    2267 psGaussianDev   src/dataManip/psFunctions.c     /^psVector* psGaussianDev(float mean, float sigma, psS32 Npts)$/;"      f
    2268 psGaussianDev   src/dataManip/psFunctions.h     /^psVector* psGaussianDev($/;"  p
    22692503psGrommit       include/psAstrometry.h  /^psGrommit;$/;"        t
    22702504psGrommit       src/astronomy/psAstrometry.h    /^psGrommit;$/;"        t
     
    23442578psImageEvalPolynomial   src/image/psImageStats.h        /^psImage* psImageEvalPolynomial($/;"   p
    23452579psImageFFT      include/psImageFFT.h    /^psImage* psImageFFT($/;"      p
    2346 psImageFFT      src/image/psImageFFT.c  /^psImage* psImageFFT(psImage* out, const psImage* in, psFftDirection direction)$/;"    f
     2580psImageFFT      src/image/psImageFFT.c  /^psImage* psImageFFT(psImage* out, const psImage* in, psFFTFlags direction)$/;"        f
    23472581psImageFFT      src/image/psImageFFT.h  /^psImage* psImageFFT($/;"      p
    23482582psImageFitPolynomial    include/psImageStats.h  /^psPolynomial2D* psImageFitPolynomial($/;"     p
     
    24252659psKernelType    include/psImageConvolve.h       /^typedef psF32 psKernelType;$/;"       t
    24262660psKernelType    src/image/psImageConvolve.h     /^typedef psF32 psKernelType;$/;"       t
     2661psLibFinalize   include/psConfigure.h   /^void psLibFinalize($/;"       p
     2662psLibFinalize   src/sysUtils/psConfigure.c      /^void psLibFinalize(void)$/;"  f
     2663psLibFinalize   src/sysUtils/psConfigure.h      /^void psLibFinalize($/;"       p
     2664psLibInit       include/psConfigure.h   /^void psLibInit($/;"   p
     2665psLibInit       src/sysUtils/psConfigure.c      /^void psLibInit(bool predictable, const char* timeConfig)$/;"  f
     2666psLibInit       src/sysUtils/psConfigure.h      /^void psLibInit($/;"   p
     2667psLibVersion    include/psConfigure.h   /^char* psLibVersion($/;"       p
     2668psLibVersion    src/sysUtils/psConfigure.c      /^char* psLibVersion(void)$/;"  f
     2669psLibVersion    src/sysUtils/psConfigure.h      /^char* psLibVersion($/;"       p
    24272670psList  include/psList.h        /^psList;$/;"   t
    24282671psList  src/collections/psList.h        /^psList;$/;"   t
     
    24492692psListGetPrevious       src/collections/psList.c        /^psPtr psListGetPrevious(psList* list)$/;"     f
    24502693psListGetPrevious       src/collections/psList.h        /^psPtr psListGetPrevious($/;"  p
     2694psListIterator  include/psList.h        /^psListIterator;$/;"   t
     2695psListIterator  src/collections/psList.h        /^psListIterator;$/;"   t
    24512696psListRemove    include/psList.h        /^psBool psListRemove($/;"      p
    24522697psListRemove    src/collections/psList.c        /^psBool psListRemove(psList* list, psS32 location, psPtr data)$/;"     f
     
    24762721psLogSetLevel   src/sysUtils/psLogMsg.c /^psS32 psLogSetLevel(psS32 level)$/;"  f
    24772722psLogSetLevel   src/sysUtils/psLogMsg.h /^psS32 psLogSetLevel($/;"      p
    2478 psLookupErrorType       src/fileUtils/psLookupTable.h   /^} psLookupErrorType;$/;"      t
     2723psLookupStatusType      include/psLookupTable.h /^} psLookupStatusType;$/;"     t
     2724psLookupStatusType      src/fileUtils/psLookupTable.h   /^} psLookupStatusType;$/;"     t
     2725psLookupTable   include/psLookupTable.h /^psLookupTable;$/;"    t
    24792726psLookupTable   src/fileUtils/psLookupTable.h   /^psLookupTable;$/;"    t
    2480 psLookupTableAlloc      src/fileUtils/psLookupTable.c   /^psLookupTable* psLookupTableAlloc(psU64 numRows, psU64 numCols)$/;"   f
     2727psLookupTableAlloc      include/psLookupTable.h /^psLookupTable* psLookupTableAlloc($/;"        p
     2728psLookupTableAlloc      src/fileUtils/psLookupTable.c   /^psLookupTable* psLookupTableAlloc(const char *fileName, psF64 validFrom, psF64 validTo)$/;"   f
    24812729psLookupTableAlloc      src/fileUtils/psLookupTable.h   /^psLookupTable* psLookupTableAlloc($/;"        p
    2482 psLookupTableInterpolate        src/fileUtils/psLookupTable.c   /^psF64 psLookupTableInterpolate(psLookupTable *table, psF64 index, psMaskType *status)$/;"     f
    2483 psLookupTableInterpolate        src/fileUtils/psLookupTable.c   /^psVector* psLookupTableInterpolate(psLookupTable *table, psF64 index, psMaskType *status)$/;" f
     2730psLookupTableInterpolate        include/psLookupTable.h /^psF64 psLookupTableInterpolate($/;"   p
     2731psLookupTableInterpolate        src/fileUtils/psLookupTable.c   /^psF64 psLookupTableInterpolate(psLookupTable *table, psF64 index, psU64 column, psLookupStatusType *status)$/;"       f
    24842732psLookupTableInterpolate        src/fileUtils/psLookupTable.h   /^psF64 psLookupTableInterpolate($/;"   p
    2485 psLookupTableInterpolate        src/fileUtils/psLookupTable.h   /^psVector* psLookupTableInterpolate($/;"       p
    2486 psLookupTableRead       src/fileUtils/psLookupTable.c   /^psLookupTable* psLookupTableRead(char *fileName)$/;"  f
     2733psLookupTableInterpolateAll     include/psLookupTable.h /^psVector* psLookupTableInterpolateAll($/;"    p
     2734psLookupTableInterpolateAll     src/fileUtils/psLookupTable.c   /^psVector* psLookupTableInterpolateAll(psLookupTable *table, psF64 index, psVector *stats)$/;" f
     2735psLookupTableInterpolateAll     src/fileUtils/psLookupTable.h   /^psVector* psLookupTableInterpolateAll($/;"    p
     2736psLookupTableRead       include/psLookupTable.h /^psLookupTable* psLookupTableRead($/;" p
     2737psLookupTableRead       src/fileUtils/psLookupTable.c   /^psLookupTable* psLookupTableRead(psLookupTable *table)$/;"    f
    24872738psLookupTableRead       src/fileUtils/psLookupTable.h   /^psLookupTable* psLookupTableRead($/;" p
    24882739psMaskType      include/psType.h        /^typedef psU8 psMaskType;               \/\/\/< the C datatype for a mask image$/;"    t
     
    25302781psMemCheckCorruption    src/sysUtils/psMemory.h /^psS32 psMemCheckCorruption($/;"       p
    25312782psMemCheckLeaks include/psMemory.h      /^psS32 psMemCheckLeaks($/;"    p
    2532 psMemCheckLeaks src/sysUtils/psMemory.c /^psS32 psMemCheckLeaks(psMemoryId id0, psMemBlock* ** arr, FILE * fd)$/;"      f
     2783psMemCheckLeaks src/sysUtils/psMemory.c /^psS32 psMemCheckLeaks(psMemoryId id0, psMemBlock* ** arr, FILE * fd, psBool persistence)$/;"  f
    25332784psMemCheckLeaks src/sysUtils/psMemory.h /^psS32 psMemCheckLeaks($/;"    p
    25342785psMemDecrRefCounter     include/psMemory.h      /^#define psMemDecrRefCounter(/;"       d
     
    26052856psMetadataLookup        src/astronomy/psMetadata.h      /^psMetadataItem* psMetadataLookup($/;" p
    26062857psMetadataParseConfig   include/psMetadataIO.h  /^psS32 psMetadataParseConfig($/;"      p
    2607 psMetadataParseConfig   src/astronomy/psMetadataIO.c    /^psS32 psMetadataParseConfig(psMetadata** md, char *fileName, psBool overwrite)$/;"    f
     2858psMetadataParseConfig   src/astronomy/psMetadataIO.c    /^psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite)$/;"      f
    26082859psMetadataParseConfig   src/astronomy/psMetadataIO.h    /^psS32 psMetadataParseConfig($/;"      p
     2860psMetadataParseConfigXml        include/psMetadataIO.h  /^psS32 psMetadataParseConfigXml($/;"   p
     2861psMetadataParseConfigXml        src/astronomy/psMetadataIO.c    /^psS32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)$/;"     f
     2862psMetadataParseConfigXml        src/astronomy/psMetadataIO.h    /^psS32 psMetadataParseConfigXml($/;"   p
    26092863psMetadataReadHeader    include/psMetadataIO.h  /^psMetadata* psMetadataReadHeader($/;" p
    26102864psMetadataReadHeader    src/astronomy/psMetadataIO.c    /^psMetadata* psMetadataReadHeader(psMetadata* output, char *extName, psS32 extNum, char *fileName)$/;" f
     
    26362890psMinimizeLMChi2Gauss1D src/dataManip/psMinimize.c      /^psVector *psMinimizeLMChi2Gauss1D(psImage *deriv,$/;" f
    26372891psMinimizeLMChi2Gauss1D src/dataManip/psMinimize.h      /^psVector *psMinimizeLMChi2Gauss1D(psImage *deriv,$/;" p
     2892psMinimizeLMChi2Gauss2D src/dataManip/psMinimize.c      /^psVector *psMinimizeLMChi2Gauss2D(psImage *deriv,$/;" f
    26382893psMinimizePowell        include/psMinimize.h    /^psBool psMinimizePowell(psMinimization *min,$/;"      p
    26392894psMinimizePowell        src/dataManip/psMinimize.c      /^psBool psMinimizePowell(psMinimization *min,$/;"      f
     
    26442899psMinimizePowellFunc    include/psMinimize.h    /^float (*psMinimizePowellFunc)(const psVector *params,$/;"     t
    26452900psMinimizePowellFunc    src/dataManip/psMinimize.h      /^float (*psMinimizePowellFunc)(const psVector *params,$/;"     t
    2646 psNormalizeVectorRange  include/psStats.h       /^void psNormalizeVectorRange(psVector* myData,$/;"     p
    2647 psNormalizeVectorRange  src/dataManip/psStats.c /^void psNormalizeVectorRange(psVector* myData,$/;"     f
    2648 psNormalizeVectorRange  src/dataManip/psStats.h /^void psNormalizeVectorRange(psVector* myData,$/;"     p
    26492901psObservatory   include/psAstrometry.h  /^psObservatory;$/;"    t
    26502902psObservatory   src/astronomy/psAstrometry.h    /^psObservatory;$/;"    t
     
    26522904psObservatoryAlloc      src/astronomy/psAstrometry.c    /^psObservatory* psObservatoryAlloc(const char* name,$/;"       f
    26532905psObservatoryAlloc      src/astronomy/psAstrometry.h    /^psObservatory* psObservatoryAlloc($/;"        p
     2906psParseErrorType        include/psLookupTable.h /^}psParseErrorType;$/;"        t
     2907psParseErrorType        src/fileUtils/psLookupTable.h   /^}psParseErrorType;$/;"        t
    26542908psPhotSystem    include/psPhotometry.h  /^psPhotSystem;$/;"     t
    26552909psPhotSystem    src/astronomy/psPhotometry.h    /^psPhotSystem;$/;"     t
     
    26822936psPolynomial1DAlloc     src/dataManip/psFunctions.h     /^psPolynomial1D* psPolynomial1DAlloc($/;"      p
    26832937psPolynomial1DEval      include/psFunctions.h   /^float psPolynomial1DEval($/;" p
    2684 psPolynomial1DEval      src/dataManip/psFunctions.c     /^float psPolynomial1DEval(float x, const psPolynomial1D* myPoly)$/;"   f
     2938psPolynomial1DEval      src/dataManip/psFunctions.c     /^float psPolynomial1DEval(const psPolynomial1D* myPoly, float x)$/;"   f
    26852939psPolynomial1DEval      src/dataManip/psFunctions.h     /^float psPolynomial1DEval($/;" p
    2686 psPolynomial1DEvalVector        include/psFunctions.h   /^psVector *psPolynomial1DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"        p
    2687 psPolynomial1DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial1DEvalVector(const psVector *x,$/;"     f
    2688 psPolynomial1DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial1DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"        p
     2940psPolynomial1DEvalVector        include/psFunctions.h   /^psVector *psPolynomial1DEvalVector($/;"       p
     2941psPolynomial1DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial1DEvalVector(const psPolynomial1D *myPoly,$/;"  f
     2942psPolynomial1DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial1DEvalVector($/;"       p
    26892943psPolynomial2D  include/psFunctions.h   /^psPolynomial2D;$/;"   t
    26902944psPolynomial2D  src/dataManip/psFunctions.h     /^psPolynomial2D;$/;"   t
     
    26932947psPolynomial2DAlloc     src/dataManip/psFunctions.h     /^psPolynomial2D* psPolynomial2DAlloc($/;"      p
    26942948psPolynomial2DEval      include/psFunctions.h   /^float psPolynomial2DEval($/;" p
    2695 psPolynomial2DEval      src/dataManip/psFunctions.c     /^float psPolynomial2DEval(float x, float y, const psPolynomial2D* myPoly)$/;"  f
     2949psPolynomial2DEval      src/dataManip/psFunctions.c     /^float psPolynomial2DEval(const psPolynomial2D* myPoly, float x, float y)$/;"  f
    26962950psPolynomial2DEval      src/dataManip/psFunctions.h     /^float psPolynomial2DEval($/;" p
    2697 psPolynomial2DEvalVector        include/psFunctions.h   /^psVector *psPolynomial2DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"        p
    2698 psPolynomial2DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial2DEvalVector(const psVector *x,$/;"     f
    2699 psPolynomial2DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial2DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"        p
     2951psPolynomial2DEvalVector        include/psFunctions.h   /^psVector *psPolynomial2DEvalVector($/;"       p
     2952psPolynomial2DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial2DEvalVector(const psPolynomial2D *myPoly,$/;"  f
     2953psPolynomial2DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial2DEvalVector($/;"       p
    27002954psPolynomial3D  include/psFunctions.h   /^psPolynomial3D;$/;"   t
    27012955psPolynomial3D  src/dataManip/psFunctions.h     /^psPolynomial3D;$/;"   t
     
    27042958psPolynomial3DAlloc     src/dataManip/psFunctions.h     /^psPolynomial3D* psPolynomial3DAlloc($/;"      p
    27052959psPolynomial3DEval      include/psFunctions.h   /^float psPolynomial3DEval($/;" p
    2706 psPolynomial3DEval      src/dataManip/psFunctions.c     /^float psPolynomial3DEval(float x, float y, float z, const psPolynomial3D* myPoly)$/;" f
     2960psPolynomial3DEval      src/dataManip/psFunctions.c     /^float psPolynomial3DEval(const psPolynomial3D* myPoly, float x, float y, float z)$/;" f
    27072961psPolynomial3DEval      src/dataManip/psFunctions.h     /^float psPolynomial3DEval($/;" p
    2708 psPolynomial3DEvalVector        include/psFunctions.h   /^psVector *psPolynomial3DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"        p
    2709 psPolynomial3DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial3DEvalVector(const psVector *x,$/;"     f
    2710 psPolynomial3DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial3DEvalVector(const psVector *x,             \/\/\/< x locations at which to evaluate$/;"        p
     2962psPolynomial3DEvalVector        include/psFunctions.h   /^psVector *psPolynomial3DEvalVector($/;"       p
     2963psPolynomial3DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial3DEvalVector(const psPolynomial3D *myPoly,$/;"  f
     2964psPolynomial3DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial3DEvalVector($/;"       p
    27112965psPolynomial4D  include/psFunctions.h   /^psPolynomial4D;$/;"   t
    27122966psPolynomial4D  src/dataManip/psFunctions.h     /^psPolynomial4D;$/;"   t
     
    27152969psPolynomial4DAlloc     src/dataManip/psFunctions.h     /^psPolynomial4D* psPolynomial4DAlloc($/;"      p
    27162970psPolynomial4DEval      include/psFunctions.h   /^float psPolynomial4DEval($/;" p
    2717 psPolynomial4DEval      src/dataManip/psFunctions.c     /^float psPolynomial4DEval(float w, float x, float y, float z, const psPolynomial4D* myPoly)$/;"        f
     2971psPolynomial4DEval      src/dataManip/psFunctions.c     /^float psPolynomial4DEval(const psPolynomial4D* myPoly, float w, float x, float y, float z)$/;"        f
    27182972psPolynomial4DEval      src/dataManip/psFunctions.h     /^float psPolynomial4DEval($/;" p
    2719 psPolynomial4DEvalVector        include/psFunctions.h   /^psVector *psPolynomial4DEvalVector(const psVector *w,             \/\/\/< w locations at which to evaluate$/;"        p
    2720 psPolynomial4DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial4DEvalVector(const psVector *w,$/;"     f
    2721 psPolynomial4DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial4DEvalVector(const psVector *w,             \/\/\/< w locations at which to evaluate$/;"        p
     2973psPolynomial4DEvalVector        include/psFunctions.h   /^psVector *psPolynomial4DEvalVector($/;"       p
     2974psPolynomial4DEvalVector        src/dataManip/psFunctions.c     /^psVector *psPolynomial4DEvalVector(const psPolynomial4D *myPoly,$/;"  f
     2975psPolynomial4DEvalVector        src/dataManip/psFunctions.h     /^psVector *psPolynomial4DEvalVector($/;"       p
    27222976psPolynomialType        include/psFunctions.h   /^} psPolynomialType;$/;"       t
    27232977psPolynomialType        src/dataManip/psFunctions.h     /^} psPolynomialType;$/;"       t
     
    27312985psPtr   include/psType.h        /^typedef void* psPtr;                   \/\/\/< void pointer$/;"       t
    27322986psPtr   src/sysUtils/psType.h   /^typedef void* psPtr;                   \/\/\/< void pointer$/;"       t
     2987psRandom        include/psRandom.h      /^psRandom;$/;" t
     2988psRandom        src/dataManip/psRandom.h        /^psRandom;$/;" t
     2989psRandomAlloc   include/psRandom.h      /^psRandom *psRandomAlloc(psRandomType type,$/;"        p
     2990psRandomAlloc   src/dataManip/psRandom.c        /^psRandom *psRandomAlloc(psRandomType type,$/;"        f
     2991psRandomAlloc   src/dataManip/psRandom.h        /^psRandom *psRandomAlloc(psRandomType type,$/;"        p
     2992psRandomGaussian        include/psRandom.h      /^psF64 psRandomGaussian(const psRandom *r);$/;"        p
     2993psRandomGaussian        src/dataManip/psRandom.c        /^psF64 psRandomGaussian(const psRandom *r)$/;" f
     2994psRandomGaussian        src/dataManip/psRandom.h        /^psF64 psRandomGaussian(const psRandom *r);$/;"        p
     2995psRandomPoisson include/psRandom.h      /^psF64 psRandomPoisson(const psRandom *r, psF64 mean);$/;"     p
     2996psRandomPoisson src/dataManip/psRandom.c        /^psF64 psRandomPoisson(const psRandom *r, psF64 mean)$/;"      f
     2997psRandomPoisson src/dataManip/psRandom.h        /^psF64 psRandomPoisson(const psRandom *r, psF64 mean);$/;"     p
     2998psRandomReset   include/psRandom.h      /^void psRandomReset(psRandom *rand,$/;"        p
     2999psRandomReset   src/dataManip/psRandom.c        /^void psRandomReset(psRandom *rand,$/;"        f
     3000psRandomReset   src/dataManip/psRandom.h        /^void psRandomReset(psRandom *rand,$/;"        p
     3001psRandomType    include/psRandom.h      /^} psRandomType;$/;"   t
     3002psRandomType    src/dataManip/psRandom.h        /^} psRandomType;$/;"   t
     3003psRandomUniform include/psRandom.h      /^psF64 psRandomUniform(const psRandom *r);$/;" p
     3004psRandomUniform src/dataManip/psRandom.c        /^psF64 psRandomUniform(const psRandom *r)$/;"  f
     3005psRandomUniform src/dataManip/psRandom.h        /^psF64 psRandomUniform(const psRandom *r);$/;" p
    27333006psReadout       include/psAstrometry.h  /^psReadout;$/;"        t
    27343007psReadout       src/astronomy/psAstrometry.h    /^psReadout;$/;"        t
     
    27423015psReferenceCount        include/psMemory.h      /^typedef psU64 psReferenceCount;$/;"   t
    27433016psReferenceCount        src/sysUtils/psMemory.h /^typedef psU64 psReferenceCount;$/;"   t
     3017psRegion        include/psImage.h       /^psRegion;$/;" t
     3018psRegion        src/image/psImage.h     /^psRegion;$/;" t
     3019psRegionAlloc   include/psImage.h       /^psRegion* psRegionAlloc($/;"  p
     3020psRegionAlloc   src/image/psImage.c     /^psRegion* psRegionAlloc(double x0,$/;"        f
     3021psRegionAlloc   src/image/psImage.h     /^psRegion* psRegionAlloc($/;"  p
     3022psRegionFromString      include/psImage.h       /^psRegion* psRegionFromString($/;"     p
     3023psRegionFromString      src/image/psImage.c     /^psRegion* psRegionFromString(char* region)$/;"        f
     3024psRegionFromString      src/image/psImage.h     /^psRegion* psRegionFromString($/;"     p
    27443025psS16   include/psType.h        /^typedef int16_t psS16;                 \/\/\/< 16-bit signed int$/;"  t
    27453026psS16   src/sysUtils/psType.h   /^typedef int16_t psS16;                 \/\/\/< 16-bit signed int$/;"  t
     
    27693050psSphereOffsetUnit      include/psCoord.h       /^} psSphereOffsetUnit;$/;"     t
    27703051psSphereOffsetUnit      src/astronomy/psCoord.h /^} psSphereOffsetUnit;$/;"     t
     3052psSpherePrecess include/psCoord.h       /^psSphere *psSpherePrecess(psSphere *coords,$/;"       p
     3053psSpherePrecess src/astronomy/psCoord.c /^psSphere *psSpherePrecess(psSphere *coords,$/;"       f
     3054psSpherePrecess src/astronomy/psCoord.h /^psSphere *psSpherePrecess(psSphere *coords,$/;"       p
    27713055psSphereSetOffset       include/psCoord.h       /^psSphere* psSphereSetOffset($/;"      p
    27723056psSphereSetOffset       src/astronomy/psCoord.c /^psSphere* psSphereSetOffset(const psSphere* restrict position,$/;"    f
     
    27753059psSphereTransform       src/astronomy/psCoord.h /^psSphereTransform;$/;"        t
    27763060psSphereTransformAlloc  include/psCoord.h       /^psSphereTransform* psSphereTransformAlloc($/;"        p
    2777 psSphereTransformAlloc  src/astronomy/psCoord.c /^psSphereTransform* psSphereTransformAlloc(double NPlat,$/;"   f
     3061psSphereTransformAlloc  src/astronomy/psCoord.c /^psSphereTransform* psSphereTransformAlloc(double alphaP,$/;"  f
    27783062psSphereTransformAlloc  src/astronomy/psCoord.h /^psSphereTransform* psSphereTransformAlloc($/;"        p
    27793063psSphereTransformApply  include/psCoord.h       /^psSphere* psSphereTransformApply($/;" p
     
    28003084psSpline1DAllocGeneric  src/dataManip/psFunctions.c     /^psSpline1D *psSpline1DAllocGeneric(const psVector *bounds,$/;"        f
    28013085psSpline1DAllocGeneric  src/dataManip/psFunctions.h     /^psSpline1D *psSpline1DAllocGeneric(const psVector *bounds,$/;"        p
    2802 psSpline1DEval  include/psFunctions.h   /^float psSpline1DEval(const psSpline1D *spline,$/;"    p
    2803 psSpline1DEval  src/dataManip/psFunctions.c     /^float psSpline1DEval(const psSpline1D *spline,$/;"    f
    2804 psSpline1DEval  src/dataManip/psFunctions.h     /^float psSpline1DEval(const psSpline1D *spline,$/;"    p
    2805 psSpline1DEvalVector    include/psFunctions.h   /^psVector *psSpline1DEvalVector(const psVector *x,$/;" p
    2806 psSpline1DEvalVector    src/dataManip/psFunctions.c     /^psVector *psSpline1DEvalVector(const psVector *x,$/;" f
    2807 psSpline1DEvalVector    src/dataManip/psFunctions.h     /^psVector *psSpline1DEvalVector(const psVector *x,$/;" p
     3086psSpline1DEval  include/psFunctions.h   /^float psSpline1DEval($/;"     p
     3087psSpline1DEval  src/dataManip/psFunctions.c     /^float psSpline1DEval($/;"     f
     3088psSpline1DEval  src/dataManip/psFunctions.h     /^float psSpline1DEval($/;"     p
     3089psSpline1DEvalVector    include/psFunctions.h   /^psVector *psSpline1DEvalVector($/;"   p
     3090psSpline1DEvalVector    src/dataManip/psFunctions.c     /^psVector *psSpline1DEvalVector($/;"   f
     3091psSpline1DEvalVector    src/dataManip/psFunctions.h     /^psVector *psSpline1DEvalVector($/;"   p
    28083092psStats include/psStats.h       /^psStats;$/;"  t
    28093093psStats src/dataManip/psStats.h /^psStats;$/;"  t
     
    28353119psTimeDelta     src/astronomy/psTime.c  /^psTime* psTimeDelta(const psTime *tai1, const psTime *tai2)$/;"       f
    28363120psTimeDelta     src/astronomy/psTime.h  /^psTime* psTimeDelta($/;"      p
     3121psTimeFinalize  include/psTime.h        /^psBool psTimeFinalize(void);$/;"      p
     3122psTimeFinalize  src/astronomy/psTime.c  /^bool psTimeFinalize(void)$/;" f
     3123psTimeFinalize  src/astronomy/psTime.h  /^psBool psTimeFinalize(void);$/;"      p
    28373124psTimeFromISOTime       include/psTime.h        /^psTime* psTimeFromISOTime($/;"        p
    28383125psTimeFromISOTime       src/astronomy/psTime.c  /^psTime* psTimeFromISOTime(const char *time)$/;"       f
     
    28623149psTimeGetUT1Delta       src/astronomy/psTime.c  /^double psTimeGetUT1Delta(const psTime *time)$/;"      f
    28633150psTimeGetUT1Delta       src/astronomy/psTime.h  /^double psTimeGetUT1Delta($/;" p
    2864 psTimeInit      src/astronomy/psTime.c  /^void psTimeInit(char *fileName)$/;"   f
     3151psTimeInit      include/psTime.h        /^psBool psTimeInit(const char *fileName);$/;"  p
     3152psTimeInit      src/astronomy/psTime.c  /^bool psTimeInit(const char *fileName)$/;"     f
     3153psTimeInit      src/astronomy/psTime.h  /^psBool psTimeInit(const char *fileName);$/;"  p
    28653154psTimeLeapseconds       include/psTime.h        /^psS64 psTimeLeapseconds($/;"  p
    28663155psTimeLeapseconds       src/astronomy/psTime.c  /^psS64 psTimeLeapseconds(const psTime *time1, const psTime *time2)$/;" f
     
    29513240psVectorCopy    src/collections/psVector.h      /^psVector* psVectorCopy($/;"   p
    29523241psVectorFFT     include/psVectorFFT.h   /^psVector* psVectorFFT($/;"    p
    2953 psVectorFFT     src/dataManip/psVectorFFT.c     /^psVector* psVectorFFT(psVector* out, const psVector* in, psFftDirection direction)$/;"        f
     3242psVectorFFT     src/dataManip/psVectorFFT.c     /^psVector* psVectorFFT(psVector* out, const psVector* in, psFFTFlags direction)$/;"    f
    29543243psVectorFFT     src/dataManip/psVectorFFT.h     /^psVector* psVectorFFT($/;"    p
    29553244psVectorFitPolynomial1D include/psMinimize.h    /^psPolynomial1D* psVectorFitPolynomial1D($/;"  p
     
    29923281psWarning       src/sysUtils/psLogMsg.c /^void psWarning(const char* name, const char* fmt, ...)$/;"    f
    29933282psWarning       src/sysUtils/psLogMsg.h /^void psWarning($/;"   p
     3283psfitsReadImageSection  src/fileUtils/psFits.h  /^psImage* psfitsReadImageSection($/;"  p
    29943284pushErrorStack  src/sysUtils/psError.c  /^static void pushErrorStack(psErr* err)$/;"    f       file:
    29953285pushErrorStack  src/sysUtils/psError.c  /^static void pushErrorStack(psErr* err);$/;"   p       file:
     
    30023292rawDataBuffer   include/psImage.h       /^    psPtr rawDataBuffer;$/;"  m       struct:psImage
    30033293rawDataBuffer   src/image/psImage.h     /^    psPtr rawDataBuffer;$/;"  m       struct:psImage
    3004 readSer7File    src/astronomy/psTime.c  /^static psImage* readSer7File($/;"     p       file:
    3005 readSer7File    src/astronomy/psTime.c  /^static psImage* readSer7File(const char *fileName)$/;"        f       file:
    3006 readTaiUtcFile  src/astronomy/psTime.c  /^static psImage* readTaiUtcFile($/;"   p       file:
    3007 readTaiUtcFile  src/astronomy/psTime.c  /^static psImage* readTaiUtcFile(const char *fileName)$/;"      f       file:
    30083294readoutFree     src/astronomy/psAstrometry.c    /^static void readoutFree(psReadout* readout)$/;"       f       file:
    30093295readouts        include/psAstrometry.h  /^    psArray* readouts;                 \/\/\/< readouts from the cell$/;"     m
     
    30723358sampleUQ        include/psStats.h       /^    double sampleUQ;            \/\/\/< upper quartile of sample$/;"  m
    30733359sampleUQ        src/dataManip/psStats.h /^    double sampleUQ;            \/\/\/< upper quartile of sample$/;"  m
    3074 sec     include/psTime.h        /^    psS64 sec;                          \/\/\/< Seconds since epoch, Jan 1, 1970.$/;" m       struct:psTime
    3075 sec     src/astronomy/psTime.h  /^    psS64 sec;                          \/\/\/< Seconds since epoch, Jan 1, 1970.$/;" m       struct:psTime
     3360searchTables    src/astronomy/psTime.c  /^psF64 searchTables(psF64 index, psU64 column, psLookupStatusType *status, char *metadataTableNames[], psU32 nTables)$/;"      f
     3361searchTables    src/astronomy/psTime.c  /^psF64 searchTables(psF64 index, psU64 column, psLookupStatusType *status, char *metadataTableNames[], psU32 nTables);$/;"     p       file:
     3362sec     include/psTime.h        /^    psS64 sec;          \/\/\/< Seconds since epoch, Jan 1, 1970.$/;" m       struct:psTime
     3363sec     src/astronomy/psTime.h  /^    psS64 sec;          \/\/\/< Seconds since epoch, Jan 1, 1970.$/;" m       struct:psTime
    30763364setData test/dataManip/tst_psMinimize04.c       /^double setData(double x)$/;"  f
    30773365setData test/dataManip/tst_psMinimize04_F32.c   /^float setData(float x)$/;"    f
     
    30803368siderealTime    include/psAstrometry.h  /^    const double siderealTime;         \/\/\/< local apparent sidereal time (radians)$/;"     m
    30813369siderealTime    src/astronomy/psAstrometry.h    /^    const double siderealTime;         \/\/\/< local apparent sidereal time (radians)$/;"     m
     3370sinDeltaP       include/psCoord.h       /^    double sinDeltaP;                 \/\/\/< Sine of target pole latitude in the source system$/;"   m
     3371sinDeltaP       src/astronomy/psCoord.h /^    double sinDeltaP;                 \/\/\/< Sine of target pole latitude in the source system$/;"   m
    30823372sinLat  include/psAstrometry.h  /^    const double sinLat;               \/\/\/< sine of geodetic latitude$/;"  m
    30833373sinLat  src/astronomy/psAstrometry.h    /^    const double sinLat;               \/\/\/< sine of geodetic latitude$/;"  m
    3084 sinPhi  include/psCoord.h       /^    double sinPhi;              \/\/\/< sin of North Pole lattitude$/;"       m
    3085 sinPhi  src/astronomy/psCoord.h /^    double sinPhi;              \/\/\/< sin of North Pole lattitude$/;"       m
    3086 size    include/psList.h        /^    psU32 size;                 \/\/\/< number of elements on list$/;"        m
    3087 size    src/collections/psList.h        /^    psU32 size;                 \/\/\/< number of elements on list$/;"        m
     3374size    include/psList.h        /^    psU32 size;                        \/\/\/< number of elements on list$/;" m
     3375size    src/collections/psList.h        /^    psU32 size;                        \/\/\/< number of elements on list$/;" m
    30883376slaAirmas       include/slalib.h        /^#define slaAirmas(/;" d
    30893377slaAirmas       src/astronomy/slalib.h  /^#define slaAirmas(/;" d
     
    33543642testStringCopy06        test/sysUtils/tst_psStringCopy.c        /^static psS32 testStringCopy06(void);$/;"      p       file:
    33553643testStruct      test/collections/tst_psArray.c  /^testStruct;$/;"       t       file:
     3644testStruct      test/collections/tst_psArray01.c        /^testStruct;$/;"       t       file:
     3645testStructCompare       test/collections/tst_psArray01.c        /^int testStructCompare(const void **a, const void **b)$/;"     f
    33563646testTrace00     test/sysUtils/tst_psTrace.c     /^static psS32 testTrace00(void)$/;"    f       file:
    33573647testTrace00     test/sysUtils/tst_psTrace.c     /^static psS32 testTrace00(void);$/;"   p       file:
     
    34153705toFPA   src/astronomy/psAstrometry.h    /^    psPlaneTransform* toFPA;           \/\/\/< transformation from chip to FPA coordinates$/;"        m       struct:psChip
    34163706toFPA   src/astronomy/psAstrometry.h    /^    psPlaneTransform* toFPA;           \/\/\/< transformations from cell to FPA coordinates$/;"       m
     3707toSky   include/psAstrometry.h  /^    psPlaneTransform* toSky;            \/\/\/< transformations from cell to tangent plane coordinates$/;"    m
     3708toSky   src/astronomy/psAstrometry.h    /^    psPlaneTransform* toSky;            \/\/\/< transformations from cell to tangent plane coordinates$/;"    m
    34173709toTP    include/psAstrometry.h  /^    psPlaneTransform* toTP;            \/\/\/< transformations from cell to tangent plane coordinates$/;"     m
    34183710toTP    src/astronomy/psAstrometry.h    /^    psPlaneTransform* toTP;            \/\/\/< transformations from cell to tangent plane coordinates$/;"     m
     
    34283720type    include/psImage.h       /^    const psType type;                 \/\/\/< Image data type and dimension.$/;"     m       struct:psImage
    34293721type    include/psMetadata.h    /^    psMetadataType type;               \/\/\/< Type of metadata item.$/;"     m       struct:psMetadataItem
     3722type    include/psRandom.h      /^    psRandomType type; \/\/\/< The type of RNG$/;"    m
    34303723type    include/psScalar.h      /^    psType type;                \/\/\/< Type of data.$/;"     m
    3431 type    include/psTime.h        /^    psTimeType type;                    \/\/\/< Type of time.$/;"     m       struct:psTime
     3724type    include/psTime.h        /^    psTimeType type;    \/\/\/< Type of time.$/;"     m       struct:psTime
    34323725type    include/psType.h        /^    psElemType type;            \/\/\/< Primitive type.$/;"   m
    34333726type    include/psVector.h      /^    psType type;                \/\/\/< Type of data.$/;"     m
    34343727type    src/astronomy/psCoord.h /^    psProjectionType type;      \/\/\/< Projection type$/;"   m
    34353728type    src/astronomy/psMetadata.h      /^    psMetadataType type;               \/\/\/< Type of metadata item.$/;"     m       struct:psMetadataItem
    3436 type    src/astronomy/psTime.h  /^    psTimeType type;                    \/\/\/< Type of time.$/;"     m       struct:psTime
     3729type    src/astronomy/psTime.h  /^    psTimeType type;    \/\/\/< Type of time.$/;"     m       struct:psTime
    34373730type    src/collections/psScalar.h      /^    psType type;                \/\/\/< Type of data.$/;"     m
    34383731type    src/collections/psVector.h      /^    psType type;                \/\/\/< Type of data.$/;"     m
    34393732type    src/dataManip/psFunctions.h     /^    psPolynomialType type;             \/\/\/< Polynomial type$/;"    m
     3733type    src/dataManip/psRandom.h        /^    psRandomType type; \/\/\/< The type of RNG$/;"    m
    34403734type    src/image/psImage.h     /^    const psType type;                 \/\/\/< Image data type and dimension.$/;"     m       struct:psImage
    34413735type    src/sysUtils/psType.h   /^    psElemType type;            \/\/\/< Primitive type.$/;"   m
    34423736uniform include/psStats.h       /^    psBool uniform;                      \/\/\/< Is it a uniform distribution?$/;"    m
    34433737uniform src/dataManip/psStats.h /^    psBool uniform;                      \/\/\/< Is it a uniform distribution?$/;"    m
    3444 usec    include/psTime.h        /^    psU32 usec;                         \/\/\/< Microseconds since last second.$/;"   m       struct:psTime
    3445 usec    src/astronomy/psTime.h  /^    psU32 usec;                         \/\/\/< Microseconds since last second.$/;"   m       struct:psTime
     3738usec    include/psTime.h        /^    psU32 usec;         \/\/\/< Microseconds since last second.$/;"   m       struct:psTime
     3739usec    src/astronomy/psTime.h  /^    psU32 usec;         \/\/\/< Microseconds since last second.$/;"   m       struct:psTime
    34463740userMemorySize  include/psMemory.h      /^    size_t userMemorySize;             \/\/\/< the size of the user-portion of the memory block$/;"   m       struct:psMemBlock
    34473741userMemorySize  src/sysUtils/psMemory.h /^    size_t userMemorySize;             \/\/\/< the size of the user-portion of the memory block$/;"   m       struct:psMemBlock
     3742validFrom       include/psLookupTable.h /^    psF64 validFrom;                   \/\/\/< Lower bound for rable read$/;" m
     3743validFrom       src/fileUtils/psLookupTable.h   /^    psF64 validFrom;                   \/\/\/< Lower bound for rable read$/;" m
     3744validTo include/psLookupTable.h /^    psF64 validTo;                     \/\/\/< Upper bound for table read$/;" m
     3745validTo src/fileUtils/psLookupTable.h   /^    psF64 validTo;                     \/\/\/< Upper bound for table read$/;" m
    34483746value   include/psMinimize.h    /^    float value;                       \/\/\/< Value of function at minimum$/;"       m
    34493747value   src/dataManip/psMinimize.h      /^    float value;                       \/\/\/< Value of function at minimum$/;"       m
    3450 values  src/fileUtils/psLookupTable.h   /^    psArray *values;                   \/\/\/< Array of dependent table values corresponding to index values.$/;"     m
    3451 vectorBinDisectF32      src/dataManip/psFunctions.c     /^static psS32 vectorBinDisectF32(float *bins,$/;"      f       file:
     3748values  include/psLookupTable.h /^    psArray *values;                   \/\/\/< Array of dependent table values corresponding to index values$/;"      m
     3749values  src/fileUtils/psLookupTable.h   /^    psArray *values;                   \/\/\/< Array of dependent table values corresponding to index values$/;"      m
    34523750vectorBinDisectF32      src/dataManip/psFunctions.c     /^static psS32 vectorBinDisectF32(float *bins,psS32 numBins,float x);$/;"       p       file:
    3453 vectorBinDisectS32      src/dataManip/psFunctions.c     /^static psS32 vectorBinDisectS32(psS32 *bins,$/;"      f       file:
    34543751vectorBinDisectS32      src/dataManip/psFunctions.c     /^static psS32 vectorBinDisectS32(psS32 *bins,psS32 numBins,psS32 x);$/;"       p       file:
    34553752vectorFree      src/collections/psVector.c      /^static void vectorFree(psVector* restrict psVec)$/;"  f       file:
     
    34703767x       src/astronomy/psCoord.h /^    psDPolynomial4D* x;         \/\/\/< 4D polynomial transform of X coordinates$/;"  m
    34713768x       test/collections/tst_psArray.c  /^    psS32 x;$/;"      m       file:
     3769x       test/collections/tst_psArray01.c        /^    psS32 x;$/;"      m       file:
    34723770x0      include/psAstrometry.h  /^    double x0;                         \/\/\/< X Position of 0,0 corner on focal plane$/;"    m
     3771x0      include/psImage.h       /^    double x0;                         \/\/\/< the first column of the region.$/;"    m
    34733772x0      src/astronomy/psAstrometry.h    /^    double x0;                         \/\/\/< X Position of 0,0 corner on focal plane$/;"    m
     3773x0      src/image/psImage.h     /^    double x0;                         \/\/\/< the first column of the region.$/;"    m
     3774x1      include/psImage.h       /^    double x1;                         \/\/\/< the last column of the region.$/;"     m
     3775x1      src/image/psImage.h     /^    double x1;                         \/\/\/< the last column of the region.$/;"     m
    34743776xErr    include/psCoord.h       /^    double xErr;                \/\/\/< Error in x position$/;"       m
    34753777xErr    src/astronomy/psCoord.h /^    double xErr;                \/\/\/< Error in x position$/;"       m
     
    34803782xScale  include/psAstrometry.h  /^    double xScale;                     \/\/\/< Scale of the grid in x direction$/;"   m
    34813783xScale  src/astronomy/psAstrometry.h    /^    double xScale;                     \/\/\/< Scale of the grid in x direction$/;"   m
    3482 xo      include/psCoord.h       /^    double xo;                  \/\/\/< First PT of Ares equiv lon$/;"        m
    3483 xo      src/astronomy/psCoord.h /^    double xo;                  \/\/\/< First PT of Ares equiv lon$/;"        m
    34843784y       include/psAstrometry.h  /^    double **y;                        \/\/\/< The grid of offsets in y$/;"   m
    34853785y       include/psCoord.h       /^    double y;                   \/\/\/< y position$/;"        m
     
    34903790y       src/astronomy/psCoord.h /^    psDPolynomial2D* y;         \/\/\/< 2D polynomial transform of Y coordinates$/;"  m
    34913791y       src/astronomy/psCoord.h /^    psDPolynomial4D* y;         \/\/\/< 4D polynomial transform of Y coordinates$/;"  m
     3792y       src/astronomy/psMetadataIO.c    /^    int y;$/;"        m       file:
    34923793y       test/collections/tst_psArray.c  /^    float y;$/;"      m       file:
     3794y       test/collections/tst_psArray01.c        /^    float y;$/;"      m       file:
    34933795y0      include/psAstrometry.h  /^    double y0;                         \/\/\/< Y Position of 0,0 corner on focal plane$/;"    m
     3796y0      include/psImage.h       /^    double y0;                         \/\/\/< the first row of the region.$/;"       m
    34943797y0      src/astronomy/psAstrometry.h    /^    double y0;                         \/\/\/< Y Position of 0,0 corner on focal plane$/;"    m
     3798y0      src/image/psImage.h     /^    double y0;                         \/\/\/< the first row of the region.$/;"       m
     3799y1      include/psImage.h       /^    double y1;                         \/\/\/< the last row of the region.$/;"        m
     3800y1      src/image/psImage.h     /^    double y1;                         \/\/\/< the last row of the region.$/;"        m
    34953801yErr    include/psCoord.h       /^    double yErr;                \/\/\/< Error in y position$/;"       m
    34963802yErr    src/astronomy/psCoord.h /^    double yErr;                \/\/\/< Error in y position$/;"       m
  • trunk/psLib/test/astronomy/Makefile

    r2521 r2681  
    33##  Makefile:   test/astronomy
    44##
    5 ##  $Revision: 1.23 $  $Name: not supported by cvs2svn $
    6 ##  $Date: 2004-11-30 00:28:36 $
     5##  $Revision: 1.24 $  $Name: not supported by cvs2svn $
     6##  $Date: 2004-12-10 02:50:15 $
    77##
    88##  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3131         tst_psMetadata_06 \
    3232         tst_psMetadata_07 \
    33          tst_psCoord \
    3433         tst_psAstrometry \
    3534         tst_psAstrometry01
     35#         tst_psCoord \
    3636
    3737OBJS = $(addprefix builddir/,$(addsuffix .o,$(TARGET)))
  • trunk/psLib/test/astronomy/tst_psMetadataIO.c

    r2607 r2681  
    1313*  @author  Ross Harman, MHPCC
    1414*
    15 *  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
    16 *  @date  $Date: 2004-12-03 23:19:07 $
     15*  @version $Revision: 1.6 $  $Name: not supported by cvs2svn $
     16*  @date  $Date: 2004-12-10 02:50:15 $
    1717*
    1818*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4141    psMetadataItem *entryChild = NULL;
    4242
    43     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    44     entryChild = psListGetCurrent(metadataItemList);
    45     while (entryChild != NULL) {
     43    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD);
     44
     45    while ( (entryChild=psListGetNext(iter)) != NULL) {
    4646        printMetadataItem(entryChild, spaces);
    47         entryChild = psListGetNext(metadataItemList);
    4847    }
     48
     49    psFree(iter);
    4950}
    5051
  • trunk/psLib/test/astronomy/tst_psMetadata_01.c

    r2607 r2681  
    1818*  @author  Ross Harman, MHPCC
    1919*
    20 *  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
    21 *  @date  $Date: 2004-12-03 23:19:07 $
     20*  @version $Revision: 1.17 $  $Name: not supported by cvs2svn $
     21*  @date  $Date: 2004-12-10 02:50:15 $
    2222*
    2323*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4646    psMetadataItem *entryChild = NULL;
    4747
    48     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    49     entryChild = psListGetCurrent(metadataItemList);
    50     while (entryChild != NULL) {
     48    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD);
     49
     50    while ( (entryChild=psListGetNext(iter)) != NULL) {
    5151        printMetadataItem(entryChild, spaces);
    52         entryChild = psListGetNext(metadataItemList);
    53     }
     52    }
     53
     54    psFree(iter);
     55
    5456}
    5557
  • trunk/psLib/test/astronomy/tst_psTime_01.c

    r2526 r2681  
    2323 *  @author  Ross Harman, MHPCC
    2424 *
    25  *  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
    26  *  @date  $Date: 2004-11-30 01:14:08 $
     25 *  @version $Revision: 1.17 $  $Name: not supported by cvs2svn $
     26 *  @date  $Date: 2004-12-10 02:50:15 $
    2727 *
    2828 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5555    // Test B - Print test time
    5656    printPositiveTestHeader(stdout,"psTime", "Print test time");
    57     printf("Test time: Seconds = %lld Microseconds = %u\n", testTime->sec, testTime->usec);
     57    printf("Test time: Seconds = %lld Microseconds = %u\n",
     58           (long long int)testTime->sec,
     59           testTime->usec);
    5860    printFooter(stdout, "psTime", "Print test time", true);
    5961
     
    7577    psTime *timeD = NULL;
    7678    timeD = psTimeFromISOTime(isoString);
    77     printf("psTime: Seconds = %lld Microseconds = %u\n", timeD->sec, timeD->usec);
     79    printf("psTime: Seconds = %lld Microseconds = %u\n",
     80           (long long int)timeD->sec,
     81           timeD->usec);
    7882    psFree(isoString);
    7983    psFree(timeD);
     
    9094    timeE = psTimeConvert(timeE, PS_TIME_UTC);
    9195    psFree(timeE);
    92     printf("psTime: Seconds = %lld Microseconds = %u\n", timeE->sec, timeE->usec);
     96    printf("psTime: Seconds = %lld Microseconds = %u\n",
     97           (long long int)timeE->sec,
     98           timeE->usec);
    9399    printFooter(stdout, "psTime", "Convert psTime time to UTC time", true);
    94100
     
    103109    timeF = psTimeConvert(timeF, PS_TIME_TAI);
    104110    psFree(timeF);
    105     printf("psTime: Seconds = %lld Microseconds = %u\n", timeF->sec, timeF->usec);
     111    printf("psTime: Seconds = %lld Microseconds = %u\n",
     112           (long long int)timeF->sec,
     113           timeF->usec);
    106114    printFooter(stdout, "psTime", "Convert UTC time to psTime", true);
    107115
     
    119127    psTime *timeH = NULL;
    120128    timeH = psTimeFromMJD(mjdTime);
    121     printf("psTime: Seconds = %lld Microseconds = %u\n", timeH->sec, timeH->usec);
     129    printf("psTime: Seconds = %lld Microseconds = %u\n",
     130           (long long int)timeH->sec,
     131           timeH->usec);
    122132    psFree(timeH);
    123133    printFooter(stdout, "psTime", "Convert MJD time to psTime", true);
     
    136146    psTime *timeJ = NULL;
    137147    timeJ = psTimeFromJD(jdTime);
    138     printf("psTime: Seconds = %lld Microseconds = %u\n", timeJ->sec, timeJ->usec);
     148    printf("psTime: Seconds = %lld Microseconds = %u\n",
     149           (long long int)timeJ->sec,
     150           timeJ->usec);
    139151    psFree(timeJ);
    140152    printFooter(stdout, "psTime", "Convert JD time to psTime", true);
     
    145157    struct timeval timevalTime;
    146158    timevalTime = psTimeToTimeval(testTime);
    147     printf("timevalTime: Seconds = %lld Microseconds = %lld\n", (psS64)timevalTime.tv_sec, (psS64)timevalTime.tv_usec);
     159    printf("timevalTime: Seconds = %lld Microseconds = %lld\n",
     160           (long long int)timevalTime.tv_sec,
     161           (long long int)timevalTime.tv_usec);
    148162    printFooter(stdout, "psTime", "Convert psTime to timeval time", true);
    149163
     
    153167    psTime *timeL = NULL;
    154168    timeL = psTimeFromTimeval(&timevalTime);
    155     printf("psTime: Seconds = %lld Microseconds = %u\n", timeL->sec, timeL->usec);
     169    printf("psTime: Seconds = %lld Microseconds = %u\n",
     170           (long long int)timeL->sec,
     171           timeL->usec);
    156172    psFree(timeL);
    157173    printFooter(stdout, "psTime", "Convert timeval time to psTime", true);
     
    176192    psTime *timeN = NULL;
    177193    timeN = psTimeFromTM(tmTime);
    178     printf("psTime: Seconds = %lld Microseconds = %u\n", timeN->sec, timeN->usec);
     194    printf("psTime: Seconds = %lld Microseconds = %u\n",
     195           (long long int)timeN->sec,
     196           timeN->usec);
    179197    psFree(timeN);
    180198    psFree(tmTime);
  • trunk/psLib/test/astronomy/tst_psTime_03.c

    r2392 r2681  
    1212 *  @author  Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.4 $  $Name: not supported by cvs2svn $
    15  *  @date  $Date: 2004-11-22 20:52:45 $
     14 *  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
     15 *  @date  $Date: 2004-12-10 02:50:15 $
    1616 *
    1717 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2323
    2424#define PRINT_TIME(TEXT,TIME) \
    25 printf("%s Seconds = %lld Microseconds = %u\n", TEXT, TIME->sec, TIME->usec);
     25printf("%s Seconds = %lld Microseconds = %u\n", TEXT, (long long int)TIME->sec, TIME->usec);
    2626
    2727psS32 main(psS32 argc, char* argv[])
  • trunk/psLib/test/collections/tst_psList.c

    r2273 r2681  
    66 *  @author Robert DeSonia, MHPCC
    77 *
    8  *  @version $Revision: 1.18 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2004-11-04 01:05:00 $
     8 *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2004-12-10 02:50:16 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    328328    psBool first = true;
    329329
    330     psListSetIterator(list,PS_LIST_HEAD);
    331     data = psListGetCurrent(list);
    332 
    333     while ( data != NULL ) {
     330    psListIterator* iter = psListIteratorAlloc(list,PS_LIST_HEAD);
     331
     332    while ( (data=(psS32*)psListGetNext(iter)) != NULL ) {
    334333        if (!first) {
    335334            printf(", %d",*(psS32*)data);
     
    338337            first = false;
    339338        }
    340         data = psListGetNext(list);
    341339    }
    342340
     
    422420    }
    423421
    424     //  5. which=PS_LIST_NEXT
    425     data = (psS32*)psListGet(list,PS_LIST_NEXT);
    426     if (data == NULL || *data != 1) {
    427         psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=PS_LIST_NEXT");
    428         return 7;
    429     }
    430 
    431422    //  6. which=PS_LIST_TAIL
    432423    data = (psS32*)psListGet(list,PS_LIST_TAIL);
     
    436427    }
    437428
    438     //  7. which=PS_LIST_PREV
    439     data = (psS32*)psListGet(list,PS_LIST_PREVIOUS);
    440     if (data == NULL || *data != 2) {
    441         psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=PS_LIST_PREV");
    442         return 9;
    443     }
    444 
    445429    psFree(list);
    446430
     
    452436    psList* list = NULL;
    453437    psS32* data;
     438    int items = 15;
    454439
    455440    /*
     
    472457    //  1. list is NULL.
    473458    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
    474     if (psListRemove(list,PS_LIST_HEAD,NULL)) {
     459    if (psListRemove(list,PS_LIST_HEAD)) {
    475460        psError(PS_ERR_UNKNOWN, true,"psListRemove didn't return false given a NULL list.");
    476461        return 1;
     
    480465    list = psListAlloc(NULL);
    481466
    482     for (psS32 lcv=0;lcv<15;lcv++) {
     467    for (psS32 lcv=0;lcv<items;lcv++) {
    483468        data = psAlloc(sizeof(psS32));
    484469        *data = lcv;
     
    490475    // 2. which is PS_LIST_HEAD (remove first element of list)
    491476    data = psListGet(list,PS_LIST_HEAD);
    492     if ( (! psListRemove(list,PS_LIST_HEAD,NULL)) ||
     477    if ( (! psListRemove(list,PS_LIST_HEAD)) ||
    493478            (psListGet(list,PS_LIST_HEAD) == data) ) {
    494479        printListInt(list);
     
    497482    }
    498483
    499     if (list->size != 14) {
    500         printListInt(list);
    501         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 14.");
     484    if (list->size != --items) {
     485        printListInt(list);
     486        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
    502487        return 1;
    503488    }
     
    505490    // 3. which is PS_LIST_TAIL (remove last element of list)
    506491    data = psListGet(list,PS_LIST_TAIL);
    507     if ( (! psListRemove(list,PS_LIST_TAIL,NULL)) ||
     492    if ( (! psListRemove(list,PS_LIST_TAIL)) ||
    508493            (psListGet(list,PS_LIST_TAIL) == data) ) {
    509494        printListInt(list);
     
    512497    }
    513498
    514     if (list->size != 13) {
    515         printListInt(list);
    516         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 13.");
    517         return 1;
    518     }
    519 
    520     // 4. which is PS_LIST_NEXT (element right of cursor [which should be head,tail, and neither])
    521     psListSetIterator(list,PS_LIST_HEAD);
    522     if (! psListRemove(list,PS_LIST_NEXT,NULL)) {
    523         printListInt(list);
    524         psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_NEXT @ PS_LIST_HEAD");
    525         return 1;
    526     }
    527 
    528     if (list->size != 12) {
    529         printListInt(list);
    530         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 12.");
    531         return 1;
    532     }
    533 
    534     psListSetIterator(list,PS_LIST_TAIL);
     499    if (list->size != --items) {
     500        printListInt(list);
     501        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
     502        return 1;
     503    }
     504
     505    // 6. psListRemoveData where data=NULL (error)
    535506    psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
    536     if (psListRemove(list,PS_LIST_NEXT,NULL)) {
    537         printListInt(list);
    538         psError(PS_ERR_UNKNOWN, true,"Removed something with PS_LIST_NEXT @ PS_LIST_TAIL");
    539         return 1;
    540     }
    541 
    542     data = psListGet(list,3);
    543     psListSetIterator(list,2);
    544     if ( (!psListRemove(list,PS_LIST_NEXT,NULL)) ||
    545             ( psListGet(list,3) == data) ) {
    546         printListInt(list);
    547         psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_NEXT @ which=2");
    548         return 1;
    549     }
    550 
    551     if (list->size != 11) {
    552         printListInt(list);
    553         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 11.");
    554         return 1;
    555     }
    556 
    557     // 5. which is PS_LIST_PREV (element left of cursor [which should be head,tail, and neither])
    558     psListSetIterator(list,PS_LIST_HEAD);
    559     psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
    560     if (psListRemove(list,PS_LIST_PREVIOUS,NULL)) {
    561         printListInt(list);
    562         psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_PREVIOUS @ PS_LIST_HEAD");
    563         return 1;
    564     }
    565 
    566     data = psListGet(list,9);
    567     psListSetIterator(list,PS_LIST_TAIL);
    568     if ( (!psListRemove(list,PS_LIST_PREVIOUS,NULL)) ||
    569             (psListGet(list,9) == data) ) {
    570         printListInt(list);
    571         psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_PREVIOUS @ PS_LIST_TAIL");
    572         return 1;
    573     }
    574 
    575     if (list->size != 10) {
    576         printListInt(list);
    577         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 10.");
    578         return 1;
    579     }
    580 
    581     data = psListGet(list,1);
    582     psListSetIterator(list,2);
    583     if ( (!psListRemove(list,PS_LIST_PREVIOUS,NULL)) ||
    584             ( psListGet(list,1) == data) ) {
    585         printListInt(list);
    586         psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_PREVIOUS @ which=2");
    587         return 1;
    588     }
    589 
    590     if (list->size != 9) {
    591         printListInt(list);
    592         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 9.");
    593         return 1;
    594     }
    595 
    596     // 6. which is PS_LIST_UNKNOWN and data=NULL (error)
    597     psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
    598     if (psListRemove(list,PS_LIST_UNKNOWN,NULL)) {
     507    if (psListRemoveData(list,NULL)) {
    599508        printListInt(list);
    600509        psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_UNKNOWN with data=NULL");
     
    604513    // 7. which is PS_LIST_UNKNOWN and data=[head,tail,other list items]
    605514    data = psListGet(list,PS_LIST_HEAD);
    606     if ( (! psListRemove(list,PS_LIST_UNKNOWN,data)) ||
     515    if ( (! psListRemoveData(list,data)) ||
    607516            (psListGet(list,PS_LIST_HEAD) == data) ) {
    608517        printListInt(list);
     
    611520    }
    612521
    613     if (list->size != 8) {
    614         printListInt(list);
    615         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 8.");
     522    if (list->size != --items) {
     523        printListInt(list);
     524        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
    616525        return 1;
    617526    }
    618527
    619528    data = psListGet(list,PS_LIST_TAIL);
    620     if ( (!psListRemove(list,PS_LIST_UNKNOWN,data)) ||
     529    if ( (!psListRemoveData(list,data)) ||
    621530            (psListGet(list,PS_LIST_TAIL) == data) ) {
    622531        printListInt(list);
     
    625534    }
    626535
    627     if (list->size != 7) {
    628         printListInt(list);
    629         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 7.");
    630         return 1;
    631     }
    632 
    633     psListSetIterator(list,PS_LIST_HEAD);
    634 
    635     data = psListGet(list,PS_LIST_NEXT);
    636     if ( (! psListRemove(list,PS_LIST_UNKNOWN,data))||
     536    if (list->size != --items) {
     537        printListInt(list);
     538        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
     539        return 1;
     540    }
     541
     542    data = psListGet(list,1);
     543    if ( (! psListRemoveData(list,data))||
    637544            (psListGet(list,1) == data) ) {
    638545        printListInt(list);
    639         psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_UNKNOWN @ which=1");
    640         return 1;
    641     }
    642 
    643     if (list->size != 6) {
    644         printListInt(list);
    645         psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to 6.");
    646         return 1;
    647     }
    648 
    649     // 8. which is PS_LIST_UNKNOWN and data!=NULL and data!=any element in list
     546        psError(PS_ERR_UNKNOWN, true,"Failed to remove data @ which=1");
     547        return 1;
     548    }
     549
     550    if (list->size != --items) {
     551        printListInt(list);
     552        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
     553        return 1;
     554    }
     555
     556    // 8. data!=NULL and data!=any element in list
    650557    psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
    651     if ( psListRemove(list,PS_LIST_UNKNOWN,data) ) {
     558    if ( psListRemoveData(list,data) ) {
    652559        printListInt(list);
    653560        psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_UNKNOWN with previously removed item");
     
    655562    }
    656563
     564    if (list->size != items) {
     565        printListInt(list);
     566        psError(PS_ERR_UNKNOWN, true,"size not %d, as expected.",items);
     567        return 1;
     568    }
     569
    657570    // clear out the list
    658     psListRemove(list,PS_LIST_HEAD,NULL);
    659     psListRemove(list,PS_LIST_HEAD,NULL);
    660     psListRemove(list,PS_LIST_HEAD,NULL);
    661     psListRemove(list,PS_LIST_HEAD,NULL);
    662     psListRemove(list,PS_LIST_HEAD,NULL);
     571    while (items > 1) {
     572        psListRemove(list,PS_LIST_HEAD);
     573        items--;
     574    }
    663575
    664576    data = psListGet(list,PS_LIST_HEAD);
    665     if ( (! psListRemove(list,PS_LIST_HEAD,data)) ||
     577    if ( (! psListRemove(list,PS_LIST_HEAD)) ||
    666578            (psListGet(list,PS_LIST_HEAD) == data) ) {
    667579        printListInt(list);
     
    844756    }
    845757
    846 
    847     // 1. output error message and do nothing if list=NULL
     758    psListIterator* iter = psListIteratorAlloc(list,PS_LIST_HEAD);
     759    if (iter == NULL) {
     760        psError(PS_ERR_UNKNOWN, true,"Failed to make an iterator.");
     761        return 22;
     762    }
     763
     764    // 1. output error message and do nothing if iterator=NULL
    848765    psLogMsg(__func__,PS_LOG_INFO,"Following should error with "
    849766             "'Unexpected null pointer'");
    850     psListSetIterator(NULL,PS_LIST_HEAD);
     767    psListIteratorSet(NULL,PS_LIST_HEAD);
     768    if (psListIteratorSet(NULL,PS_LIST_HEAD)) {
     769        psError(PS_ERR_UNKNOWN, true,"Success while setting position of a NULL iterator?");
     770        return 23;
     771    }
     772
    851773
    852774    // 3. set list.cursor to list.tail if where=PS_LIST_TAIL
    853     psListSetIterator(list,PS_LIST_TAIL);
    854     if (*(psS32*)psListGetCurrent(list) != 14) {
     775
     776    if (!psListIteratorSet(iter,PS_LIST_TAIL) ||
     777            *(psS32*)iter->cursor->data != 14 ||
     778            iter->index != 14) {
    855779        psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to tail.");
    856780        return 1;
     
    858782
    859783    // 2. set list.cursor to list.head if where=PS_LIST_HEAD
    860     psListSetIterator(list,PS_LIST_HEAD);
    861     if (*(psS32*)psListGetCurrent(list) != 0) {
     784    if (!psListIteratorSet(iter,PS_LIST_HEAD) ||
     785            *(psS32*)iter->cursor->data != 0 ||
     786            iter->index != 0) {
    862787        psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to head.");
    863788        return 2;
    864789    }
    865790
    866     // 4. set list.cursor to list.cursor->next if where=PS_LIST_NEXT
    867     psListSetIterator(list,PS_LIST_NEXT);
    868     if (*(psS32*)psListGetCurrent(list) != 1) {
    869         psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to next.");
    870         return 3;
    871     }
    872     psListSetIterator(list,PS_LIST_NEXT);
    873     if (*(psS32*)psListGetCurrent(list) != 2) {
    874         psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to next twice.");
    875         return 4;
    876     }
    877 
    878     // 5. set list.cursor to list.cursor->prev if where=PS_LIST_PREV
    879     psListSetIterator(list,PS_LIST_PREVIOUS);
    880     if (*(psS32*)psListGetCurrent(list) != 1) {
    881         psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to previous.");
    882         return 5;
    883     }
    884     psListSetIterator(list,PS_LIST_PREVIOUS);
    885     if (*(psS32*)psListGetCurrent(list) != 0) {
    886         psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to previous twice.");
    887         return 6;
    888     }
    889 
    890     // 6. leave list.cursor untouched if where=PS_LIST_UNKNOWN or PS_LIST_CURRENT
    891     psListSetIterator(list,PS_LIST_NEXT);   // move off of head (works according to above)
    892     psLogMsg(__func__,PS_LOG_INFO,"Following should error with 'Can't move to an unknown position.'");
    893     psListSetIterator(list,PS_LIST_UNKNOWN);
    894     if (*(psS32*)psListGetCurrent(list) != 1) {
    895         psError(PS_ERR_UNKNOWN, true,"PS_LIST_UNKNOWN moved cursor.");
    896         return 7;
    897     }
    898     psListSetIterator(list,PS_LIST_CURRENT);
    899     if (*(psS32*)psListGetCurrent(list) != 1) {
    900         psError(PS_ERR_UNKNOWN, true,"PS_LIST_CURRENT moved cursor.");
     791    // test psListGetPrevious/Next
     792    if (*(psS32*)psListGetNext(iter) != 0) {
     793        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
    901794        return 8;
    902795    }
    903 
    904     // test psListGetPrevious/Next
    905     if (*(psS32*)psListGetNext(list) != 2) {
     796    if (*(psS32*)psListGetNext(iter) != 1) {
    906797        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
    907798        return 9;
    908799    }
    909     if (*(psS32*)psListGetNext(list) != 3) {
     800    if (*(psS32*)psListGetNext(iter) != 2) {
    910801        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
    911802        return 10;
    912803    }
    913     if (*(psS32*)psListGetPrevious(list) != 2) {
     804
     805    if (*(psS32*)psListGetPrevious(iter) != 3) {
    914806        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous.");
    915807        return 11;
    916808    }
    917     if (*(psS32*)psListGetPrevious(list) != 1) {
     809    if (*(psS32*)psListGetPrevious(iter) != 2) {
    918810        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous.");
    919811        return 12;
    920812    }
    921     if (*(psS32*)psListGetPrevious(list) != 0) {
     813    if (*(psS32*)psListGetPrevious(iter) != 1) {
    922814        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous..");
    923815        return 13;
    924816    }
    925     if (psListGetPrevious(list) != NULL) {
     817    if (*(psS32*)psListGetPrevious(iter) != 0) {
     818        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous..");
     819        return 14;
     820    }
     821    if (psListGetPrevious(iter) != NULL) {
    926822        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious moved cursor beyond head.");
    927         return 14;
    928     }
    929 
    930     psListSetIterator(list,PS_LIST_TAIL); // works according to an above test
    931     if (psListGetNext(list) != NULL) {
     823        return 15;
     824    }
     825
     826    psListIteratorSet(iter,PS_LIST_TAIL); // works according to an above test
     827    if (*(psS32*)psListGetNext(iter) != 14) {
    932828        psError(PS_ERR_UNKNOWN, true,"psListGetNext moved cursor beyond tail.");
    933         return 15;
     829        return 16;
     830    }
     831    if (psListGetNext(iter) != NULL) {
     832        psError(PS_ERR_UNKNOWN, true,"psListGetNext moved cursor beyond tail.");
     833        return 17;
    934834    }
    935835
     
    1001901{
    1002902    psList* list;
     903    psListIterator* iter;
     904    float* fValue;
     905    psU32* uValue;
    1003906
    1004907    list = psListAlloc(NULL);
     
    1017920
    1018921    printf("original list = [");
    1019     for (float* iter = psListGet(list,PS_LIST_HEAD);
    1020             iter != NULL;
    1021             iter = psListGet(list,PS_LIST_NEXT)) {
    1022         printf(" %.1f",*iter);
     922    iter = psListIteratorAlloc(list,PS_LIST_HEAD);
     923    while( (fValue=psListGetNext(iter)) != NULL ) {
     924        printf(" %.1f",*fValue);
    1023925    }
    1024926    printf(" ]\n");
     
    1027929
    1028930    printf("sorted list = [");
    1029     for (float* iter = psListGet(list,PS_LIST_HEAD);
    1030             iter != NULL;
    1031             iter = psListGet(list,PS_LIST_NEXT)) {
    1032         printf(" %.1f",*iter);
     931    psListIteratorSet(iter,PS_LIST_HEAD);
     932    while( (fValue=psListGetNext(iter)) != NULL ) {
     933        printf(" %.1f",*fValue);
    1033934    }
    1034935    printf(" ]\n");
    1035936
    1036     float* prevValue = psListGet(list,PS_LIST_HEAD);
    1037     for (float* iter = psListGet(list,PS_LIST_NEXT);
    1038             iter != NULL;
    1039             iter = psListGet(list,PS_LIST_NEXT)) {
    1040         if (*prevValue > *iter) {
     937    psListIteratorSet(iter,PS_LIST_HEAD);
     938    float* prevFValue = psListGetNext(iter);
     939    while( (fValue=psListGetNext(iter)) != NULL ) {
     940        if (*prevFValue > *fValue) {
    1041941            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
    1042942            return 1;
     
    1047947
    1048948    printf("descending sort list = [");
    1049     for (float* iter = psListGet(list,PS_LIST_HEAD);
    1050             iter != NULL;
    1051             iter = psListGet(list,PS_LIST_NEXT)) {
    1052         printf(" %.1f",*iter);
     949    psListIteratorSet(iter,PS_LIST_HEAD);
     950    while( (fValue=psListGetNext(iter)) != NULL ) {
     951        printf(" %.1f",*fValue);
    1053952    }
    1054953    printf(" ]\n");
    1055954
    1056     prevValue = psListGet(list,PS_LIST_HEAD);
    1057     for (float* iter = psListGet(list,PS_LIST_NEXT);
    1058             iter != NULL;
    1059             iter = psListGet(list,PS_LIST_NEXT)) {
    1060         if (*prevValue < *iter) {
     955    psListIteratorSet(iter,PS_LIST_HEAD);
     956    prevFValue = psListGetNext(iter);
     957    while( (fValue=psListGetNext(iter)) != NULL ) {
     958        if (*prevFValue < *fValue) {
    1061959            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
    1062             return 1;
     960            return 2;
    1063961        }
    1064962    }
     
    1083981
    1084982    printf("original list = [");
    1085     for (psU32* iter = psListGet(list,PS_LIST_HEAD);
    1086             iter != NULL;
    1087             iter = psListGet(list,PS_LIST_NEXT)) {
    1088         printf(" %d",*iter);
     983    psListIteratorSet(iter,PS_LIST_HEAD);
     984    while( (uValue=psListGetNext(iter)) != NULL ) {
     985        printf(" %d",*uValue);
    1089986    }
    1090987    printf(" ]\n");
     
    1093990
    1094991    printf("sorted list = [");
    1095     for (psU32* iter = psListGet(list,PS_LIST_HEAD);
    1096             iter != NULL;
    1097             iter = psListGet(list,PS_LIST_NEXT)) {
    1098         printf(" %d",*iter);
     992    psListIteratorSet(iter,PS_LIST_HEAD);
     993    while( (uValue=psListGetNext(iter)) != NULL ) {
     994        printf(" %d",*uValue);
    1099995    }
    1100996    printf(" ]\n");
    1101997
    1102     psU32* prev = psListGet(list,PS_LIST_HEAD);
    1103     for (psU32* iter = psListGet(list,PS_LIST_NEXT);
    1104             iter != NULL;
    1105             iter = psListGet(list,PS_LIST_NEXT)) {
    1106         if (*prev > *iter) {
     998    psListIteratorSet(iter,PS_LIST_HEAD);
     999    psU32* prevUValue = psListGetNext(iter);
     1000    while( (uValue=psListGetNext(iter)) != NULL ) {
     1001        if (*prevUValue < *uValue) {
    11071002            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
    1108             return 1;
     1003            return 3;
    11091004        }
    11101005    }
     
    11131008
    11141009    printf("descending sort list = [");
    1115     for (psU32* iter = psListGet(list,PS_LIST_HEAD);
    1116             iter != NULL;
    1117             iter = psListGet(list,PS_LIST_NEXT)) {
    1118         printf(" %d",*iter);
     1010    psListIteratorSet(iter,PS_LIST_HEAD);
     1011    while( (uValue=psListGetNext(iter)) != NULL ) {
     1012        printf(" %d",*uValue);
    11191013    }
    11201014    printf(" ]\n");
    11211015
    1122     prev = psListGet(list,PS_LIST_HEAD);
    1123     for (psU32* iter = psListGet(list,PS_LIST_NEXT);
    1124             iter != NULL;
    1125             iter = psListGet(list,PS_LIST_NEXT)) {
    1126         if (*prev < *iter) {
     1016    psListIteratorSet(iter,PS_LIST_HEAD);
     1017    prevUValue = psListGetNext(iter);
     1018    while( (uValue=psListGetNext(iter)) != NULL ) {
     1019        if (*prevUValue < *uValue) {
    11271020            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
    1128             return 1;
    1129         }
    1130     }
    1131 
    1132     psFree(list);
    1133 
     1021            return 4;
     1022        }
     1023    }
     1024
     1025    psFree(list);
    11341026
    11351027    return 0;
  • trunk/psLib/test/collections/tst_psMetadataIO.c

    r2607 r2681  
    1313*  @author  Ross Harman, MHPCC
    1414*
    15 *  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
    16 *  @date  $Date: 2004-12-03 23:19:07 $
     15*  @version $Revision: 1.6 $  $Name: not supported by cvs2svn $
     16*  @date  $Date: 2004-12-10 02:50:15 $
    1717*
    1818*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4141    psMetadataItem *entryChild = NULL;
    4242
    43     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    44     entryChild = psListGetCurrent(metadataItemList);
    45     while (entryChild != NULL) {
     43    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD);
     44
     45    while ( (entryChild=psListGetNext(iter)) != NULL) {
    4646        printMetadataItem(entryChild, spaces);
    47         entryChild = psListGetNext(metadataItemList);
    4847    }
     48
     49    psFree(iter);
    4950}
    5051
  • trunk/psLib/test/collections/tst_psMetadata_01.c

    r2607 r2681  
    1818*  @author  Ross Harman, MHPCC
    1919*
    20 *  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
    21 *  @date  $Date: 2004-12-03 23:19:07 $
     20*  @version $Revision: 1.17 $  $Name: not supported by cvs2svn $
     21*  @date  $Date: 2004-12-10 02:50:15 $
    2222*
    2323*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4646    psMetadataItem *entryChild = NULL;
    4747
    48     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    49     entryChild = psListGetCurrent(metadataItemList);
    50     while (entryChild != NULL) {
     48    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD);
     49
     50    while ( (entryChild=psListGetNext(iter)) != NULL) {
    5151        printMetadataItem(entryChild, spaces);
    52         entryChild = psListGetNext(metadataItemList);
    53     }
     52    }
     53
     54    psFree(iter);
     55
    5456}
    5557
Note: See TracChangeset for help on using the changeset viewer.