aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.cpp35
-rw-r--r--native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h39
-rw-r--r--native/jni/src/utils/exclusive_ownership_pointer.h11
3 files changed, 47 insertions, 38 deletions
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.cpp
index 10f8d32e7..d17d2d597 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.cpp
@@ -25,6 +25,13 @@
namespace latinime {
+/* static */ Ver4DictBuffers::Ver4DictBuffersPtr Ver4DictBuffers::openVer4DictBuffers(
+ const char *const dictDirPath, const MmappedBuffer::MmappedBufferPtr &headerBuffer) {
+ const bool isUpdatable = headerBuffer.get() ? headerBuffer.get()->isUpdatable() : false;
+ // TODO: take only dictDirPath, and open both header and trie files in the constructor below
+ return Ver4DictBuffersPtr(new Ver4DictBuffers(dictDirPath, headerBuffer, isUpdatable));
+}
+
bool Ver4DictBuffers::flushHeaderAndDictBuffers(const char *const dictDirPath,
const BufferWithExtendableBuffer *const headerBuffer) const {
// Create temporary directory.
@@ -91,4 +98,32 @@ bool Ver4DictBuffers::flushHeaderAndDictBuffers(const char *const dictDirPath,
return true;
}
+Ver4DictBuffers::Ver4DictBuffers(const char *const dictDirPath,
+ const MmappedBuffer::MmappedBufferPtr &headerBuffer, const bool isUpdatable)
+ : mHeaderBuffer(headerBuffer),
+ mDictBuffer(MmappedBuffer::openBuffer(dictDirPath,
+ Ver4DictConstants::TRIE_FILE_EXTENSION, isUpdatable)),
+ mHeaderPolicy(headerBuffer.get()->getBuffer(), FormatUtils::VERSION_4),
+ mExpandableHeaderBuffer(headerBuffer.get()->getBuffer(), mHeaderPolicy.getSize(),
+ BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
+ mExpandableTrieBuffer(mDictBuffer.get()->getBuffer(),
+ mDictBuffer.get()->getBufferSize(),
+ BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
+ mTerminalPositionLookupTable(dictDirPath, isUpdatable),
+ mProbabilityDictContent(dictDirPath, mHeaderPolicy.hasHistoricalInfoOfWords(),
+ isUpdatable),
+ mBigramDictContent(dictDirPath, mHeaderPolicy.hasHistoricalInfoOfWords(),
+ isUpdatable),
+ mShortcutDictContent(dictDirPath, isUpdatable),
+ mIsUpdatable(isUpdatable) {}
+
+Ver4DictBuffers::Ver4DictBuffers(const HeaderPolicy *const headerPolicy)
+ : mHeaderBuffer(0), mDictBuffer(0), mHeaderPolicy(),
+ mExpandableHeaderBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE),
+ mExpandableTrieBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE),
+ mTerminalPositionLookupTable(),
+ mProbabilityDictContent(headerPolicy->hasHistoricalInfoOfWords()),
+ mBigramDictContent(headerPolicy->hasHistoricalInfoOfWords()), mShortcutDictContent(),
+ mIsUpdatable(true) {}
+
} // namespace latinime
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h
index 8a13671c0..a0c219e4d 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h
@@ -33,12 +33,8 @@ class Ver4DictBuffers {
public:
typedef ExclusiveOwnershipPointer<Ver4DictBuffers> Ver4DictBuffersPtr;
- static AK_FORCE_INLINE Ver4DictBuffersPtr openVer4DictBuffers(const char *const dictDirPath,
- const MmappedBuffer::MmappedBufferPtr &headerBuffer) {
- const bool isUpdatable = headerBuffer.get() ? headerBuffer.get()->isUpdatable() : false;
- // TODO: take only dictDirPath, and open both header and trie files in the constructor below
- return Ver4DictBuffersPtr(new Ver4DictBuffers(dictDirPath, headerBuffer, isUpdatable));
- }
+ static Ver4DictBuffersPtr openVer4DictBuffers(const char *const dictDirPath,
+ const MmappedBuffer::MmappedBufferPtr &headerBuffer);
static AK_FORCE_INLINE Ver4DictBuffersPtr createVer4DictBuffers(
const HeaderPolicy *const headerPolicy) {
@@ -121,33 +117,10 @@ class Ver4DictBuffers {
private:
DISALLOW_COPY_AND_ASSIGN(Ver4DictBuffers);
- AK_FORCE_INLINE Ver4DictBuffers(const char *const dictDirPath,
- const MmappedBuffer::MmappedBufferPtr &headerBuffer, const bool isUpdatable)
- : mHeaderBuffer(headerBuffer),
- mDictBuffer(MmappedBuffer::openBuffer(dictDirPath,
- Ver4DictConstants::TRIE_FILE_EXTENSION, isUpdatable)),
- mHeaderPolicy(headerBuffer.get()->getBuffer(), FormatUtils::VERSION_4),
- mExpandableHeaderBuffer(headerBuffer.get()->getBuffer(), mHeaderPolicy.getSize(),
- BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
- mExpandableTrieBuffer(mDictBuffer.get()->getBuffer(),
- mDictBuffer.get()->getBufferSize(),
- BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
- mTerminalPositionLookupTable(dictDirPath, isUpdatable),
- mProbabilityDictContent(dictDirPath, mHeaderPolicy.hasHistoricalInfoOfWords(),
- isUpdatable),
- mBigramDictContent(dictDirPath, mHeaderPolicy.hasHistoricalInfoOfWords(),
- isUpdatable),
- mShortcutDictContent(dictDirPath, isUpdatable),
- mIsUpdatable(isUpdatable) {}
-
- AK_FORCE_INLINE Ver4DictBuffers(const HeaderPolicy *const headerPolicy)
- : mHeaderBuffer(0), mDictBuffer(0), mHeaderPolicy(),
- mExpandableHeaderBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE),
- mExpandableTrieBuffer(Ver4DictConstants::MAX_DICTIONARY_SIZE),
- mTerminalPositionLookupTable(),
- mProbabilityDictContent(headerPolicy->hasHistoricalInfoOfWords()),
- mBigramDictContent(headerPolicy->hasHistoricalInfoOfWords()), mShortcutDictContent(),
- mIsUpdatable(true) {}
+ Ver4DictBuffers(const char *const dictDirPath,
+ const MmappedBuffer::MmappedBufferPtr &headerBuffer, const bool isUpdatable);
+
+ Ver4DictBuffers(const HeaderPolicy *const headerPolicy);
const MmappedBuffer::MmappedBufferPtr mHeaderBuffer;
const MmappedBuffer::MmappedBufferPtr mDictBuffer;
diff --git a/native/jni/src/utils/exclusive_ownership_pointer.h b/native/jni/src/utils/exclusive_ownership_pointer.h
index 6c67df28e..617b34968 100644
--- a/native/jni/src/utils/exclusive_ownership_pointer.h
+++ b/native/jni/src/utils/exclusive_ownership_pointer.h
@@ -25,22 +25,23 @@ template<class T>
class ExclusiveOwnershipPointer {
public:
// This instance become an owner of the raw pointer.
- ExclusiveOwnershipPointer(T *const rawPointer)
+ AK_FORCE_INLINE ExclusiveOwnershipPointer(T *const rawPointer)
: mPointer(rawPointer),
mSharedOwnerPtr(new (ExclusiveOwnershipPointer<T> *)(this)) {}
// Move the ownership.
- ExclusiveOwnershipPointer(const ExclusiveOwnershipPointer<T> &pointer)
+ AK_FORCE_INLINE ExclusiveOwnershipPointer(const ExclusiveOwnershipPointer<T> &pointer)
: mPointer(pointer.mPointer), mSharedOwnerPtr(pointer.mSharedOwnerPtr) {
transferOwnership(&pointer);
}
- ~ExclusiveOwnershipPointer() {
+ AK_FORCE_INLINE ~ExclusiveOwnershipPointer() {
deletePointersIfHavingOwnership();
}
// Move the ownership.
- ExclusiveOwnershipPointer<T> &operator=(const ExclusiveOwnershipPointer<T> &pointer) {
+ AK_FORCE_INLINE ExclusiveOwnershipPointer<T> &operator=(
+ const ExclusiveOwnershipPointer<T> &pointer) {
// Delete pointers when this is an owner of another pointer.
deletePointersIfHavingOwnership();
mPointer = pointer.mPointer;
@@ -49,7 +50,7 @@ class ExclusiveOwnershipPointer {
return *this;
}
- T *get() const {
+ AK_FORCE_INLINE T *get() const {
return mPointer;
}