IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6956


Ignore:
Timestamp:
Apr 21, 2006, 5:20:33 PM (20 years ago)
Author:
Paul Price
Message:

Removing extraneous functions that have been moved to psLib

Location:
trunk/psModules/src/pslib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/pslib/psAdditionals.c

    r6872 r6956  
    33#include "pslib.h"
    44#include "psAdditionals.h"
    5 
    6 psMetadata *pap_psMetadataCopy(psMetadata *out,
    7                                const psMetadata *in)
    8 {
    9     PS_ASSERT_PTR_NON_NULL(in,NULL);
    10     if (out ==  NULL) {
    11         out = psMetadataAlloc();
    12     }
    13     psMetadataItem *inItem = NULL;
    14     psMetadataIterator *iter = psMetadataIteratorAlloc(*(psMetadata**)&in, PS_LIST_HEAD, NULL);
    15     unsigned long numPointers = 0;      // Number of pointers we were forced to copy
    16     while ((inItem = psMetadataGetAndIncrement(iter))) {
    17         // Need to look for MULTI, which won't be picked up using the iterator.
    18         psMetadataItem *multiCheckItem = psMetadataLookup(in, inItem->name);
    19         unsigned int flag = PS_META_REPLACE; // Flag to indicate MULTI; otherwise, replace
    20         if (multiCheckItem->type == PS_DATA_METADATA_MULTI) {
    21             psTrace(__func__, 10, "MULTI: %s (%s)\n", inItem->name, inItem->comment);
    22             flag = PS_DATA_METADATA_MULTI;
    23         }
    24 
    25         psTrace(__func__, 5, "Copying %s (%s)...\n", inItem->name, inItem->comment);
    26 
    27         #define PS_METADATA_COPY_CASE(NAME,TYPE) \
    28     case PS_TYPE_##NAME: \
    29         if (! psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_TYPE_##NAME | flag, inItem->comment, \
    30                             inItem->data.TYPE)) { \
    31             psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", inItem->name, \
    32                               inItem->comment); \
    33         } \
    34         break;
    35 
    36         switch (inItem->type) {
    37             // Numerical types
    38             PS_METADATA_COPY_CASE(BOOL,B);
    39             PS_METADATA_COPY_CASE(S8,S8);
    40             PS_METADATA_COPY_CASE(S16,S16);
    41             PS_METADATA_COPY_CASE(S32,S32);
    42             PS_METADATA_COPY_CASE(U8,U8);
    43             PS_METADATA_COPY_CASE(U16,U16);
    44             PS_METADATA_COPY_CASE(U32,U32);
    45             PS_METADATA_COPY_CASE(F32,F32);
    46             PS_METADATA_COPY_CASE(F64,F64);
    47 
    48             // String: relying on the fact that this will copy the string, not point at it.
    49         case PS_DATA_STRING:
    50             psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_STRING | flag, inItem->comment,
    51                           inItem->data.V);
    52             break;
    53 
    54             // Metadata: copy the next level and stuff that in too
    55         case PS_DATA_METADATA: {
    56                 psMetadata *metadata = pap_psMetadataCopy(NULL, inItem->data.md);
    57                 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_METADATA | flag, inItem->comment,
    58                               metadata);
    59                 break;
    60             }
    61             // Other kinds of pointers
    62         default:
    63             numPointers++;
    64             psTrace(__func__, 10, "Copying a pointer in the metadata: %x\n", inItem->type);
    65             psMetadataAdd(out, PS_LIST_TAIL, inItem->name, inItem->type | flag, inItem->comment,
    66                           inItem->data.V);
    67             break;
    68         }
    69     }
    70     psFree(iter);
    71 
    72     if (numPointers > 0) {
    73         psLogMsg(__func__, PS_LOG_WARN, "Forced to copy %d pointers when copying metadata.  Updating the "
    74                  "copied psMetadata will affect the original!\n", numPointers);
    75     }
    76     return out;
    77 }
    785
    796// may need to extend this to change the keyname in the copy
     
    8714    psMetadataAddItem (out, item, PS_LIST_TAIL, PS_META_REPLACE);
    8815    return true;
    89 }
    90 
    91 void psMetadataPrint(psMetadata *md, int level)
    92 {
    93     psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); // Iterator
    94     psMetadataItem *item = NULL;        // Item from metadata
    95     while ((item = psMetadataGetAndIncrement(iter))) {
    96         // Indent...
    97         for (int i = 0; i < level; i++) {
    98             printf(" ");
    99         }
    100         printf("%s", item->name);
    101         if (item->comment && strlen(item->comment) > 0) {
    102             printf(" (%s)", item->comment);
    103         }
    104         printf(": ");
    105         switch (item->type) {
    106         case PS_DATA_STRING:
    107             printf("%s", (char*)item->data.V);
    108             break;
    109         case PS_DATA_BOOL:
    110             if (item->data.B) {
    111                 printf("True");
    112             } else {
    113                 printf("False");
    114             }
    115             break;
    116         case PS_DATA_S32:
    117             printf("%d", item->data.S32);
    118             break;
    119         case PS_DATA_F32:
    120             printf("%f", item->data.F32);
    121             break;
    122         case PS_DATA_F64:
    123             printf("%f", item->data.F64);
    124             break;
    125         case PS_DATA_METADATA:
    126             printf("\n");
    127             psMetadataPrint(item->data.V, level + 1);
    128             break;
    129         default:
    130             printf("\n");
    131             psError(PS_ERR_IO, false, "Non-printable metadata type: %x\n", item->type);
    132         }
    133         printf("\n");
    134     }
    135     psFree(iter);
    136 
    137     return;
    138 }
    139 
    140 // XXX: This should probably be implemented using strpbrk
    141 psList *psStringSplit(const char *string,
    142                       const char *splitters)
    143 {
    144     psList *values = psListAlloc(NULL); // The list of values to return
    145     if (string == NULL)
    146         return values;  // NULL string is not an error, just an empty list
    147 
    148     unsigned int length = strlen(string); // The length of the string
    149     unsigned int numSplitters = strlen(splitters); // Number of characters that might split
    150     unsigned int start = 0;             // The position of the start of a word
    151     for (int i = 1; i < length; i++) {
    152         bool split = false;             // Is this character a splitter?
    153         for (int j = 0; j < numSplitters && ! split; j++) {
    154             if (string[i] == splitters[j]) {
    155                 split = true;
    156             }
    157         }
    158         if (split) {
    159             if (i == start) {
    160                 // Some idiot put in two spaces, or two commas or something
    161                 start++;
    162             } else {
    163                 // We're at the end of the word
    164                 psString word = psStringNCopy(&string[start], i - start);
    165                 (void)psListAdd(values, PS_LIST_TAIL, word);
    166                 start = i + 1;
    167                 psFree(word);
    168             }
    169         }
    170     }
    171     if (start < length) {
    172         // Copy the last word
    173         psString word = psStringNCopy(&string[start], length - start);
    174         (void)psListAdd(values, PS_LIST_TAIL, word);
    175         psFree(word);
    176     }
    177 
    178     return values;
    17916}
    18017
  • trunk/psModules/src/pslib/psAdditionals.h

    r6872 r6956  
    77#include "pslib.h"
    88
    9 // Deep copy of metadata
    10 // Corrected version of MHPCC code in psLib at the moment
    11 psMetadata *pap_psMetadataCopy(psMetadata *out, // Target, to which the copy is made
    12                                const psMetadata *in // Source, from which the copy is made
    13                               );
    14 
    159// copy a metadata item from one psMetadata to another
    1610bool psMetadataItemTransfer (psMetadata *out, // Destination: copy is placed here
     
    1812                             char *key        // key to identify the metadata item
    1913                            );
    20 
    21 
    22 // Print out the metadata
    23 void psMetadataPrint(psMetadata *md,    // Metadata to print
    24                      int level          // Indent level
    25                     );
    26 
    27 // Split string on given characters
    28 psList *psStringSplit(const char *string, // String to split
    29                       const char *splitters // Characters on which to split
    30                      );
    3114
    3215// Split string on given characters
Note: See TracChangeset for help on using the changeset viewer.