//===-- FormatCache.h ---------------------------------------------*- C++
//-*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLDB_DATAFORMATTERS_FORMATCACHE_H
#define LLDB_DATAFORMATTERS_FORMATCACHE_H

#include <map>
#include <mutex>

#include "lldb/Utility/ConstString.h"
#include "lldb/lldb-public.h"

namespace lldb_private {
class FormatCache {
private:
  struct Entry {
  private:
    bool m_format_cached : 1;
    bool m_summary_cached : 1;
    bool m_synthetic_cached : 1;

    lldb::TypeFormatImplSP m_format_sp;
    lldb::TypeSummaryImplSP m_summary_sp;
    lldb::SyntheticChildrenSP m_synthetic_sp;

  public:
    Entry();

    template<typename ImplSP> bool IsCached();
    bool IsFormatCached();
    bool IsSummaryCached();
    bool IsSyntheticCached();

    void Get(lldb::TypeFormatImplSP &);
    void Get(lldb::TypeSummaryImplSP &);
    void Get(lldb::SyntheticChildrenSP &);

    void Set(lldb::TypeFormatImplSP);
    void Set(lldb::TypeSummaryImplSP);
    void Set(lldb::SyntheticChildrenSP);
  };
  typedef std::map<ConstString, Entry> CacheMap;
  CacheMap m_map;
  std::recursive_mutex m_mutex;

  uint64_t m_cache_hits = 0;
  uint64_t m_cache_misses = 0;

  Entry &GetEntry(ConstString type);

public:
  FormatCache() = default;

  template <typename ImplSP> bool Get(ConstString type, ImplSP &format_impl_sp);
  void Set(ConstString type, lldb::TypeFormatImplSP &format_sp);
  void Set(ConstString type, lldb::TypeSummaryImplSP &summary_sp);
  void Set(ConstString type, lldb::SyntheticChildrenSP &synthetic_sp);

  void Clear();

  uint64_t GetCacheHits() { return m_cache_hits; }

  uint64_t GetCacheMisses() { return m_cache_misses; }
};

} // namespace lldb_private

#endif // LLDB_DATAFORMATTERS_FORMATCACHE_H
