1 changed files with 0 additions and 73 deletions
@ -1,73 +0,0 @@ |
|||
// 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)
|
|||
Loading…
Reference in new issue