Exemple #1
0
word_t xdict_query(xdict_t xd, const char *key, int len)
{
	word_t value, value2;

	value = value2 = NULL;
	while (xd != NULL)
	{
		if (xd->xmode == SCWS_XDICT_MEM)
		{
			/* this is ThreadSafe, recommend. */
			value = (word_t) xtree_nget((xtree_t) xd->xdict, key, len, NULL);
		}
		else
		{
			/* the value malloced in lib-XDB. free required */
			value = (word_t) xdb_nget((xdb_t) xd->xdict, key, len, NULL);
			if (value != NULL) value->flag |= SCWS_WORD_MALLOCED;
		}
		xd = xd->next;

		// check value2
		if (value != NULL)
		{
			if (value2 == NULL)
			{
				if (_FLAG_BOTH(value))
					return value;
				value2 = value;
			}
			else
			{
				if (_FLAG_FULL(value2) && _FLAG_PART(value))
				{
					value2->flag |= SCWS_WORD_PART;
					if (_FLAG_MALLOC(value))
						free(value);
					return value2;
				}
				if (_FLAG_FULL(value) && _FLAG_PART(value2))
				{
					value->flag |= SCWS_WORD_PART;
					if (_FLAG_MALLOC(value2))
						free(value2);
					return value;
				}
				if (_FLAG_MALLOC(value))
					free(value);
			}
		}
	}
	return value2;
}
void *xdb_get(xdb_t x, const char *key, unsigned int *vlen)
{
	if (x == NULL || key == NULL)
		return NULL;
	return xdb_nget(x, key, strlen(key), vlen);
}