/*******************************************************************\

Module:

Author: Daniel Kroening, kroening@cs.cmu.edu

\*******************************************************************/

#include "options.h"

class configt
{
 public:
  struct ansi_ct
  {
    // for ANSI-C
    unsigned int_width;
    unsigned long_int_width;
    unsigned char_width;
    unsigned short_int_width;
    unsigned long_long_int_width;
    unsigned pointer_width;
    unsigned single_width;
    unsigned double_width;
    unsigned long_double_width;
    unsigned pointer_diff_width;
    unsigned word_size;
    unsigned wchar_t_width;
    
    bool char_is_unsigned;
    bool use_fixed_for_float;

    void set_16();
    void set_32();
    void set_64();
    
    typedef enum { NO_ENDIANESS, IS_LITTLE_ENDIAN, IS_BIG_ENDIAN } endianesst;
    endianesst endianess;

    std::list<std::string> defines;
    std::list<std::string> undefines;
    std::list<std::string> preprocessor_options;
    std::list<std::string> include_paths;

  } ansi_c;
  
  struct verilogt
  {
    std::list<std::string> include_paths;
  } verilog;

  std::string main;
  
  optionst options;
  
  void init();
};

extern configt config;
