aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/hyperscan/src/stream_compress_impl.h
diff options
context:
space:
mode:
authorIvan Blinkov <ivan@blinkov.ru>2022-02-10 16:47:11 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:11 +0300
commit5b283123c882433dafbaf6b338adeea16c1a0ea0 (patch)
tree339adc63bce23800021202ae4a8328a843dc447a /contrib/libs/hyperscan/src/stream_compress_impl.h
parent1aeb9a455974457866f78722ad98114bafc84e8a (diff)
downloadydb-5b283123c882433dafbaf6b338adeea16c1a0ea0.tar.gz
Restoring authorship annotation for Ivan Blinkov <ivan@blinkov.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/hyperscan/src/stream_compress_impl.h')
-rw-r--r--contrib/libs/hyperscan/src/stream_compress_impl.h370
1 files changed, 185 insertions, 185 deletions
diff --git a/contrib/libs/hyperscan/src/stream_compress_impl.h b/contrib/libs/hyperscan/src/stream_compress_impl.h
index ca27629635..d1ccf5e6d0 100644
--- a/contrib/libs/hyperscan/src/stream_compress_impl.h
+++ b/contrib/libs/hyperscan/src/stream_compress_impl.h
@@ -1,153 +1,153 @@
-/*
+/*
* Copyright (c) 2017-2018, Intel Corporation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "util/join.h"
-
-#define COPY_FIELD(x) COPY(&x, sizeof(x))
-#define COPY_LEFTFIXES JOIN(sc_left_, FN_SUFFIX)
-#define COPY_SOM_INFO JOIN(sc_som_, FN_SUFFIX)
-
-static
-size_t COPY_LEFTFIXES(const struct RoseEngine *rose, size_t currOffset,
- STREAM_QUAL struct hs_stream *stream,
- BUF_QUAL char *buf, UNUSED size_t buf_size) {
- if (!rose->activeLeftIterOffset) {
- return currOffset;
- }
-
- const struct RoseStateOffsets *so = &rose->stateOffsets;
- STREAM_QUAL char *stream_body
- = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
-
- /* Note: in the expand case the active left array has already been copied
- * into the stream. */
- const u8 *ara = (const u8 *)(stream_body + so->activeLeftArray);
- const u32 arCount = rose->activeLeftCount;
- const struct LeftNfaInfo *left_table = getLeftTable(rose);
-
- /* We only want to look at non-transient leftfixes */
- const struct mmbit_sparse_iter *it = getActiveLeftIter(rose);
- struct mmbit_sparse_state si_state[MAX_SPARSE_ITER_STATES];
- u32 dummy;
- u32 ri = mmbit_sparse_iter_begin(ara, arCount, &dummy, it, si_state);
- for (; ri != MMB_INVALID;
- ri = mmbit_sparse_iter_next(ara, arCount, ri, &dummy, it, si_state)) {
- u32 qi = ri + rose->leftfixBeginQueue;
- UNUSED const struct LeftNfaInfo *left = left_table + ri;
- const struct NfaInfo *nfa_info = getNfaInfoByQueue(rose, qi);
- const struct NFA *nfa = getNfaByInfo(rose, nfa_info);
-
- COPY(stream_body + nfa_info->stateOffset, nfa->streamStateSize);
- /* copy the one whole byte for active leftfixes as well */
- assert(left->lagIndex != ROSE_OFFSET_INVALID);
- COPY(stream_body + so->leftfixLagTable + left->lagIndex, 1);
- }
-
- return currOffset;
-}
-
-static
-size_t COPY_SOM_INFO(const struct RoseEngine *rose, size_t currOffset,
- STREAM_QUAL struct hs_stream *stream,
- BUF_QUAL char *buf, UNUSED size_t buf_size) {
- const struct RoseStateOffsets *so = &rose->stateOffsets;
-
- if (!so->somLocation) {
- assert(!so->somValid);
- assert(!so->somWritable);
- return currOffset;
- }
-
- STREAM_QUAL char *stream_body
- = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
-
- assert(so->somValid);
- assert(so->somWritable);
-
- COPY_MULTIBIT(stream_body + so->somWritable, rose->somLocationCount);
- COPY_MULTIBIT(stream_body + so->somValid, rose->somLocationCount);
-
- /* Copy only the som slots which contain valid values. */
- /* Note: in the expand case the som valid array has been copied in. */
- const u8 *svalid = (const u8 *)(stream_body + so->somValid);
- u32 s_count = rose->somLocationCount;
- u32 s_width = rose->somHorizon;
- for (u32 slot = mmbit_iterate(svalid, s_count, MMB_INVALID);
- slot != MMB_INVALID; slot = mmbit_iterate(svalid, s_count, slot)) {
- COPY(stream_body + so->somLocation + slot * s_width, s_width);
- }
-
- return currOffset;
-}
-
-static
-size_t JOIN(sc_, FN_SUFFIX)(const struct RoseEngine *rose,
- STREAM_QUAL struct hs_stream *stream,
- BUF_QUAL char *buf, UNUSED size_t buf_size) {
- size_t currOffset = 0;
- const struct RoseStateOffsets *so = &rose->stateOffsets;
-
- STREAM_QUAL char *stream_body
- = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
-
- COPY_FIELD(stream->offset);
- ASSIGN(stream->rose, rose);
-
- COPY(stream_body + ROSE_STATE_OFFSET_STATUS_FLAGS, 1);
- COPY_MULTIBIT(stream_body + ROSE_STATE_OFFSET_ROLE_MMBIT, rose->rolesWithStateCount);
-
- /* stream is valid in compress/size, and stream->offset has been set already
- * on the expand side */
- u64a offset = stream->offset;
- u32 history = MIN((u32)offset, rose->historyRequired);
-
- /* copy the active mmbits */
- COPY_MULTIBIT(stream_body + so->activeLeafArray, rose->activeArrayCount);
- COPY_MULTIBIT(stream_body + so->activeLeftArray, rose->activeLeftCount);
-
- COPY(stream_body + so->longLitState, so->longLitState_size);
-
- /* Leftlag table will be handled later, for active leftfixes */
-
- /* anchored table state is not required once we are deep in the stream */
- if (offset <= rose->anchoredDistance) {
- COPY(stream_body + so->anchorState, rose->anchorStateSize);
- }
-
- COPY(stream_body + so->groups, so->groups_size);
-
- /* copy the real bits of history */
- UNUSED u32 hend = so->history + rose->historyRequired;
- COPY(stream_body + hend - history, history);
-
- /* copy the exhaustion multibit */
- COPY_MULTIBIT(stream_body + so->exhausted, rose->ekeyCount);
-
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Intel Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "util/join.h"
+
+#define COPY_FIELD(x) COPY(&x, sizeof(x))
+#define COPY_LEFTFIXES JOIN(sc_left_, FN_SUFFIX)
+#define COPY_SOM_INFO JOIN(sc_som_, FN_SUFFIX)
+
+static
+size_t COPY_LEFTFIXES(const struct RoseEngine *rose, size_t currOffset,
+ STREAM_QUAL struct hs_stream *stream,
+ BUF_QUAL char *buf, UNUSED size_t buf_size) {
+ if (!rose->activeLeftIterOffset) {
+ return currOffset;
+ }
+
+ const struct RoseStateOffsets *so = &rose->stateOffsets;
+ STREAM_QUAL char *stream_body
+ = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
+
+ /* Note: in the expand case the active left array has already been copied
+ * into the stream. */
+ const u8 *ara = (const u8 *)(stream_body + so->activeLeftArray);
+ const u32 arCount = rose->activeLeftCount;
+ const struct LeftNfaInfo *left_table = getLeftTable(rose);
+
+ /* We only want to look at non-transient leftfixes */
+ const struct mmbit_sparse_iter *it = getActiveLeftIter(rose);
+ struct mmbit_sparse_state si_state[MAX_SPARSE_ITER_STATES];
+ u32 dummy;
+ u32 ri = mmbit_sparse_iter_begin(ara, arCount, &dummy, it, si_state);
+ for (; ri != MMB_INVALID;
+ ri = mmbit_sparse_iter_next(ara, arCount, ri, &dummy, it, si_state)) {
+ u32 qi = ri + rose->leftfixBeginQueue;
+ UNUSED const struct LeftNfaInfo *left = left_table + ri;
+ const struct NfaInfo *nfa_info = getNfaInfoByQueue(rose, qi);
+ const struct NFA *nfa = getNfaByInfo(rose, nfa_info);
+
+ COPY(stream_body + nfa_info->stateOffset, nfa->streamStateSize);
+ /* copy the one whole byte for active leftfixes as well */
+ assert(left->lagIndex != ROSE_OFFSET_INVALID);
+ COPY(stream_body + so->leftfixLagTable + left->lagIndex, 1);
+ }
+
+ return currOffset;
+}
+
+static
+size_t COPY_SOM_INFO(const struct RoseEngine *rose, size_t currOffset,
+ STREAM_QUAL struct hs_stream *stream,
+ BUF_QUAL char *buf, UNUSED size_t buf_size) {
+ const struct RoseStateOffsets *so = &rose->stateOffsets;
+
+ if (!so->somLocation) {
+ assert(!so->somValid);
+ assert(!so->somWritable);
+ return currOffset;
+ }
+
+ STREAM_QUAL char *stream_body
+ = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
+
+ assert(so->somValid);
+ assert(so->somWritable);
+
+ COPY_MULTIBIT(stream_body + so->somWritable, rose->somLocationCount);
+ COPY_MULTIBIT(stream_body + so->somValid, rose->somLocationCount);
+
+ /* Copy only the som slots which contain valid values. */
+ /* Note: in the expand case the som valid array has been copied in. */
+ const u8 *svalid = (const u8 *)(stream_body + so->somValid);
+ u32 s_count = rose->somLocationCount;
+ u32 s_width = rose->somHorizon;
+ for (u32 slot = mmbit_iterate(svalid, s_count, MMB_INVALID);
+ slot != MMB_INVALID; slot = mmbit_iterate(svalid, s_count, slot)) {
+ COPY(stream_body + so->somLocation + slot * s_width, s_width);
+ }
+
+ return currOffset;
+}
+
+static
+size_t JOIN(sc_, FN_SUFFIX)(const struct RoseEngine *rose,
+ STREAM_QUAL struct hs_stream *stream,
+ BUF_QUAL char *buf, UNUSED size_t buf_size) {
+ size_t currOffset = 0;
+ const struct RoseStateOffsets *so = &rose->stateOffsets;
+
+ STREAM_QUAL char *stream_body
+ = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
+
+ COPY_FIELD(stream->offset);
+ ASSIGN(stream->rose, rose);
+
+ COPY(stream_body + ROSE_STATE_OFFSET_STATUS_FLAGS, 1);
+ COPY_MULTIBIT(stream_body + ROSE_STATE_OFFSET_ROLE_MMBIT, rose->rolesWithStateCount);
+
+ /* stream is valid in compress/size, and stream->offset has been set already
+ * on the expand side */
+ u64a offset = stream->offset;
+ u32 history = MIN((u32)offset, rose->historyRequired);
+
+ /* copy the active mmbits */
+ COPY_MULTIBIT(stream_body + so->activeLeafArray, rose->activeArrayCount);
+ COPY_MULTIBIT(stream_body + so->activeLeftArray, rose->activeLeftCount);
+
+ COPY(stream_body + so->longLitState, so->longLitState_size);
+
+ /* Leftlag table will be handled later, for active leftfixes */
+
+ /* anchored table state is not required once we are deep in the stream */
+ if (offset <= rose->anchoredDistance) {
+ COPY(stream_body + so->anchorState, rose->anchorStateSize);
+ }
+
+ COPY(stream_body + so->groups, so->groups_size);
+
+ /* copy the real bits of history */
+ UNUSED u32 hend = so->history + rose->historyRequired;
+ COPY(stream_body + hend - history, history);
+
+ /* copy the exhaustion multibit */
+ COPY_MULTIBIT(stream_body + so->exhausted, rose->ekeyCount);
+
/* copy the logical multibit */
COPY_MULTIBIT(stream_body + so->logicalVec,
rose->lkeyCount + rose->lopCount);
@@ -155,39 +155,39 @@ size_t JOIN(sc_, FN_SUFFIX)(const struct RoseEngine *rose,
/* copy the combination multibit */
COPY_MULTIBIT(stream_body + so->combVec, rose->ckeyCount);
- /* copy nfa stream state for endfixes */
- /* Note: in the expand case the active array has already been copied into
- * the stream. */
- const u8 *aa = (const u8 *)(stream_body + so->activeLeafArray);
- u32 aaCount = rose->activeArrayCount;
- for (u32 qi = mmbit_iterate(aa, aaCount, MMB_INVALID); qi != MMB_INVALID;
- qi = mmbit_iterate(aa, aaCount, qi)) {
- DEBUG_PRINTF("saving stream state for qi=%u\n", qi);
- const struct NfaInfo *nfa_info = getNfaInfoByQueue(rose, qi);
- const struct NFA *nfa = getNfaByInfo(rose, nfa_info);
- COPY(stream_body + nfa_info->stateOffset, nfa->streamStateSize);
- }
-
- /* copy nfa stream state for leftfixes */
- currOffset = COPY_LEFTFIXES(rose, currOffset, stream, buf, buf_size);
- if (!currOffset) {
- return 0;
- }
-
- currOffset = COPY_SOM_INFO(rose, currOffset, stream, buf, buf_size);
- if (!currOffset) {
- return 0;
- }
-
- return currOffset;
-}
-
-#undef ASSIGN
-#undef COPY
-#undef COPY_FIELD
-#undef COPT_LEFTFIXES
-#undef COPY_MULTIBIT
-#undef COPY_SOM_INFO
-#undef FN_SUFFIX
-#undef BUF_QUAL
-#undef STREAM_QUAL
+ /* copy nfa stream state for endfixes */
+ /* Note: in the expand case the active array has already been copied into
+ * the stream. */
+ const u8 *aa = (const u8 *)(stream_body + so->activeLeafArray);
+ u32 aaCount = rose->activeArrayCount;
+ for (u32 qi = mmbit_iterate(aa, aaCount, MMB_INVALID); qi != MMB_INVALID;
+ qi = mmbit_iterate(aa, aaCount, qi)) {
+ DEBUG_PRINTF("saving stream state for qi=%u\n", qi);
+ const struct NfaInfo *nfa_info = getNfaInfoByQueue(rose, qi);
+ const struct NFA *nfa = getNfaByInfo(rose, nfa_info);
+ COPY(stream_body + nfa_info->stateOffset, nfa->streamStateSize);
+ }
+
+ /* copy nfa stream state for leftfixes */
+ currOffset = COPY_LEFTFIXES(rose, currOffset, stream, buf, buf_size);
+ if (!currOffset) {
+ return 0;
+ }
+
+ currOffset = COPY_SOM_INFO(rose, currOffset, stream, buf, buf_size);
+ if (!currOffset) {
+ return 0;
+ }
+
+ return currOffset;
+}
+
+#undef ASSIGN
+#undef COPY
+#undef COPY_FIELD
+#undef COPT_LEFTFIXES
+#undef COPY_MULTIBIT
+#undef COPY_SOM_INFO
+#undef FN_SUFFIX
+#undef BUF_QUAL
+#undef STREAM_QUAL