diff options
Diffstat (limited to 'PinyinIME/jni/share/sync.cpp')
-rw-r--r-- | PinyinIME/jni/share/sync.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/PinyinIME/jni/share/sync.cpp b/PinyinIME/jni/share/sync.cpp new file mode 100644 index 0000000..91e27b8 --- /dev/null +++ b/PinyinIME/jni/share/sync.cpp @@ -0,0 +1,112 @@ +/* + * 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 |