From f2d9de3cb51a8f9c9da54785c1e92b8e127a54b4 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Wed, 8 Mar 2000 01:38:23 +0000 Subject: no message --- include/PropSet.h | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 include/PropSet.h (limited to 'include/PropSet.h') diff --git a/include/PropSet.h b/include/PropSet.h new file mode 100644 index 000000000..31da01f95 --- /dev/null +++ b/include/PropSet.h @@ -0,0 +1,180 @@ +// SciTE - Scintilla based Text Editor +// PropSet.h - a java style properties file module +// Copyright 1998-2000 by Neil Hodgson +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef PROPSET_H +#define PROPSET_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. + +inline char *StringDup(const char *s) { + if (!s) + return 0; + char *sNew = new char[strlen(s) + 1]; + if (sNew) + strcpy(sNew, s); + return sNew; +} + +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) { + 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; + } + return *this; + } + int value() { + if (s) + return atoi(s); + else + return 0; + } +}; + +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); + SString Get(const char *key); + int GetInt(const char *key, int defaultValue=0); + SString GetWild(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); +}; + +// 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