Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 324adefc authored by Jean Chalard's avatar Jean Chalard
Browse files

[HD01] Small initial refactoring

Bug: 11281748
Change-Id: I3c64c75ecd17729bdacf03048311d76ca9f37ae2
parent 0c186c31
Loading
Loading
Loading
Loading
+31 −24
Original line number Diff line number Diff line
@@ -73,51 +73,58 @@ bool HeaderPolicy::readRequiresGermanUmlautProcessing() const {
            REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY, false);
}

bool HeaderPolicy::writeHeaderToBuffer(BufferWithExtendableBuffer *const bufferToWrite,
        const bool updatesLastUpdatedTime, const bool updatesLastDecayedTime,
        const int unigramCount, const int bigramCount, const int extendedRegionSize) const {
bool HeaderPolicy::fillInAndWriteHeaderToBuffer(const bool updatesLastUpdatedTime,
        const bool updatesLastDecayedTime, const int unigramCount, const int bigramCount,
        const int extendedRegionSize, BufferWithExtendableBuffer *const outBuffer) const {
    int writingPos = 0;
    if (!HeaderReadWriteUtils::writeDictionaryVersion(bufferToWrite, mDictFormatVersion,
    HeaderReadWriteUtils::AttributeMap attributeMapToWrite(mAttributeMap);
    fillInHeader(updatesLastDecayedTime, updatesLastDecayedTime,
            unigramCount, bigramCount, extendedRegionSize, &attributeMapToWrite);
    if (!HeaderReadWriteUtils::writeDictionaryVersion(outBuffer, mDictFormatVersion,
            &writingPos)) {
        return false;
    }
    if (!HeaderReadWriteUtils::writeDictionaryFlags(bufferToWrite, mDictionaryFlags,
    if (!HeaderReadWriteUtils::writeDictionaryFlags(outBuffer, mDictionaryFlags,
            &writingPos)) {
        return false;
    }
    // Temporarily writes a dummy header size.
    int headerSizeFieldPos = writingPos;
    if (!HeaderReadWriteUtils::writeDictionaryHeaderSize(bufferToWrite, 0 /* size */,
    if (!HeaderReadWriteUtils::writeDictionaryHeaderSize(outBuffer, 0 /* size */,
            &writingPos)) {
        return false;
    }
    HeaderReadWriteUtils::AttributeMap attributeMapTowrite(mAttributeMap);
    HeaderReadWriteUtils::setIntAttribute(&attributeMapTowrite, UNIGRAM_COUNT_KEY, unigramCount);
    HeaderReadWriteUtils::setIntAttribute(&attributeMapTowrite, BIGRAM_COUNT_KEY, bigramCount);
    HeaderReadWriteUtils::setIntAttribute(&attributeMapTowrite, EXTENDED_REGION_SIZE_KEY,
            extendedRegionSize);
    if (updatesLastUpdatedTime) {
        // Set current time as a last updated time.
        HeaderReadWriteUtils::setIntAttribute(&attributeMapTowrite, LAST_UPDATED_TIME_KEY,
                TimeKeeper::peekCurrentTime());
    }
    if (updatesLastDecayedTime) {
        // Set current time as a last updated time.
        HeaderReadWriteUtils::setIntAttribute(&attributeMapTowrite, LAST_DECAYED_TIME_KEY,
                TimeKeeper::peekCurrentTime());
    }
    if (!HeaderReadWriteUtils::writeHeaderAttributes(bufferToWrite, &attributeMapTowrite,
    if (!HeaderReadWriteUtils::writeHeaderAttributes(outBuffer, &attributeMapToWrite,
            &writingPos)) {
        return false;
    }
    // Writes an actual header size.
    if (!HeaderReadWriteUtils::writeDictionaryHeaderSize(bufferToWrite, writingPos,
    // Writes the actual header size.
    if (!HeaderReadWriteUtils::writeDictionaryHeaderSize(outBuffer, writingPos,
            &headerSizeFieldPos)) {
        return false;
    }
    return true;
}

void HeaderPolicy::fillInHeader(const bool updatesLastUpdatedTime,
        const bool updatesLastDecayedTime, const int unigramCount, const int bigramCount,
        const int extendedRegionSize, HeaderReadWriteUtils::AttributeMap *outAttributeMap) const {
    HeaderReadWriteUtils::setIntAttribute(outAttributeMap, UNIGRAM_COUNT_KEY, unigramCount);
    HeaderReadWriteUtils::setIntAttribute(outAttributeMap, BIGRAM_COUNT_KEY, bigramCount);
    HeaderReadWriteUtils::setIntAttribute(outAttributeMap, EXTENDED_REGION_SIZE_KEY,
            extendedRegionSize);
    if (updatesLastUpdatedTime) {
        // Set current time as the last updated time.
        HeaderReadWriteUtils::setIntAttribute(outAttributeMap, LAST_UPDATED_TIME_KEY,
                TimeKeeper::peekCurrentTime());
    }
    if (updatesLastDecayedTime) {
        // Set current time as the last updated time.
        HeaderReadWriteUtils::setIntAttribute(outAttributeMap, LAST_DECAYED_TIME_KEY,
                TimeKeeper::peekCurrentTime());
    }
}

/* static */ HeaderReadWriteUtils::AttributeMap
        HeaderPolicy::createAttributeMapAndReadAllAttributes(const uint8_t *const dictBuf) {
    HeaderReadWriteUtils::AttributeMap attributeMap;
+7 −3
Original line number Diff line number Diff line
@@ -149,9 +149,13 @@ class HeaderPolicy : public DictionaryHeaderStructurePolicy {
    void readHeaderValueOrQuestionMark(const char *const key,
            int *outValue, int outValueSize) const;

    bool writeHeaderToBuffer(BufferWithExtendableBuffer *const bufferToWrite,
            const bool updatesLastUpdatedTime, const bool updatesLastDecayedTime,
            const int unigramCount, const int bigramCount, const int extendedRegionSize) const;
    bool fillInAndWriteHeaderToBuffer(const bool updatesLastUpdatedTime,
            const bool updatesLastDecayedTime, const int unigramCount, const int bigramCount,
            const int extendedRegionSize, BufferWithExtendableBuffer *const outBuffer) const;

    void fillInHeader(const bool updatesLastUpdatedTime, const bool updatesLastDecayedTime,
            const int unigramCount, const int bigramCount, const int extendedRegionSize,
            HeaderReadWriteUtils::AttributeMap *outAttributeMap) const;

 private:
    DISALLOW_COPY_AND_ASSIGN(HeaderPolicy);
+5 −4
Original line number Diff line number Diff line
@@ -39,8 +39,9 @@ void Ver4PatriciaTrieWritingHelper::writeToDictFile(const char *const dictDirPat
            BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE);
    const int extendedRegionSize = headerPolicy->getExtendedRegionSize()
            + mBuffers->getTrieBuffer()->getUsedAdditionalBufferSize();
    if (!headerPolicy->writeHeaderToBuffer(&headerBuffer, false /* updatesLastUpdatedTime */,
            false /* updatesLastDecayedTime */, unigramCount, bigramCount, extendedRegionSize)) {
    if (!headerPolicy->fillInAndWriteHeaderToBuffer(false /* updatesLastUpdatedTime */,
            false /* updatesLastDecayedTime */, unigramCount, bigramCount, extendedRegionSize,
            &headerBuffer)) {
        AKLOGE("Cannot write header structure to buffer. updatesLastUpdatedTime: %d, "
                "updatesLastDecayedTime: %d, unigramCount: %d, bigramCount: %d, "
                "extendedRegionSize: %d", false, false, unigramCount, bigramCount,
@@ -62,9 +63,9 @@ void Ver4PatriciaTrieWritingHelper::writeToDictFileWithGC(const int rootPtNodeAr
    }
    BufferWithExtendableBuffer headerBuffer(
            BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE);
    if (!headerPolicy->writeHeaderToBuffer(&headerBuffer, true /* updatesLastUpdatedTime */,
    if (!headerPolicy->fillInAndWriteHeaderToBuffer(true /* updatesLastUpdatedTime */,
            true /* updatesLastDecayedTime */, unigramCount, bigramCount,
            0 /* extendedRegionSize */)) {
            0 /* extendedRegionSize */, &headerBuffer)) {
        return;
    }
    dictBuffers.get()->flushHeaderAndDictBuffers(dictDirPath, &headerBuffer);
+3 −3
Original line number Diff line number Diff line
@@ -48,9 +48,9 @@ const char *const DictFileWritingUtils::TEMP_FILE_SUFFIX_FOR_WRITING_DICT_FILE =
    HeaderPolicy headerPolicy(FormatUtils::VERSION_4, attributeMap);
    Ver4DictBuffers::Ver4DictBuffersPtr dictBuffers =
            Ver4DictBuffers::createVer4DictBuffers(&headerPolicy);
    headerPolicy.writeHeaderToBuffer(dictBuffers.get()->getWritableHeaderBuffer(),
            true /* updatesLastUpdatedTime */, true /* updatesLastDecayedTime */,
            0 /* unigramCount */, 0 /* bigramCount */, 0 /* extendedRegionSize */);
    headerPolicy.fillInAndWriteHeaderToBuffer(true /* updatesLastUpdatedTime */,
            true /* updatesLastDecayedTime */, 0 /* unigramCount */, 0 /* bigramCount */,
            0 /* extendedRegionSize */, dictBuffers.get()->getWritableHeaderBuffer());
    if (!DynamicPtWritingUtils::writeEmptyDictionary(
            dictBuffers.get()->getWritableTrieBuffer(), 0 /* rootPos */)) {
        AKLOGE("Empty ver4 dictionary structure cannot be created on memory.");