1 /* 2 * Copyright (C) 2013, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef LATINIME_SPARSE_TABLE_H 18 #define LATINIME_SPARSE_TABLE_H 19 20 #include <cstdint> 21 22 #include "defines.h" 23 #include "suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer.h" 24 25 namespace latinime { 26 27 // Note that there is a corresponding implementation in SparseTable.java. 28 // TODO: Support multiple content buffers. 29 class SparseTable { 30 public: 31 SparseTable(BufferWithExtendableBuffer *const indexTableBuffer, 32 BufferWithExtendableBuffer *const contentTableBuffer, const int blockSize, 33 const int dataSize) 34 : mIndexTableBuffer(indexTableBuffer), mContentTableBuffer(contentTableBuffer), 35 mBlockSize(blockSize), mDataSize(dataSize) {} 36 37 bool contains(const int id) const; 38 39 uint32_t get(const int id) const; 40 41 bool set(const int id, const uint32_t value); 42 43 private: 44 DISALLOW_IMPLICIT_CONSTRUCTORS(SparseTable); 45 46 int getIndexFromContentTablePos(const int contentTablePos) const; 47 48 int getPosInIndexTable(const int id) const; 49 50 int getPosInContentTable(const int id, const int index) const; 51 52 static const int NOT_EXIST; 53 static const int INDEX_SIZE; 54 55 BufferWithExtendableBuffer *const mIndexTableBuffer; 56 BufferWithExtendableBuffer *const mContentTableBuffer; 57 const int mBlockSize; 58 const int mDataSize; 59 }; 60 } // namespace latinime 61 #endif /* LATINIME_SPARSE_TABLE_H */ 62