mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-05 01:20:51 +03:00

No warnings left on a '-Wall' build except for a single tautological compare in gen/asm-x86-32.h, which indeed seems like a bug.
73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
|
|
// Copyright (c) 1999-2011 by Digital Mars
|
|
// All Rights Reserved
|
|
// written by Walter Bright
|
|
// http://www.digitalmars.com
|
|
// License for redistribution is by either the Artistic License
|
|
// in artistic.txt, or the GNU General Public License in gnu.txt.
|
|
// See the included readme.txt for details.
|
|
|
|
|
|
#ifndef STRINGTABLE_H
|
|
#define STRINGTABLE_H
|
|
|
|
#if __SC__
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "root.h"
|
|
|
|
struct StringEntry;
|
|
|
|
// StringValue is a variable-length structure as indicated by the last array
|
|
// member with unspecified size. It has neither proper c'tors nor a factory
|
|
// method because the only thing which should be creating these is StringTable.
|
|
struct StringValue
|
|
{
|
|
union
|
|
{
|
|
void *ptrvalue;
|
|
char *string;
|
|
};
|
|
private:
|
|
unsigned length;
|
|
|
|
#ifndef IN_GCC
|
|
#if _MSC_VER
|
|
// Disable warning about nonstandard extension
|
|
#pragma warning (disable : 4200)
|
|
#endif
|
|
#endif
|
|
char lstring[];
|
|
|
|
public:
|
|
unsigned len() const { return length; }
|
|
const char *toDchars() const { return lstring; }
|
|
|
|
private:
|
|
friend struct StringEntry;
|
|
StringValue(); // not constructible
|
|
// This is more like a placement new c'tor
|
|
void ctor(const char *p, unsigned length);
|
|
};
|
|
|
|
struct StringTable
|
|
{
|
|
private:
|
|
void **table;
|
|
unsigned count;
|
|
unsigned tabledim;
|
|
|
|
public:
|
|
void init(unsigned size = 37);
|
|
~StringTable();
|
|
|
|
StringValue *lookup(const char *s, unsigned len);
|
|
StringValue *insert(const char *s, unsigned len);
|
|
StringValue *update(const char *s, unsigned len);
|
|
|
|
private:
|
|
void **search(const char *s, unsigned len);
|
|
};
|
|
|
|
#endif
|