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/pmFPAfileIO.c

    r16344 r16355  
    912912}
    913913
    914 // set the state of the specified pmFPAfile to active (state == true) or inactive
     914
     915// set the state of the specified pmFPAfile(s) to active (state == true) or inactive
    915916// if name is NULL, set the state for all pmFPAfiles
    916 bool pmFPAfileActivate (psMetadata *files, bool state, const char *name)
     917bool pmFPAfileActivate(psMetadata *files, bool state, const char *name)
    917918{
    918919    PS_ASSERT_PTR_NON_NULL(files, false);
    919920
    920     // Do this as an iteration rather than a lookup, since we may want to turn on/off multiple files at once
    921     // (if there are multiple files defined with the same name).
    922 
    923     if (!name) {
    924         psMetadataItem *item = NULL;
    925         psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
    926         while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
    927             pmFPAfile *file = item->data.V;
    928             if (state) {
    929                 file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE);
    930             } else {
    931                 file->state |= PM_FPA_STATE_INACTIVE;
    932             }
    933         }
    934         psFree (iter);
    935         return true;
    936     }
    937 
    938     if (!psMetadataLookup(files, name)) {
    939         // We activated every example of that file that we could find.
    940         return true;
    941     }
    942 
    943     psString regex = NULL;              // Regular expression for psMetadataIteratorAlloc
    944     if (name) {
    945         psStringAppend(&regex, "^%s$", name);
    946     }
    947 
    948     int num = 0;                        // Number of files activated
    949     psMetadataItem *item = NULL;        // Item from iteration
    950     psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator
    951     while ((item = psMetadataGetAndIncrement(iter))) {
    952         pmFPAfile *file = item->data.V; // File of interest
     921    psArray *selected = pmFPAfileSelect(files, name);
     922    if (!selected) {
     923        psError(PS_ERR_UNKNOWN, false, "Unable to select files with name %s", name);
     924        return false;
     925    }
     926    for (int i = 0; i < selected->n; i++) {
     927        pmFPAfile *file = selected->data[i]; // File of interest
     928        if (!file) {
     929            continue;
     930        }
    953931        if (state) {
    954932            file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE);
     
    956934            file->state |= PM_FPA_STATE_INACTIVE;
    957935        }
    958         num++;
    959     }
    960     psFree(iter);
    961     psFree(regex);
     936    }
     937    psFree(selected);
    962938
    963939    return true;
     
    971947    PS_ASSERT_INT_NONNEGATIVE(num, NULL);
    972948
    973     psString regex = NULL;              // Regular expression for psMetadataIteratorAlloc
    974     psStringAppend(&regex, "^%s$", name);
    975 
    976     int i = 0;                          // Counter
    977     psMetadataItem *item = NULL;        // Item from iteration
    978     psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator
    979     psFree(regex);
    980     while ((item = psMetadataGetAndIncrement(iter))) {
    981         if (i++ == num) {
    982             pmFPAfile *file = item->data.V; // File of interest
    983             if (state) {
    984                 file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE);
    985             } else {
    986                 file->state |= PM_FPA_STATE_INACTIVE;
    987             }
    988             psFree(iter);
    989             return file;
    990         }
    991     }
    992     psFree(iter);
    993     return NULL;
    994 }
     949    pmFPAfile *file = pmFPAfileSelectSingle(files, name, num);
     950    if (!file) {
     951        psError(PS_ERR_UNKNOWN, false, "Unable to select instance %d of file %s", num, name);
     952        return NULL;
     953    }
     954    if (state) {
     955        file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE);
     956    } else {
     957        file->state |= PM_FPA_STATE_INACTIVE;
     958    }
     959
     960    return file;
     961}
Note: See TracChangeset for help on using the changeset viewer.