/* * 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 <assert.h> #include <string.h> #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