/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "../include/sync.h" #include #include #ifdef ___SYNC_ENABLED___ namespace ime_pinyin { Sync::Sync() : userdict_( NULL ), dictfile_( NULL ), last_count_( 0 ) { } Sync::~Sync() { } bool Sync::begin( const char* filename ) { if( userdict_ ) { finish(); } if( !filename ) { return false; } dictfile_ = strdup( filename ); if( !dictfile_ ) { return false; } userdict_ = new UserDict(); if( !userdict_ ) { free( dictfile_ ); dictfile_ = NULL; return false; } if( userdict_->load_dict( ( const char* )dictfile_, kUserDictIdStart, kUserDictIdEnd ) == false ) { delete userdict_; userdict_ = NULL; free( dictfile_ ); dictfile_ = NULL; return false; } userdict_->set_limit( kUserDictMaxLemmaCount, kUserDictMaxLemmaSize, kUserDictRatio ); return true; } int Sync::put_lemmas( char16* lemmas, int len ) { return userdict_->put_lemmas_no_sync_from_utf16le_string( lemmas, len ); } int Sync::get_lemmas( char16* str, int size ) { return userdict_->get_sync_lemmas_in_utf16le_string_from_beginning( str, size, &last_count_ ); } int Sync::get_last_got_count() { return last_count_; } int Sync::get_total_count() { return userdict_->get_sync_count(); } void Sync::clear_last_got() { if( last_count_ < 0 ) { return; } userdict_->clear_sync_lemmas( 0, last_count_ ); last_count_ = 0; } void Sync::finish() { if( userdict_ ) { userdict_->close_dict(); delete userdict_; userdict_ = NULL; free( dictfile_ ); dictfile_ = NULL; last_count_ = 0; } } int Sync::get_capacity() { UserDict::UserDictStat stat; userdict_->state( &stat ); return stat.limit_lemma_count - stat.lemma_count; } } #endif