Blame include/Options.h

Packit 8a864e
// Copyright (c) 1996 James Clark, 1999 Matthias Clasen
Packit 8a864e
// See the file COPYING for copying permission.
Packit 8a864e
Packit 8a864e
#ifndef Options_INCLUDED
Packit 8a864e
#define Options_INCLUDED 1
Packit 8a864e
Packit 8a864e
#include "Boolean.h"
Packit 8a864e
#include "Vector.h"
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
namespace SP_NAMESPACE {
Packit 8a864e
#endif
Packit 8a864e
Packit 8a864e
// This is a mildly C++ified version of getopt().
Packit 8a864e
// (extended to include getopt_long() functionality.)
Packit 8a864e
// It never prints any message.
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
class LongOption {
Packit 8a864e
public:
Packit 8a864e
  const T *name;
Packit 8a864e
  T key;
Packit 8a864e
  T value;
Packit 8a864e
  bool hasArgument;
Packit 8a864e
};
Packit 8a864e
 
Packit 8a864e
template<class T>
Packit 8a864e
class Options {
Packit 8a864e
public:
Packit 8a864e
  Options(int argc, T *const *, const Vector<LongOption<T> > &);
Packit 8a864e
  // Returns false if there are no more options.
Packit 8a864e
  bool get(T &);
Packit 8a864e
  T *arg() const { return arg_; } // optarg
Packit 8a864e
  T opt() const { return opt_; }  // optopt
Packit 8a864e
  int ind() const { return ind_; } // optind
Packit 8a864e
  int longIndex() const { return optInd_; } // longindex
Packit 8a864e
private:
Packit 8a864e
  bool search(T);
Packit 8a864e
  bool searchLong(const T *);
Packit 8a864e
  T *const *argv_;
Packit 8a864e
  int argc_;
Packit 8a864e
  int ind_;
Packit 8a864e
  T opt_;
Packit 8a864e
  T *arg_;
Packit 8a864e
  int sp_;
Packit 8a864e
  Vector<LongOption<T> > opts_;
Packit 8a864e
  int optInd_;
Packit 8a864e
};
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
}
Packit 8a864e
#endif
Packit 8a864e
Packit 8a864e
#endif /* not Options_INCLUDED */
Packit 8a864e
Packit 8a864e
#ifdef SP_DEFINE_TEMPLATES
Packit 8a864e
#include "Options.cxx"
Packit 8a864e
#endif