File: StrUtils.cpp

package info (click to toggle)
storm-lang 0.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,004 kB
  • sloc: ansic: 261,462; cpp: 140,405; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (52 lines) | stat: -rw-r--r-- 1,027 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "stdafx.h"
#include "StrUtils.h"

namespace sql {

	static bool eq(const wchar a, const wchar b) {
		if (a == b)
			return true;
		if (b >= 'A' && b <= 'Z')
			if (a == b + ('a' - 'A'))
				return true;
		if (b >= 'a' && b <= 'z')
			if (a == b - ('a' - 'A'))
				return true;
		return false;
	}

	bool compareNoCase(Str *compare, const wchar *to) {
		const wchar *at;
		for (at = compare->c_str(); *at; at++, to++) {
			if (!eq(*at, *to))
				return false;
		}

		return *at == 0 && *to == 0;
	}

	bool compareNoCase(const wchar *compareBegin, const wchar *compareEnd, const wchar *to) {
		const wchar *at;
		for (at = compareBegin; at < compareEnd; at++, to++) {
			if (!eq(*at, *to))
				return false;
		}

		return at == compareEnd && *to == 0;
	}

	Str *toSQLStrLiteral(Str *x) {
		StrBuf *out = new (x) StrBuf();
		*out << S("'");

		for (Str::Iter i = x->begin(); i != x->end(); ++i) {
			if (i.v() == Char('\''))
				*out << S("''");
			else
				*out << i.v();
		}

		*out << S("'");
		return out->toS();
	}
}