diff options
author | bnagaev <bnagaev@yandex-team.ru> | 2022-02-10 16:47:04 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:04 +0300 |
commit | c74559fb88da8adac0d9186cfa55a6b13c47695f (patch) | |
tree | b83306b6e37edeea782e9eed673d89286c4fef35 /contrib/libs/hyperscan/src/parser/Component.h | |
parent | d6449ba66291ff0c0d352c82e6eb3efb4c8a7e8d (diff) | |
download | ydb-c74559fb88da8adac0d9186cfa55a6b13c47695f.tar.gz |
Restoring authorship annotation for <bnagaev@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/hyperscan/src/parser/Component.h')
-rw-r--r-- | contrib/libs/hyperscan/src/parser/Component.h | 290 |
1 files changed, 145 insertions, 145 deletions
diff --git a/contrib/libs/hyperscan/src/parser/Component.h b/contrib/libs/hyperscan/src/parser/Component.h index f7160ae630..1ebce677ca 100644 --- a/contrib/libs/hyperscan/src/parser/Component.h +++ b/contrib/libs/hyperscan/src/parser/Component.h @@ -1,145 +1,145 @@ -/* - * Copyright (c) 2015, 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. - */ - -/** \file - * \brief Base class for all components. - */ - -#ifndef _RE_COMPONENT_H_ -#define _RE_COMPONENT_H_ - -#include "ComponentVisitor.h" -#include "ConstComponentVisitor.h" - -#include "position.h" -#include "ue2common.h" - -#include <set> -#include <string> -#include <vector> - -namespace ue2 { - -class GlushkovBuildState; -class PositionInfo; - -enum EmptyPathType { - NOT_EMPTY, /**< component must consume characters */ - EPS_ONLY_PATHS, /**< eps path with no overhanging asserts */ - BOUNDARY_PATHS /**< eps paths some with overhanging asserts */ -}; - -/** \brief Base class for regular expression parse tree components. */ -class Component { - friend class DumpVisitor; -public: - /** \brief Constructor. */ - Component(); - - /** \brief Destructor. */ - virtual ~Component(); - - /** \brief Returns a newly-allocated deep copy of this component. */ - virtual Component *clone() const = 0; - - /** \brief Apply the given visitor functor. */ - virtual Component *accept(ComponentVisitor &v) = 0; - - /** \brief Apply the given const visitor functor. */ - virtual void accept(ConstComponentVisitor &v) const = 0; - - /** \brief Glushkov construction First() function. - * \return set of initial positions in this component. */ - virtual std::vector<PositionInfo> first() const = 0; - - /** \brief Glushkov construction Last() function. - * \return set of final positions in this component. */ - virtual std::vector<PositionInfo> last() const = 0; - - /** \brief Glushkov construction Empty() function. - * \return true iff the component accepts epsilon. - * - * Note: ^, $, etc are considered empty. */ - virtual bool empty() const = 0; - - /** \brief True iff epsilon can pass through the component. - * - * Note: ^, $, etc are not vacuous everywhere. */ - virtual bool vacuous_everywhere(void) const; - - /** \brief True iff the component is repeatable on its own, without being - * encapsulated in a sequence first. - * - * This is true for most components, but not for repeats, anchors and word - * boundaries. */ - virtual bool repeatable() const; - - /** \brief Optimisation pass on the component tree. - * - * Called before \ref notePositions. May modify to the component tree. - * Assumes no start of match information is required. - */ - virtual void optimise(bool connected_to_sds); - - /** \brief Informs the Glushkov build process of the positions used by this - * component. */ - virtual void notePositions(GlushkovBuildState &bs) = 0; - - /** \brief Glushkov construction Follow() function. - * - * Constructs (in \a bs) the set of positions in this component reachable - * from the positions in \a lastPos. - * - * \throw ParseError on failure - */ - virtual void buildFollowSet(GlushkovBuildState &bs, - const std::vector<PositionInfo> &lastPos) = 0; - - /** \brief Return value is used for chaining, throws if finds embedded - * anchor. */ - virtual bool checkEmbeddedStartAnchor(bool at_start) const; - - /* \brief Return value is used for chaining, throws if finds embedded - * anchor. */ - virtual bool checkEmbeddedEndAnchor(bool at_end) const; - -protected: - /** \brief Called during \ref notePositions. */ - void recordPosBounds(u32 b, u32 e); - - u32 pos_begin; - u32 pos_end; - - // Protected copy ctor. Use clone instead. - Component(const Component &other) - : pos_begin(other.pos_begin), pos_end(other.pos_end) {} -}; - -} // namespace ue2 - -#endif +/* + * Copyright (c) 2015, 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. + */ + +/** \file + * \brief Base class for all components. + */ + +#ifndef _RE_COMPONENT_H_ +#define _RE_COMPONENT_H_ + +#include "ComponentVisitor.h" +#include "ConstComponentVisitor.h" + +#include "position.h" +#include "ue2common.h" + +#include <set> +#include <string> +#include <vector> + +namespace ue2 { + +class GlushkovBuildState; +class PositionInfo; + +enum EmptyPathType { + NOT_EMPTY, /**< component must consume characters */ + EPS_ONLY_PATHS, /**< eps path with no overhanging asserts */ + BOUNDARY_PATHS /**< eps paths some with overhanging asserts */ +}; + +/** \brief Base class for regular expression parse tree components. */ +class Component { + friend class DumpVisitor; +public: + /** \brief Constructor. */ + Component(); + + /** \brief Destructor. */ + virtual ~Component(); + + /** \brief Returns a newly-allocated deep copy of this component. */ + virtual Component *clone() const = 0; + + /** \brief Apply the given visitor functor. */ + virtual Component *accept(ComponentVisitor &v) = 0; + + /** \brief Apply the given const visitor functor. */ + virtual void accept(ConstComponentVisitor &v) const = 0; + + /** \brief Glushkov construction First() function. + * \return set of initial positions in this component. */ + virtual std::vector<PositionInfo> first() const = 0; + + /** \brief Glushkov construction Last() function. + * \return set of final positions in this component. */ + virtual std::vector<PositionInfo> last() const = 0; + + /** \brief Glushkov construction Empty() function. + * \return true iff the component accepts epsilon. + * + * Note: ^, $, etc are considered empty. */ + virtual bool empty() const = 0; + + /** \brief True iff epsilon can pass through the component. + * + * Note: ^, $, etc are not vacuous everywhere. */ + virtual bool vacuous_everywhere(void) const; + + /** \brief True iff the component is repeatable on its own, without being + * encapsulated in a sequence first. + * + * This is true for most components, but not for repeats, anchors and word + * boundaries. */ + virtual bool repeatable() const; + + /** \brief Optimisation pass on the component tree. + * + * Called before \ref notePositions. May modify to the component tree. + * Assumes no start of match information is required. + */ + virtual void optimise(bool connected_to_sds); + + /** \brief Informs the Glushkov build process of the positions used by this + * component. */ + virtual void notePositions(GlushkovBuildState &bs) = 0; + + /** \brief Glushkov construction Follow() function. + * + * Constructs (in \a bs) the set of positions in this component reachable + * from the positions in \a lastPos. + * + * \throw ParseError on failure + */ + virtual void buildFollowSet(GlushkovBuildState &bs, + const std::vector<PositionInfo> &lastPos) = 0; + + /** \brief Return value is used for chaining, throws if finds embedded + * anchor. */ + virtual bool checkEmbeddedStartAnchor(bool at_start) const; + + /* \brief Return value is used for chaining, throws if finds embedded + * anchor. */ + virtual bool checkEmbeddedEndAnchor(bool at_end) const; + +protected: + /** \brief Called during \ref notePositions. */ + void recordPosBounds(u32 b, u32 e); + + u32 pos_begin; + u32 pos_end; + + // Protected copy ctor. Use clone instead. + Component(const Component &other) + : pos_begin(other.pos_begin), pos_end(other.pos_end) {} +}; + +} // namespace ue2 + +#endif |