IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 24143


Ignore:
Timestamp:
May 12, 2009, 7:17:26 AM (17 years ago)
Author:
welling
Message:

Added PSARGUMENTS_INSTANTIATE_GENERICS and PSARGUMENTS_INSTANTIATE_THREADSARG convenience macros to simplify argument parsing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psArguments.h

    r13582 r24143  
    7878);
    7979
     80/** Macro to implement some generic command line arguments.  A package-
     81 *  specific routine called pkgnameVersionLong() is presumed to exist.
     82 */
     83#define PSARGUMENTS_INSTANTIATE_GENERICS( pkgname, config, argc, argv )   \
     84  { int N= psArgumentGet (argc, argv, "-version");                        \
     85    if (N) {                                                              \
     86      psString version;                                                   \
     87      version = pkgname ## VersionLong();                                 \
     88      fprintf (stdout, "%s\n", version);                                  \
     89      psFree (version);                                                   \
     90      version = psModulesVersionLong();                                   \
     91      fprintf (stdout, "%s\n", version);                                  \
     92      psFree (version);                                                   \
     93      version = psLibVersionLong();                                       \
     94      fprintf (stdout, "%s\n", version); psFree (version);                \
     95      exit (0);                                                           \
     96    }                                                                     \
     97    N = psArgumentGet(argc, argv, "-dumpconfig");                         \
     98    if (N) {                                                              \
     99      if (N<argc-1) {                                                     \
     100        psArgumentRemove(N, &argc, argv);                                 \
     101        psMetadataAddStr(config->arguments,                               \
     102                         PS_LIST_TAIL, "DUMP_CONFIG", PS_META_REPLACE,    \
     103                         "Filename for configuration dump", argv[N]);     \
     104        psArgumentRemove(N, &argc, argv);                                 \
     105      }                                                                   \
     106      else {                                                              \
     107        fprintf(stderr,"-dumpconfig requires a filename argument\n");     \
     108        exit(-1);                                                         \
     109      }                                                                   \
     110    }                                                                     \
     111  }
     112
     113/** Macro to implement handling of '-threads' argument.  A package-
     114 *  specific routine called pkgnameSetThreads(int nThreads) is
     115 *  presumed to exist.
     116 */
     117#define PSARGUMENTS_INSTANTIATE_THREADSARG( pkgname, config, argc, argv )   \
     118  { int N= psArgumentGet(argc, argv, "-threads");                           \
     119    if (N) {                                                                \
     120      psArgumentRemove(N, &argc, argv);                                     \
     121      int nThreads = atoi(argv[N]);                                         \
     122      psMetadataAddS32(config->arguments, PS_LIST_TAIL, "NTHREADS", 0, "number of "#pkgname" threads", nThreads); \
     123      psArgumentRemove(N, &argc, argv);                                     \
     124      psThreadPoolInit (nThreads);                                          \
     125    }                                                                       \
     126    pkgname ## SetThreads();                                                \
     127  }
     128
     129
    80130/// @}
    81131#endif // #ifndef PS_ARGUMENTS_H
Note: See TracChangeset for help on using the changeset viewer.