#ifndef MXATOMID_H
#define MXATOMID_H

#include "mxtypes.h"
#include "mxatomidcounter.h"

enum LookupMode
{
  LookupMode_Exact = 0,
  LookupMode_LowerCase = 1,
  LookupMode_UpperCase = 2,
  LookupMode_LowerCase2 = 3
};

class MxAtomId
{
public:
  __declspec(dllexport) MxAtomId(const char *, LookupMode);
  __declspec(dllexport) MxAtomId &operator=(const MxAtomId &id);
  __declspec(dllexport) ~MxAtomId();

  MxAtomId()
  {
    this->m_internal = 0;
  }

  inline MxBool operator ==(const MxAtomId &other) const
  {
    return this->m_internal == other.m_internal;
  }

  void Clear();

  const char *GetInternal() const { return m_internal; }

private:
  MxAtomIdCounter* GetCounter(const char *, LookupMode);
  void Destroy();

  const char *m_internal;
};

#endif // MXATOMID_H
