diff options
author | isiv <isiv@yandex-team.ru> | 2022-02-10 16:47:54 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:54 +0300 |
commit | 40aa65b121746185908e51e32dca11ccee70140b (patch) | |
tree | c0748b5dcbade83af788c0abfa89c0383d6b779c /contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl | |
parent | f20e3f1949626df2ef9d81d7618ec367b0c34f6b (diff) | |
download | ydb-40aa65b121746185908e51e32dca11ccee70140b.tar.gz |
Restoring authorship annotation for <isiv@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl')
-rw-r--r-- | contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl | 448 |
1 files changed, 224 insertions, 224 deletions
diff --git a/contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl b/contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl index e7ad08de43..a7dd8b54fc 100644 --- a/contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl +++ b/contrib/libs/antlr3_cpp_runtime/include/antlr3rewriteruletokenstream.inl @@ -1,224 +1,224 @@ -namespace antlr3 { - -template<class ImplTraits> -RewriteRuleTokenStream<ImplTraits>::RewriteRuleTokenStream(TreeAdaptorType* adaptor, const char* /*description*/) - : m_adaptor(adaptor) - , m_elements() - , m_dirty(false) -{ - m_cursor = m_elements.begin(); -} - -template<class ImplTraits> -RewriteRuleTokenStream<ImplTraits>::RewriteRuleTokenStream(TreeAdaptorType* adaptor, const char* /*description*/, - const TokenType* oneElement - ) - : m_adaptor(adaptor) - , m_elements() - , m_dirty(false) -{ - if( oneElement != NULL ) - this->add( oneElement ); - m_cursor = m_elements.begin(); -} - -template<class ImplTraits> -RewriteRuleTokenStream<ImplTraits>::RewriteRuleTokenStream(TreeAdaptorType* adaptor, const char* /*description*/, - const ElementsType& elements - ) - : m_adaptor(adaptor) - , m_elements(elements) - , m_dirty(false) -{ - m_cursor = m_elements.begin(); -} - -template<class ImplTraits> -void RewriteRuleTokenStream<ImplTraits>::reset() -{ - m_cursor = m_elements.begin(); - m_dirty = true; -} - -template<class ImplTraits> -void RewriteRuleTokenStream<ImplTraits>::add(const ElementType* el) -{ - if ( el == NULL) - return; - m_elements.push_back(el); - m_cursor = m_elements.begin(); -} - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::ElementsType::iterator -RewriteRuleTokenStream<ImplTraits>::_next() -{ - if (m_elements.empty()) - { - // This means that the stream is empty - // Caller must cope with this (TODO throw RewriteEmptyStreamException) - return m_elements.end(); - } - - if (m_dirty || m_cursor == m_elements.end()) - { - if( m_elements.size() == 1) - { - // Special case when size is single element, it will just dup a lot - //return this->toTree(m_singleElement); - return m_elements.begin(); - } - - // Out of elements and the size is not 1, so we cannot assume - // that we just duplicate the entry n times (such as ID ent+ -> ^(ID ent)+) - // This means we ran out of elements earlier than was expected. - // - return m_elements.end(); // Caller must cope with this (TODO throw RewriteEmptyStreamException) - } - - // More than just a single element so we extract it from the - // vector. - return m_cursor++; -} - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::ElementType -RewriteRuleTokenStream<ImplTraits>::nextTree() -{ - ANTLR_UINT32 n = this->size(); - if ( m_dirty || ( (m_cursor >=n) && (n==1)) ) - { - // if out of elements and size is 1, dup - typename ElementsType::iterator el = this->_next(); - return this->dup(*el); - } - - // test size above then fetch - typename ElementsType::iterator el = this->_next(); - return *el; -} - -/* -template<class ImplTraits, class SuperType> -typename RewriteRuleTokenStream<ImplTraits, SuperType>::TokenType* -RewriteRuleTokenStream<ImplTraits, SuperType>::nextToken() -{ - return this->_next(); -} - -template<class ImplTraits, class SuperType> -typename RewriteRuleTokenStream<ImplTraits, SuperType>::TokenType* -RewriteRuleTokenStream<ImplTraits, SuperType>::next() -{ - ANTLR_UINT32 s; - s = this->size(); - if ( (m_cursor >= s) && (s == 1) ) - { - TreeTypePtr el; - el = this->_next(); - return this->dup(el); - } - return this->_next(); -} - -*/ - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::ElementType* -RewriteRuleTokenStream<ImplTraits>::dup( ElementType* element) -{ - return dupImpl(element); -} - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::ElementType* -RewriteRuleTokenStream<ImplTraits>::dupImpl( typename ImplTraits::CommonTokenType* /*element*/) -{ - return NULL; // TODO throw here -} - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::ElementType* -RewriteRuleTokenStream<ImplTraits>::dupImpl( typename ImplTraits::TreeTypePtr element) -{ - return m_adaptor->dupTree(element); -} - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::TreeTypePtr -RewriteRuleTokenStream<ImplTraits>::toTree(const ElementType* element) -{ - return m_adaptor->create(element); -} - -template<class ImplTraits> -bool -RewriteRuleTokenStream<ImplTraits>::hasNext() -{ - return m_cursor != m_elements.end(); -} - -template<class ImplTraits > -typename RewriteRuleTokenStream<ImplTraits>::TreeTypePtr -RewriteRuleTokenStream<ImplTraits>::nextNode() -{ - const TokenType *Token = this->nextToken(); - return m_adaptor->create(Token); -} - -/// Number of elements available in the stream -/// -template<class ImplTraits> -ANTLR_UINT32 RewriteRuleTokenStream<ImplTraits>::size() -{ - return (ANTLR_UINT32)(m_elements.size()); -} - -template<class ImplTraits> -typename RewriteRuleTokenStream<ImplTraits>::StringType -RewriteRuleTokenStream<ImplTraits>::getDescription() -{ - if ( m_elementDescription.empty() ) - { - m_elementDescription = "<unknown source>"; - } - return m_elementDescription; -} - -template<class ImplTraits> -RewriteRuleTokenStream<ImplTraits>::~RewriteRuleTokenStream() -{ - // Before placing the stream back in the pool, we - // need to clear any vector it has. This is so any - // free pointers that are associated with the - // entries are called. However, if this particular function is called - // then we know that the entries in the stream are definitely - // tree nodes. Hence we check to see if any of them were nilNodes as - // if they were, we can reuse them. - // - // We have some elements to traverse - // - for (ANTLR_UINT32 i = 0; i < m_elements.size(); i++) - { - const ElementType *tree = m_elements.at(i); - //if ( (tree != NULL) && tree->isNilNode() ) - { - // Had to remove this for now, check is not comprehensive enough - // tree->reuse(tree); - } - } - m_elements.clear(); -} - -template<class ImplTraits> -const typename RewriteRuleTokenStream<ImplTraits>::TokenType* -RewriteRuleTokenStream<ImplTraits>::nextToken() -{ - auto retval = this->_next(); - if (retval == m_elements.end()) - return NULL; - else - return *retval; -} - -} +namespace antlr3 { + +template<class ImplTraits> +RewriteRuleTokenStream<ImplTraits>::RewriteRuleTokenStream(TreeAdaptorType* adaptor, const char* /*description*/) + : m_adaptor(adaptor) + , m_elements() + , m_dirty(false) +{ + m_cursor = m_elements.begin(); +} + +template<class ImplTraits> +RewriteRuleTokenStream<ImplTraits>::RewriteRuleTokenStream(TreeAdaptorType* adaptor, const char* /*description*/, + const TokenType* oneElement + ) + : m_adaptor(adaptor) + , m_elements() + , m_dirty(false) +{ + if( oneElement != NULL ) + this->add( oneElement ); + m_cursor = m_elements.begin(); +} + +template<class ImplTraits> +RewriteRuleTokenStream<ImplTraits>::RewriteRuleTokenStream(TreeAdaptorType* adaptor, const char* /*description*/, + const ElementsType& elements + ) + : m_adaptor(adaptor) + , m_elements(elements) + , m_dirty(false) +{ + m_cursor = m_elements.begin(); +} + +template<class ImplTraits> +void RewriteRuleTokenStream<ImplTraits>::reset() +{ + m_cursor = m_elements.begin(); + m_dirty = true; +} + +template<class ImplTraits> +void RewriteRuleTokenStream<ImplTraits>::add(const ElementType* el) +{ + if ( el == NULL) + return; + m_elements.push_back(el); + m_cursor = m_elements.begin(); +} + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::ElementsType::iterator +RewriteRuleTokenStream<ImplTraits>::_next() +{ + if (m_elements.empty()) + { + // This means that the stream is empty + // Caller must cope with this (TODO throw RewriteEmptyStreamException) + return m_elements.end(); + } + + if (m_dirty || m_cursor == m_elements.end()) + { + if( m_elements.size() == 1) + { + // Special case when size is single element, it will just dup a lot + //return this->toTree(m_singleElement); + return m_elements.begin(); + } + + // Out of elements and the size is not 1, so we cannot assume + // that we just duplicate the entry n times (such as ID ent+ -> ^(ID ent)+) + // This means we ran out of elements earlier than was expected. + // + return m_elements.end(); // Caller must cope with this (TODO throw RewriteEmptyStreamException) + } + + // More than just a single element so we extract it from the + // vector. + return m_cursor++; +} + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::ElementType +RewriteRuleTokenStream<ImplTraits>::nextTree() +{ + ANTLR_UINT32 n = this->size(); + if ( m_dirty || ( (m_cursor >=n) && (n==1)) ) + { + // if out of elements and size is 1, dup + typename ElementsType::iterator el = this->_next(); + return this->dup(*el); + } + + // test size above then fetch + typename ElementsType::iterator el = this->_next(); + return *el; +} + +/* +template<class ImplTraits, class SuperType> +typename RewriteRuleTokenStream<ImplTraits, SuperType>::TokenType* +RewriteRuleTokenStream<ImplTraits, SuperType>::nextToken() +{ + return this->_next(); +} + +template<class ImplTraits, class SuperType> +typename RewriteRuleTokenStream<ImplTraits, SuperType>::TokenType* +RewriteRuleTokenStream<ImplTraits, SuperType>::next() +{ + ANTLR_UINT32 s; + s = this->size(); + if ( (m_cursor >= s) && (s == 1) ) + { + TreeTypePtr el; + el = this->_next(); + return this->dup(el); + } + return this->_next(); +} + +*/ + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::ElementType* +RewriteRuleTokenStream<ImplTraits>::dup( ElementType* element) +{ + return dupImpl(element); +} + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::ElementType* +RewriteRuleTokenStream<ImplTraits>::dupImpl( typename ImplTraits::CommonTokenType* /*element*/) +{ + return NULL; // TODO throw here +} + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::ElementType* +RewriteRuleTokenStream<ImplTraits>::dupImpl( typename ImplTraits::TreeTypePtr element) +{ + return m_adaptor->dupTree(element); +} + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::TreeTypePtr +RewriteRuleTokenStream<ImplTraits>::toTree(const ElementType* element) +{ + return m_adaptor->create(element); +} + +template<class ImplTraits> +bool +RewriteRuleTokenStream<ImplTraits>::hasNext() +{ + return m_cursor != m_elements.end(); +} + +template<class ImplTraits > +typename RewriteRuleTokenStream<ImplTraits>::TreeTypePtr +RewriteRuleTokenStream<ImplTraits>::nextNode() +{ + const TokenType *Token = this->nextToken(); + return m_adaptor->create(Token); +} + +/// Number of elements available in the stream +/// +template<class ImplTraits> +ANTLR_UINT32 RewriteRuleTokenStream<ImplTraits>::size() +{ + return (ANTLR_UINT32)(m_elements.size()); +} + +template<class ImplTraits> +typename RewriteRuleTokenStream<ImplTraits>::StringType +RewriteRuleTokenStream<ImplTraits>::getDescription() +{ + if ( m_elementDescription.empty() ) + { + m_elementDescription = "<unknown source>"; + } + return m_elementDescription; +} + +template<class ImplTraits> +RewriteRuleTokenStream<ImplTraits>::~RewriteRuleTokenStream() +{ + // Before placing the stream back in the pool, we + // need to clear any vector it has. This is so any + // free pointers that are associated with the + // entries are called. However, if this particular function is called + // then we know that the entries in the stream are definitely + // tree nodes. Hence we check to see if any of them were nilNodes as + // if they were, we can reuse them. + // + // We have some elements to traverse + // + for (ANTLR_UINT32 i = 0; i < m_elements.size(); i++) + { + const ElementType *tree = m_elements.at(i); + //if ( (tree != NULL) && tree->isNilNode() ) + { + // Had to remove this for now, check is not comprehensive enough + // tree->reuse(tree); + } + } + m_elements.clear(); +} + +template<class ImplTraits> +const typename RewriteRuleTokenStream<ImplTraits>::TokenType* +RewriteRuleTokenStream<ImplTraits>::nextToken() +{ + auto retval = this->_next(); + if (retval == m_elements.end()) + return NULL; + else + return *retval; +} + +} |