/*  $Id$

    Part of the SWI-Prolog Semweb package

    Author:        Jan Wielemaker
    E-mail:        wielemak@science.uva.nl
    WWW:           http://www.swi-prolog.org
    Copyright (C): 2006, University of Amsterdam

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#ifndef ATOM_H_INCLUDED
#define ATOM_H_INCLUDED

#define MAX_LIKE_CHOICES	100	/* max *'s in like pattern */

#define STR_MATCH_CASE		0x0	/* Default: perfect match */
#define STR_MATCH_PLAIN		0x1	/* Same, also match qualifier */
#define	STR_MATCH_EXACT		0x2	/* case-insensitive */
#define	STR_MATCH_SUBSTRING	0x3	/* substring */
#define	STR_MATCH_WORD		0x4	/* whole word */
#define	STR_MATCH_PREFIX	0x5	/* prefix */
#define STR_MATCH_LIKE		0x6	/* SeRQL *like* match */
					/* MAX: 0x7 (3 bits in triple) */

typedef unsigned char charA;
typedef wchar_t       charW;

typedef struct text
{ const charA *a;
  const charW *w;
  size_t length;
} text;


typedef struct atom_info
{ atom_t	handle;
  text		text;
  int		resolved;
  int		rc;			/* TRUE if text atom */
} atom_info;


int	cmp_atoms(atom_t a1, atom_t a2);
int	cmp_atom_info(atom_info *a1, atom_t a2);
atom_t	first_atom(atom_t a, int match);
int	match_atoms(int how, atom_t search, atom_t label);
unsigned int atom_hash_case(atom_t a);
int	atom_lang_matches(atom_t lang, atom_t pattern);

#endif /*ATOM_H_INCLUDED*/