X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fcpp%2FDataBoardTest%2Flibantlr3c-3.2%2Finclude%2Fantlr3commontree.h;h=1516ecc185dcbb6e8b2680bb003040a457cd1634;hp=bca713c8a61d38bd9967d567e5ee04b612727b08;hb=refs%2Fchanges%2F38%2F238%2F2;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.databoard/cpp/DataBoardTest/libantlr3c-3.2/include/antlr3commontree.h b/bundles/org.simantics.databoard/cpp/DataBoardTest/libantlr3c-3.2/include/antlr3commontree.h index bca713c8a..1516ecc18 100644 --- a/bundles/org.simantics.databoard/cpp/DataBoardTest/libantlr3c-3.2/include/antlr3commontree.h +++ b/bundles/org.simantics.databoard/cpp/DataBoardTest/libantlr3c-3.2/include/antlr3commontree.h @@ -1,167 +1,167 @@ -/** Interface for an ANTLR3 common tree which is what gets - * passed around by the AST producing parser. - */ - -#ifndef _ANTLR3_COMMON_TREE_H -#define _ANTLR3_COMMON_TREE_H - -// [The "BSD licence"] -// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC -// http://www.temporal-wave.com -// http://www.linkedin.com/in/jimidle -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. 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. -// 3. The name of the author may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ANTLR3_COMMON_TREE_struct -{ - - /// Not used by ANTLR, but if a super structure is created above - /// this structure, it can be used to point to the start of the super - /// structure, where additional data and function pointers can be stored. - /// - void * super; - - /// Start token index that encases this tree - /// - ANTLR3_MARKER startIndex; - - /// End token that encases this tree - /// - ANTLR3_MARKER stopIndex; - - /// A single token, this is the payload for the tree - /// - pANTLR3_COMMON_TOKEN token; - - /// Points to the node that has this node as a child. - /// If this is NULL, then this is the root node. - /// - pANTLR3_COMMON_TREE parent; - - /// What index is this particular node in the child list it - /// belongs to? - /// - ANTLR3_INT32 childIndex; - - /// Pointer to the tree factory that manufactured this - /// token. This can be used by duplication methods and so on - /// to manufacture another auto-tracked common tree structure - /// - pANTLR3_ARBORETUM factory; - - /// An encapsulated BASE TREE structure (NOT a pointer) - /// that performs a lot of the dirty work of node management - /// To this we add just a few functions that are specific to the - /// payload. You can further abstract common tree so long - /// as you always have a baseTree pointer in the top structure - /// and copy it from the next one down. - /// So, lets say we have a structure JIMS_TREE. - /// It needs an ANTLR3_BASE_TREE that will support all the - /// general tree duplication stuff. - /// It needs a ANTLR3_COMMON_TREE structure embedded or completely - /// provides the equivalent interface. - /// It provides it's own methods and data. - /// To create a new one of these, the function provided to - /// the tree adaptor (see comments there) should allocate the - /// memory for a new JIMS_TREE structure, then call - /// antlr3InitCommonTree() - /// antlr3BaseTreeNew() - /// The interfaces for BASE_TREE and COMMON_TREE will then - /// be initialized. You then call and you can override them or just init - /// JIMS_TREE (note that the base tree in common tree will be ignored) - /// just the top level base tree is used). Codegen will take care of the rest. - /// - ANTLR3_BASE_TREE baseTree; - -} - ANTLR3_COMMON_TREE; - -/// \brief ANTLR3 Tree factory interface to create lots of trees efficiently -/// rather than creating and freeing lots of little bits of memory. -/// -typedef struct ANTLR3_ARBORETUM_struct -{ - /// Pointers to the array of tokens that this factory has produced so far - /// - pANTLR3_COMMON_TREE *pools; - - /// Current pool tokens we are allocating from - /// - ANTLR3_INT32 thisPool; - - /// The next token to throw out from the pool, will cause a new pool allocation - /// if this exceeds the available tokenCount - /// - ANTLR3_UINT32 nextTree; - - /// Trick to initialize tokens and their API quickly, we set up this token when the - /// factory is created, then just copy the memory it uses into the new token. - /// - ANTLR3_COMMON_TREE unTruc; - - /// Pointer to a vector factory that is used to create child list vectors - /// for any child nodes that need them. This means that we auto track the - /// vectors and auto free them when we close the factory. It also means - /// that all rewriting trees can use the same tree factory and the same - /// vector factory and we do not dup any nodes unless we must do so - /// explicitly because of context such as an empty rewrite stream and - /// ->IMAGINARY[ID] so on. This makes memory tracking much simpler and - /// tempts no errors. - /// - pANTLR3_VECTOR_FACTORY vFactory; - - /// A resuse stack for reclaiming Nil nodes that were used in rewrites - /// and are now dead. The nilNode() method will eat one of these before - /// creating a new node. - /// - pANTLR3_STACK nilStack; - - /// Pointer to a function that returns a new tree - /// - pANTLR3_BASE_TREE (*newTree) (struct ANTLR3_ARBORETUM_struct * factory); - pANTLR3_BASE_TREE (*newFromTree) (struct ANTLR3_ARBORETUM_struct * factory, pANTLR3_COMMON_TREE tree); - pANTLR3_BASE_TREE (*newFromToken) (struct ANTLR3_ARBORETUM_struct * factory, pANTLR3_COMMON_TOKEN token); - - /// Pointer to a function the destroys the factory - /// - void (*close) (struct ANTLR3_ARBORETUM_struct * factory); -} - ANTLR3_ARBORETUM; - -#ifdef __cplusplus -} -#endif - -#endif - - +/** Interface for an ANTLR3 common tree which is what gets + * passed around by the AST producing parser. + */ + +#ifndef _ANTLR3_COMMON_TREE_H +#define _ANTLR3_COMMON_TREE_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. 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. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_COMMON_TREE_struct +{ + + /// Not used by ANTLR, but if a super structure is created above + /// this structure, it can be used to point to the start of the super + /// structure, where additional data and function pointers can be stored. + /// + void * super; + + /// Start token index that encases this tree + /// + ANTLR3_MARKER startIndex; + + /// End token that encases this tree + /// + ANTLR3_MARKER stopIndex; + + /// A single token, this is the payload for the tree + /// + pANTLR3_COMMON_TOKEN token; + + /// Points to the node that has this node as a child. + /// If this is NULL, then this is the root node. + /// + pANTLR3_COMMON_TREE parent; + + /// What index is this particular node in the child list it + /// belongs to? + /// + ANTLR3_INT32 childIndex; + + /// Pointer to the tree factory that manufactured this + /// token. This can be used by duplication methods and so on + /// to manufacture another auto-tracked common tree structure + /// + pANTLR3_ARBORETUM factory; + + /// An encapsulated BASE TREE structure (NOT a pointer) + /// that performs a lot of the dirty work of node management + /// To this we add just a few functions that are specific to the + /// payload. You can further abstract common tree so long + /// as you always have a baseTree pointer in the top structure + /// and copy it from the next one down. + /// So, lets say we have a structure JIMS_TREE. + /// It needs an ANTLR3_BASE_TREE that will support all the + /// general tree duplication stuff. + /// It needs a ANTLR3_COMMON_TREE structure embedded or completely + /// provides the equivalent interface. + /// It provides it's own methods and data. + /// To create a new one of these, the function provided to + /// the tree adaptor (see comments there) should allocate the + /// memory for a new JIMS_TREE structure, then call + /// antlr3InitCommonTree() + /// antlr3BaseTreeNew() + /// The interfaces for BASE_TREE and COMMON_TREE will then + /// be initialized. You then call and you can override them or just init + /// JIMS_TREE (note that the base tree in common tree will be ignored) + /// just the top level base tree is used). Codegen will take care of the rest. + /// + ANTLR3_BASE_TREE baseTree; + +} + ANTLR3_COMMON_TREE; + +/// \brief ANTLR3 Tree factory interface to create lots of trees efficiently +/// rather than creating and freeing lots of little bits of memory. +/// +typedef struct ANTLR3_ARBORETUM_struct +{ + /// Pointers to the array of tokens that this factory has produced so far + /// + pANTLR3_COMMON_TREE *pools; + + /// Current pool tokens we are allocating from + /// + ANTLR3_INT32 thisPool; + + /// The next token to throw out from the pool, will cause a new pool allocation + /// if this exceeds the available tokenCount + /// + ANTLR3_UINT32 nextTree; + + /// Trick to initialize tokens and their API quickly, we set up this token when the + /// factory is created, then just copy the memory it uses into the new token. + /// + ANTLR3_COMMON_TREE unTruc; + + /// Pointer to a vector factory that is used to create child list vectors + /// for any child nodes that need them. This means that we auto track the + /// vectors and auto free them when we close the factory. It also means + /// that all rewriting trees can use the same tree factory and the same + /// vector factory and we do not dup any nodes unless we must do so + /// explicitly because of context such as an empty rewrite stream and + /// ->IMAGINARY[ID] so on. This makes memory tracking much simpler and + /// tempts no errors. + /// + pANTLR3_VECTOR_FACTORY vFactory; + + /// A resuse stack for reclaiming Nil nodes that were used in rewrites + /// and are now dead. The nilNode() method will eat one of these before + /// creating a new node. + /// + pANTLR3_STACK nilStack; + + /// Pointer to a function that returns a new tree + /// + pANTLR3_BASE_TREE (*newTree) (struct ANTLR3_ARBORETUM_struct * factory); + pANTLR3_BASE_TREE (*newFromTree) (struct ANTLR3_ARBORETUM_struct * factory, pANTLR3_COMMON_TREE tree); + pANTLR3_BASE_TREE (*newFromToken) (struct ANTLR3_ARBORETUM_struct * factory, pANTLR3_COMMON_TOKEN token); + + /// Pointer to a function the destroys the factory + /// + void (*close) (struct ANTLR3_ARBORETUM_struct * factory); +} + ANTLR3_ARBORETUM; + +#ifdef __cplusplus +} +#endif + +#endif + +