/* * 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. */ #ifndef PINYINIME_ANDPY_INCLUDE_LPICACHE_H__ #define PINYINIME_ANDPY_INCLUDE_LPICACHE_H__ #include <stdlib.h> #include "./searchutility.h" #include "./spellingtrie.h" namespace ime_pinyin { // Used to cache LmaPsbItem list for half spelling ids. class LpiCache { private: static LpiCache *instance_; static const int kMaxLpiCachePerId = 15; LmaPsbItem *lpi_cache_; uint16 *lpi_cache_len_; public: LpiCache(); ~LpiCache(); static LpiCache& get_instance(); // Test if the LPI list of the given splid has been cached. // If splid is a full spelling id, it returns false, because we only cache // list for half ids. bool is_cached(uint16 splid); // Put LPI list to cahce. If the length of the list, lpi_num, is longer than // the cache buffer. the list will be truncated, and function returns the // maximum length of the cache buffer. // Note: splid must be a half id, and lpi_items must be not NULL. The // caller of this function should guarantee this. size_t put_cache(uint16 splid, LmaPsbItem lpi_items[], size_t lpi_num); // Get the cached list for the given half id. // Return the length of the cached buffer. // Note: splid must be a half id, and lpi_items must be not NULL. The // caller of this function should guarantee this. size_t get_cache(uint16 splid, LmaPsbItem lpi_items[], size_t lpi_max); }; } // namespace #endif // PINYINIME_ANDPY_INCLUDE_LPICACHE_H__