// Copyright 2011 Google Inc. All Rights Reserved.

#ifndef ART_SRC_INTERN_TABLE_H_
#define ART_SRC_INTERN_TABLE_H_

#include "unordered_map.h"

#include "heap.h"
#include "object.h"

namespace art {

class InternTable {
 public:
  InternTable();
  ~InternTable();

  // intern a potentially new string
  String* Intern(int32_t utf16_length, const char* utf8_data);

  // register a String trusting that it is safe to intern.
  // used when reinitializing InternTable from an image.
  void Register(String* string);

  size_t Size() const;
  void VisitRoots(Heap::RootVistor* root_visitor, void* arg) const;

 private:
  typedef std::tr1::unordered_multimap<int32_t, String*> Table;
  Table intern_table_;
  Mutex* intern_table_lock_;
};

}  // namespace art

#endif  // ART_SRC_CLASS_LINKER_H_
