+++ /dev/null
-// strtab.h -- manage an ELF string table for gold -*- C++ -*-
-
-#ifndef GOLD_STRTAB_H
-#define GOLD_STRTAB_H
-
-#include <cstring>
-#include <string>
-
-namespace gold
-{
-
-// This class holds an ELF string table. We keep a reference count
-// for each string, which we use to determine which strings are
-// actually required at the end. When all operations are done, the
-// string table is finalized, which sets the offsets to use for each
-// string.
-
-class Strtab
-{
- public:
- Strtab();
-
- ~Strtab();
-
- Strtab_ref* add(const char*);
-
- Strtab_ref* add(const std::string& s)
- { return this->add(s.c_str()); }
-
- private:
- Strtab(const Strtab&);
- Strtab& operator=(const Strtab&);
-
- struct strtab_hash
- {
- std::size_t
- operator()(const char*p);
- };
-
- struct strtab_eq
- {
- bool
- operator()(const char* p1, const char* p2)
- { return strcmp(p1, p2) == 0; }
- };
-
- Unordered_map<const char*, Strtab_ref*, strtab_hash, strtab_eq,
- std::allocator<std::pair<const char* const, Strtab_ref*> >,
- true> strings_;
-};
-
-// Users of Strtab work with pointers to Strtab_ref structures. These
-// are allocated via new and should be deleted if the string is no
-// longer needed.
-
-class Strtab_ref
-{
- public:
- ~Strtab_ref();
-
- const char*
- str() const;
-
- private:
- Strtab_ref(const Strtab_ref&);
- Strtab_ref& operator=(const Strtab_ref&);
-
- int refs_;
-};
-
-} // End namespace gold.
-
-#endif // !defined(GOLD_STRTAB_H)