// see License.txt for copyright and terms of use

// Process command-line arguments.

#ifndef SQUASH_CMD_H
#define SQUASH_CMD_H

#include "oink_cmd.h"
#include "oink_file.h"          // File
#include <vector>
#include <string>
#include <set>
#include <map>

typedef std::map<std::string, std::string> str_map;
class SquashCmd : public virtual OinkCmd {
  public:
  std::string className;             // contains target class for squashing
  std::vector<std::string> includes; // contains user specified headers
  std::set<std::string> excludes;    // header blacklist
  std::set<std::string> virtuals;    // methods to keep virtual
  str_map memberRenames; // members to rename
  str_map pathSubstitutions; // Invalid paths
  // in case we are doing renames or anything else that requires a class
  // heirarchy, the class hiearachy is recorded here
  std::set<std::string> targetClasses; 
  std::string outparamFile;
  bool squash;
  bool rewriteDeclaration;

  SquashCmd();

  void readOneArg(int &argc, char **&argv);
  void printHelp();
  void initializeFromFlags();
};

#endif // SQUASH_CMD_H
