#ifndef _UHDM_AST_SHARED_H_
#define _UHDM_AST_SHARED_H_ 1

#include "uhdmastreport.h"
#include <string>
#include <unordered_map>

YOSYS_NAMESPACE_BEGIN

class UhdmAstShared
{
  private:
    // Used for generating enum names
    unsigned enum_count = 0;

    // Used for generating port IDS
    unsigned port_count = 0;

    // Used for generating loop names
    unsigned loop_count = 0;

  public:
    // Generate the next enum ID (starting with 0)
    unsigned next_enum_id() { return enum_count++; }

    // Generate the next port ID (starting with 1)
    unsigned next_port_id() { return ++port_count; }

    // Generate the next loop ID (starting with 0)
    unsigned next_loop_id() { return loop_count++; }

    // Flag that determines whether debug info should be printed
    bool debug_flag = false;

    // Flag that determines whether we should ignore assert() statements
    bool no_assert = false;

    // Flag that determines whether errors should be fatal
    bool stop_on_error = true;

    // Top nodes of the design (modules, interfaces)
    std::unordered_map<std::string, AST::AstNode *> top_nodes;

    // UHDM node coverage report
    UhdmAstReport report;

    // Map from AST param nodes to their types (used for params with struct types)
    std::unordered_map<std::string, AST::AstNode *> param_types;

    AST::AstNode *current_top_node = nullptr;
};

YOSYS_NAMESPACE_END

#endif
