• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/amule/wxWidgets-2.8.12/contrib/src/stc/scintilla/include/
1// Scintilla source code edit control
2/** @file PropSet.h
3 ** A Java style properties file module.
4 **/
5// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
6// The License.txt file describes the conditions under which this software may be distributed.
7
8#ifndef PROPSET_H
9#define PROPSET_H
10#include "SString.h"
11
12bool EqualCaseInsensitive(const char *a, const char *b);
13
14bool isprefix(const char *target, const char *prefix);
15
16struct Property {
17	unsigned int hash;
18	char *key;
19	char *val;
20	Property *next;
21	Property() : hash(0), key(0), val(0), next(0) {}
22};
23
24/**
25 */
26class PropSet {
27protected:
28	enum { hashRoots=31 };
29	Property *props[hashRoots];
30	Property *enumnext;
31	int enumhash;
32	static bool caseSensitiveFilenames;
33	static unsigned int HashString(const char *s, size_t len) {
34		unsigned int ret = 0;
35		while (len--) {
36			ret <<= 4;
37			ret ^= *s;
38			s++;
39		}
40		return ret;
41	}
42	static bool IncludesVar(const char *value, const char *key);
43
44public:
45	PropSet *superPS;
46	PropSet();
47	~PropSet();
48	void Set(const char *key, const char *val, int lenKey=-1, int lenVal=-1);
49	void Set(const char *keyVal);
50	void Unset(const char *key, int lenKey=-1);
51	void SetMultiple(const char *s);
52	SString Get(const char *key);
53	SString GetExpanded(const char *key);
54	SString Expand(const char *withVars, int maxExpands=100);
55	int GetInt(const char *key, int defaultValue=0);
56	SString GetWild(const char *keybase, const char *filename);
57	SString GetNewExpand(const char *keybase, const char *filename="");
58	void Clear();
59	char *ToString();	// Caller must delete[] the return value
60	bool GetFirst(char **key, char **val);
61	bool GetNext(char **key, char **val);
62	static void SetCaseSensitiveFilenames(bool caseSensitiveFilenames_) {
63		caseSensitiveFilenames = caseSensitiveFilenames_;
64	}
65
66private:
67	// copy-value semantics not implemented
68	PropSet(const PropSet &copy);
69	void operator=(const PropSet &assign);
70};
71
72/**
73 */
74class WordList {
75public:
76	// Each word contains at least one character - a empty word acts as sentinel at the end.
77	char **words;
78	char **wordsNoCase;
79	char *list;
80	int len;
81	bool onlyLineEnds;	///< Delimited by any white space or only line ends
82	bool sorted;
83	bool sortedNoCase;
84	int starts[256];
85	WordList(bool onlyLineEnds_ = false) :
86		words(0), wordsNoCase(0), list(0), len(0), onlyLineEnds(onlyLineEnds_),
87		sorted(false), sortedNoCase(false) {}
88	~WordList() { Clear(); }
89	operator bool() { return len ? true : false; }
90	char *operator[](int ind) { return words[ind]; }
91	void Clear();
92	void Set(const char *s);
93	char *Allocate(int size);
94	void SetFromAllocated();
95	bool InList(const char *s);
96	bool InListAbbreviated(const char *s, const char marker);
97	const char *GetNearestWord(const char *wordStart, int searchLen,
98		bool ignoreCase = false, SString wordCharacters="", int wordIndex = -1);
99	char *GetNearestWords(const char *wordStart, int searchLen,
100		bool ignoreCase=false, char otherSeparator='\0', bool exactLen=false);
101};
102
103inline bool IsAlphabetic(unsigned int ch) {
104	return ((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'));
105}
106
107
108#ifdef _MSC_VER
109// Visual C++ doesn't like the private copy idiom for disabling
110// the default copy constructor and operator=, but it's fine.
111#pragma warning(disable: 4511 4512)
112#endif
113
114#endif
115