Exemple #1
0
void UserRemovePhrase( ChewingData *pgdata, const uint16_t phoneSeq[], const char wordSeq[] )
{
	HASH_ITEM **prev = NULL;
	HASH_ITEM *item = NULL;

	assert( pgdata );
	assert( phoneSeq );
	assert( wordSeq );

	prev = HashFindHead( pgdata, phoneSeq );
	item = *prev;

	while ( item ) {
		if ( strcmp( item->data.wordSeq, wordSeq ) == 0 ) {
			/* Remove this phrase by removing */
			item->data.phoneSeq[0] = 0;
			item->data.wordSeq[0] = 0;
			HashModify( pgdata, item );

			*prev = item->next;
			FreeHashItem( item );

			return;
		}
		prev = &item->next;
		item = item->next;
	}
}
Exemple #2
0
int UserUpdatePhrase( ChewingData *pgdata, const uint16_t phoneSeq[], const char wordSeq[] )
{
	HASH_ITEM *pItem;
	UserPhraseData data;
	int len;

	len = ueStrLen( wordSeq );
	pItem = HashFindEntry( pgdata, phoneSeq, wordSeq );
	if ( ! pItem ) {
		if ( ! AlcUserPhraseSeq( &data, len, strlen( wordSeq ) ) ) {
			return USER_UPDATE_FAIL;
		}

		memcpy( data.phoneSeq, phoneSeq, len * sizeof( phoneSeq[ 0 ] ) );
		data.phoneSeq[ len ] = 0;
		strcpy( data.wordSeq, wordSeq );

		/* load initial freq */
		data.origfreq = LoadOriginalFreq( pgdata, phoneSeq, wordSeq, len );
		data.maxfreq = LoadMaxFreq( pgdata, phoneSeq, len );

		data.userfreq = data.origfreq;
		data.recentTime = pgdata->static_data.chewing_lifetime;
		pItem = HashInsert( pgdata, &data );
		LogUserPhrase( pgdata, phoneSeq, wordSeq, pItem->data.origfreq, pItem->data.maxfreq, pItem->data.userfreq, pItem->data.recentTime );
		HashModify( pgdata, pItem );
		return USER_UPDATE_INSERT;
	}
	else {
		pItem->data.maxfreq = LoadMaxFreq( pgdata, phoneSeq, len );
		pItem->data.userfreq = UpdateFreq(
			pItem->data.userfreq,
			pItem->data.maxfreq,
			pItem->data.origfreq,
			pgdata->static_data.chewing_lifetime - pItem->data.recentTime );
		pItem->data.recentTime = pgdata->static_data.chewing_lifetime;
		LogUserPhrase( pgdata, phoneSeq, wordSeq, pItem->data.origfreq, pItem->data.maxfreq, pItem->data.userfreq, pItem->data.recentTime );
		HashModify( pgdata, pItem );
		return USER_UPDATE_MODIFY;
	}
}