class string_filter_noncasesensitive {
public:
	string_filter_noncasesensitive(const char * p_string,t_size p_string_len = infinite) {
		uStringLower(m_pattern,p_string,p_string_len);
	}

	bool test(const char * p_string,t_size p_string_len = infinite) const {
		::uStringLower(m_lowercasebuffer,p_string,p_string_len);
		t_size walk = 0;
		while(m_pattern[walk] != 0) {
			while(m_pattern[walk] == ' ') walk++;
			t_size delta = 0;
			while(m_pattern[walk+delta] != 0 && m_pattern[walk+delta] != ' ') delta++;
			if (delta > 0) {
				if (pfc::string_find_first_ex(m_lowercasebuffer,infinite,m_pattern+walk,delta) == infinite) return false;
			}
			walk += delta;
		}
		return true;
	}
private:
	mutable pfc::string8_fastalloc m_lowercasebuffer;
	pfc::string8 m_pattern;
};
