IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 7, 2008, 1:45:56 PM (18 years ago)
Author:
Paul Price
Message:

Adding functions pmFPAfileSelect and pmFPAfileSelectSingle to return ('select') particular files from the list. Re-implementing pmFPAfileActivate using these.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/camera/pmFPAfile.c

    r16343 r16355  
    482482  return ("NONE");
    483483}
     484
     485
     486psArray *pmFPAfileSelect(psMetadata *files, const char *name)
     487{
     488    PS_ASSERT_PTR_NON_NULL(files, NULL);
     489
     490    psList *list = psListAlloc(NULL);   // List of files selected
     491
     492    psString regex = NULL;              // Regular expression
     493    if (name) {
     494        psStringAppend(&regex, "^%s$", name);
     495    }
     496    psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator
     497    psFree(regex);
     498    psMetadataItem *item;               // Item from iteration
     499    while ((item = psMetadataGetAndIncrement(iter))) {
     500        pmFPAfile *file = item->data.V; // File of iterest
     501        psListAdd(list, PS_LIST_TAIL, file);
     502    }
     503    psFree(iter);
     504
     505    psArray *array = psListToArray(list); // Array generated from list
     506    psFree(list);
     507
     508    return array;
     509}
     510
     511pmFPAfile *pmFPAfileSelectSingle(psMetadata *files, const char *name, int num)
     512{
     513    PS_ASSERT_PTR_NON_NULL(files, NULL);
     514    PS_ASSERT_INT_NONNEGATIVE(num, NULL);
     515
     516    psString regex = NULL;              // Regular expression
     517    if (name) {
     518        psStringAppend(&regex, "^%s$", name);
     519    }
     520
     521    psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator
     522    psFree(regex);
     523    psMetadataItem *item;               // Item from iteration
     524    int i = 0;                          // Counter
     525    while ((item = psMetadataGetAndIncrement(iter))) {
     526        if (i++ == num) {
     527            return item->data.V;
     528        }
     529    }
     530    psFree(iter);
     531
     532    psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unable to find instance %d of file %s", num, name);
     533    return NULL;
     534}
Note: See TracChangeset for help on using the changeset viewer.