// Matt Wells, copyright Jan 2007

#ifndef GB_MATCHES2_H
#define GB_MATCHES2_H

#include <inttypes.h>
#include <cstring>

// use these routines for matching any of a list of substrings in the haystack.
// the Matches array is the list of substrings to match in the "haystack". this
// should be *very* fast.
class Needle {
public:
	Needle(const char *string, char id, char isSection)
		: m_string(string)
		, m_stringSize(strlen(string))
		, m_id(id)
		, m_isSection(isSection) {
	}

	const char *m_string;
	size_t  m_stringSize;
	char  m_id;
	// if m_isSection is true, getMatch() only matches if haystack 
	// ptr is < linkPos
	char  m_isSection; 
};

class NeedleMatch {
public:
	NeedleMatch()
		: m_count(0)
		, m_firstMatch(nullptr) {
	}

	int32_t m_count;
	char *m_firstMatch;
};

char *getMatches2(const Needle *needles, NeedleMatch *needlesMatch, int32_t numNeedles,
                  char *haystack, int32_t haystackSize, char *linkPos, bool *hadPreMatch);



#endif // GB_MATCHES2_H