17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/*
27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License.
67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at
77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and
147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License.
157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */
167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifndef PINYINIME_INCLUDE_SYNC_H__
187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#define PINYINIME_INCLUDE_SYNC_H__
197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#define ___SYNC_ENABLED___
217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifdef ___SYNC_ENABLED___
237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include "userdict.h"
257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectnamespace ime_pinyin {
277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// Class for user dictionary synchronization
297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// This class is not thread safe
307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// Normal invoking flow will be
317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//   begin() ->
327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//   put_lemmas() x N ->
337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//   {
347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//     get_lemmas() ->
357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//     [ get_last_got_count() ] ->
367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//     clear_last_got() ->
377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//   } x N ->
387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project//   finish()
397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectclass Sync {
407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public:
417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  Sync();
427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  ~Sync();
437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  static const int kUserDictMaxLemmaCount = 5000;
457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  static const int kUserDictMaxLemmaSize = 200000;
467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  static const int kUserDictRatio = 20;
477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  bool begin(const char * filename);
497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Merge lemmas downloaded from sync server into local dictionary
517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // lemmas, lemmas string encoded in UTF16LE
527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // len, length of lemmas string
537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Return how many lemmas merged successfully
547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  int put_lemmas(char16 * lemmas, int len);
557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Get local new user lemmas into UTF16LE string
577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // str, buffer ptr to store new user lemmas
587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // size, size of buffer
597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Return length of returned buffer in measure of UTF16LE
607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  int get_lemmas(char16 * str, int size);
617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Return lemmas count in last get_lemmas()
637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  int get_last_got_count();
647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Return total lemmas count need get_lemmas()
667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  int get_total_count();
677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  // Clear lemmas got by recent get_lemmas()
697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void clear_last_got();
707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void finish();
727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  int get_capacity();
747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private:
767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  UserDict * userdict_;
777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  char * dictfile_;
787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  int last_count_;
797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project};
807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project}
827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif
847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif  // PINYINIME_INCLUDE_SYNC_H__
86