X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..9c112555198f51fcec71106530cddba95a17f3dc:/contrib/src/stc/scintilla/include/PropSet.h diff --git a/contrib/src/stc/scintilla/include/PropSet.h b/contrib/src/stc/scintilla/include/PropSet.h index bc1599f38a..32aea8a0c7 100644 --- a/contrib/src/stc/scintilla/include/PropSet.h +++ b/contrib/src/stc/scintilla/include/PropSet.h @@ -1,180 +1,107 @@ -// SciTE - Scintilla based Text Editor -// PropSet.h - a java style properties file module -// Copyright 1998-2000 by Neil Hodgson +// Scintilla source code edit control +/** @file PropSet.h + ** A Java style properties file module. + **/ +// Copyright 1998-2002 by Neil Hodgson // The License.txt file describes the conditions under which this software may be distributed. #ifndef PROPSET_H #define PROPSET_H +#include "SString.h" bool EqualCaseInsensitive(const char *a, const char *b); -// Define another string class. -// While it would be 'better' to use std::string, that doubles the executable size. +bool isprefix(const char *target, const char *prefix); -inline char *StringDup(const char *s) { - if (!s) - return 0; - char *sNew = new char[strlen(s) + 1]; - if (sNew) - strcpy(sNew, s); - return sNew; -} +struct Property { + unsigned int hash; + char *key; + char *val; + Property *next; + Property() : hash(0), key(0), val(0), next(0) {} +}; -class SString { - char *s; -public: - SString() { - s = 0; - } - SString(const SString &source) { - s = StringDup(source.s); - } - SString(const char *s_) { - s = StringDup(s_); - } - SString(int i) { - char number[100]; - sprintf(number, "%0d", i); - //itoa(i, number, 10); - s = StringDup(number); - } - ~SString() { - delete []s; - s = 0; - } - SString &operator=(const SString &source) { - if (this != &source) { - delete []s; - s = StringDup(source.s); - } - return *this; - } - bool operator==(const SString &other) const { - if ((s == 0) && (other.s == 0)) - return true; - if ((s == 0) || (other.s == 0)) - return false; - return strcmp(s, other.s) == 0; - } - bool operator==(const char *sother) const { - if ((s == 0) && (sother == 0)) - return true; - if ((s == 0) || (sother == 0)) - return false; - return strcmp(s, sother) == 0; - } - const char *c_str() const { - if (s) - return s; - else - return ""; - } - int length() const { - if (s) - return strlen(s); - else - return 0; - } - char operator[](int i) const { - if (s) - return s[i]; - else - return '\0'; - } - SString &operator +=(const char *sother) { - int len = length(); - int lenOther = strlen(sother); - char *sNew = new char[len + lenOther + 1]; - if (sNew) { - if (s) - memcpy(sNew, s, len); - memcpy(sNew + len, sother, lenOther); - sNew[len + lenOther] = '\0'; - delete []s; - s = sNew; +/** + */ +class PropSet { +protected: + enum { hashRoots=31 }; + Property *props[hashRoots]; + Property *enumnext; + int enumhash; + static unsigned int HashString(const char *s, size_t len) { + unsigned int ret = 0; + while (len--) { + ret <<= 4; + ret ^= *s; + s++; } - return *this; - } - int value() const { - if (s) - return atoi(s); - else - return 0; + return ret; } -}; + static bool IncludesVar(const char *value, const char *key); -class PropSet { -private: - char **vals; - int size; - int used; public: PropSet *superPS; PropSet(); ~PropSet(); - void EnsureCanAddEntry(); - void Set(const char *key, const char *val); - void Set(char *keyval); + void Set(const char *key, const char *val, int lenKey=-1, int lenVal=-1); + void Set(const char *keyVal); + void Unset(const char *key, int lenKey=-1); + void SetMultiple(const char *s); SString Get(const char *key); + SString GetExpanded(const char *key); + SString Expand(const char *withVars, int maxExpands=100); int GetInt(const char *key, int defaultValue=0); SString GetWild(const char *keybase, const char *filename); - SString GetNewExpand(const char *keybase, const char *filename); + SString GetNewExpand(const char *keybase, const char *filename=""); void Clear(); - void ReadFromMemory(const char *data, int len); - void Read(const char *filename); -}; + char *ToString(); // Caller must delete[] the return value + bool GetFirst(char **key, char **val); + bool GetNext(char **key, char **val); -// This is a fixed length list of strings suitable for display in combo boxes -// as a memory of user entries -template -class EntryMemory { - SString entries[sz]; -public: - void Insert(SString s) { - for (int i=0;i0;j--) { - entries[j] = entries[j-1]; - } - entries[0] = s; - return; - } - } - for (int k=sz-1;k>0;k--) { - entries[k] = entries[k-1]; - } - entries[0] = s; - } - int Length() const { - int len = 0; - for (int i=0;i= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z')); +} + + +#ifdef _MSC_VER +// Visual C++ doesn't like the private copy idiom for disabling +// the default copy constructor and operator=, but it's fine. +#pragma warning(disable: 4511 4512) +#endif + #endif