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 /* 18 * !!!!! DO NOT EDIT THIS FILE !!!!! 19 * 20 * This file was generated from 21 * dictionary/structure/v4/content/sparse_table_dict_content.h 22 */ 23 24 #ifndef LATINIME_BACKWARD_V402_SPARSE_TABLE_DICT_CONTENT_H 25 #define LATINIME_BACKWARD_V402_SPARSE_TABLE_DICT_CONTENT_H 26 27 #include "defines.h" 28 #include "dictionary/structure/backward/v402/content/dict_content.h" 29 #include "dictionary/structure/backward/v402/ver4_dict_constants.h" 30 #include "dictionary/utils/buffer_with_extendable_buffer.h" 31 #include "dictionary/utils/dict_file_writing_utils.h" 32 #include "dictionary/utils/mmapped_buffer.h" 33 #include "dictionary/utils/sparse_table.h" 34 #include "utils/byte_array_view.h" 35 36 namespace latinime { 37 namespace backward { 38 namespace v402 { 39 40 // TODO: Support multiple contents. 41 class SparseTableDictContent : public DictContent { 42 public: SparseTableDictContent(const char * const dictPath,const char * const lookupTableFileName,const char * const addressTableFileName,const char * const contentFileName,const bool isUpdatable,const int sparseTableBlockSize,const int sparseTableDataSize)43 AK_FORCE_INLINE SparseTableDictContent(const char *const dictPath, 44 const char *const lookupTableFileName, const char *const addressTableFileName, 45 const char *const contentFileName, const bool isUpdatable, 46 const int sparseTableBlockSize, const int sparseTableDataSize) 47 : mLookupTableBuffer( 48 MmappedBuffer::openBuffer(dictPath, lookupTableFileName, isUpdatable)), 49 mAddressTableBuffer( 50 MmappedBuffer::openBuffer(dictPath, addressTableFileName, isUpdatable)), 51 mContentBuffer( 52 MmappedBuffer::openBuffer(dictPath, contentFileName, isUpdatable)), 53 mExpandableLookupTableBuffer( 54 mLookupTableBuffer ? mLookupTableBuffer->getReadWriteByteArrayView() : 55 ReadWriteByteArrayView(), 56 BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE), 57 mExpandableAddressTableBuffer( 58 mAddressTableBuffer ? mAddressTableBuffer->getReadWriteByteArrayView() : 59 ReadWriteByteArrayView(), 60 BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE), 61 mExpandableContentBuffer( 62 mContentBuffer ? mContentBuffer->getReadWriteByteArrayView() : 63 ReadWriteByteArrayView(), 64 BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE), 65 mAddressLookupTable(&mExpandableLookupTableBuffer, &mExpandableAddressTableBuffer, 66 sparseTableBlockSize, sparseTableDataSize), 67 mIsValid(mLookupTableBuffer && mAddressTableBuffer && mContentBuffer) {} 68 SparseTableDictContent(const int sparseTableBlockSize,const int sparseTableDataSize)69 SparseTableDictContent(const int sparseTableBlockSize, const int sparseTableDataSize) 70 : mLookupTableBuffer(), mAddressTableBuffer(), mContentBuffer(), 71 mExpandableLookupTableBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE), 72 mExpandableAddressTableBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE), 73 mExpandableContentBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE), 74 mAddressLookupTable(&mExpandableLookupTableBuffer, &mExpandableAddressTableBuffer, 75 sparseTableBlockSize, sparseTableDataSize), mIsValid(true) {} 76 ~SparseTableDictContent()77 virtual ~SparseTableDictContent() {} 78 isValid()79 virtual bool isValid() const { 80 return mIsValid; 81 } 82 isNearSizeLimit()83 bool isNearSizeLimit() const { 84 return mExpandableLookupTableBuffer.isNearSizeLimit() 85 || mExpandableAddressTableBuffer.isNearSizeLimit() 86 || mExpandableContentBuffer.isNearSizeLimit(); 87 } 88 89 protected: getUpdatableAddressLookupTable()90 SparseTable *getUpdatableAddressLookupTable() { 91 return &mAddressLookupTable; 92 } 93 getAddressLookupTable()94 const SparseTable *getAddressLookupTable() const { 95 return &mAddressLookupTable; 96 } 97 getWritableContentBuffer()98 BufferWithExtendableBuffer *getWritableContentBuffer() { 99 return &mExpandableContentBuffer; 100 } 101 getContentBuffer()102 const BufferWithExtendableBuffer *getContentBuffer() const { 103 return &mExpandableContentBuffer; 104 } 105 106 bool flush(const char *const dictDirPath, const char *const lookupTableFileName, 107 const char *const addressTableFileName, const char *const contentFileName) const; 108 109 private: 110 DISALLOW_IMPLICIT_CONSTRUCTORS(SparseTableDictContent); 111 112 const MmappedBuffer::MmappedBufferPtr mLookupTableBuffer; 113 const MmappedBuffer::MmappedBufferPtr mAddressTableBuffer; 114 const MmappedBuffer::MmappedBufferPtr mContentBuffer; 115 BufferWithExtendableBuffer mExpandableLookupTableBuffer; 116 BufferWithExtendableBuffer mExpandableAddressTableBuffer; 117 BufferWithExtendableBuffer mExpandableContentBuffer; 118 SparseTable mAddressLookupTable; 119 const bool mIsValid; 120 }; 121 } // namespace v402 122 } // namespace backward 123 } // namespace latinime 124 #endif /* LATINIME_BACKWARD_V402_SPARSE_TABLE_DICT_CONTENT_H */ 125