File:  [parser3project] / parser3 / src / include / pa_dictionary.h
Revision 1.22: download - view: text, annotated - select for diffs - revision graph
Tue Feb 7 22:00:33 2017 UTC (9 years, 5 months ago) by moko
Branches: MAIN
CVS tags: release_3_4_5, HEAD
Copyright year: 2015->2017

/** @file
	Parser: dictionary class decl.

	Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com)
	Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
*/

#ifndef PA_DICTIONARY_H
#define PA_DICTIONARY_H

#define IDENT_PA_DICTIONARY_H "$Id: pa_dictionary.h,v 1.22 2017/02/07 22:00:33 moko Exp $"

#include "pa_table.h"

/// simple dictionary, speding up lookups on contained two columned table
class Dictionary: public PA_Object {
public:

	struct Subst {
		const char *from; size_t from_length;
		const String* to;

		Subst(int): from(0) {}
		Subst(const char* afrom, const String* ato): from(afrom), to(ato) {
			from_length=strlen(afrom);
		}
		operator bool() { return from!=0; }
	};

	/// construct wrapper, grabbing first letters of first column into @b first
	Dictionary(Table& atable);

	/// construct simple dictionary within a single pair only
	Dictionary(const String& from, const String& to);

	/// find first row that contains string in first column which starts @b src
	Subst first_that_begins(const char* str) const;

private:
	Array<Subst> substs;

private:
	void append_subst(const String* from, const String* to, const char* exception=0);

	int starting_line_of[0x100]; int constructor_line;

public:
	size_t count() const { return substs.count(); }

	Subst get(size_t index) const { return substs.get(index); }

};

#endif

E-mail: