/* xbexpnode.h
XBase64 Software Library
Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
Email Contact:
XDB-devel@lists.sourceforge.net
XDB-users@lists.sourceforge.net
*/
#ifndef __XB_EXPNODE_H__
#define __XB_EXPNODE_H__
// #ifdef CMAKE_COMPILER_IS_GNUCC
// #pragma interface
// #endif
#ifdef XB_EXPRESSION_SUPPORT
namespace xb{
//class XBDLLEXPORT xbDbf;
/************************************************************************/
//! @brief Expression node class for handling expression nodes.
/*!
The xbExpNode class is used by the expression logic for handling specific
nodes within a tree of nodes.
Expressions are parsed into nodes and a logical tree of nodes is created
out of all the individual components within the expression.
This class is used for handling a specific node within a tree.
An application program will typically not need to be concerned with
this class.
*/
class XBDLLEXPORT xbExpNode {
public:
xbExpNode();
xbExpNode( xbString &sNodeText, char cReturnType, char cNodeType );
xbExpNode( xbString &sNodeText, char cNodeType );
xbExpNode( char cNodeType );
virtual ~xbExpNode();
xbInt16 AddChild( xbExpNode *n );
xbExpNode *GetChild( xbUInt32 ulChildNo ) const;
xbUInt32 GetChildCnt() const;
xbUInt32 GetChildNo() const;
xbDbf *GetDbf() const;
xbInt16 GetFieldNo() const;
xbExpNode *GetFirstNode();
xbExpNode *GetNextNode() const;
void GetNodeText( xbString &sNodeText ) const;
char GetNodeType() const;
xbExpNode *GetParent() const;
xbString &GetStringResult();
xbBool GetBoolResult() const;
xbDouble GetNumericResult() const;
xbUInt32 GetResultLen() const;
xbExpNode *GetRightSibling() const;
char GetReturnType() const;
xbInt16 GetWeight() const;
xbBool HasRightSibling() const;
xbBool IsOperator() const;
xbBool IsUnaryOperator() const;
void RemoveLastChild();
void SetResultLen( xbUInt32 ulResultLen );
void SetDbfInfo( xbDbf *dbf );
void SetDbfInfo( xbDbf *dbf, xbInt16 iFieldNo );
void SetNodeText( xbString &sNodeText );
void SetNodeType( char cNodeType );
void SetParent( xbExpNode *n );
void SetResult( xbString &sResult );
void SetResult( xbDate &dtResult );
void SetResult( xbBool bResult );
void SetResult( xbDouble dResult );
void SetReturnType( char cReturnType );
void SetWeight( xbInt16 iWeight );
#ifdef XB_DEBUG_SUPPORT
void DumpNode( xbInt16 iOption ) const; // 0 = no children, 1 = and children
#endif
private:
xbString sNodeText; // expression text
char cReturnType; // one of: XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC
char cNodeType; // one of: XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR
xbString sResult; // char result, and operator
xbDouble dResult; // numeric and bool results
xbExpNode * nParent; // pointer to parent
xbLinkList llChildren; // linked list of descendent nodes
xbDbf *dbf; // pointer to dbf, used for field, RECNO() and RECCOUNT()
xbInt16 iFieldNo; // field no if DBF field
xbUInt32 ulResultLen; // for string results, accumulated length of character operations
// includes the sum of all nodes under this + this
// date = 8, numeric = 4, logical = 1
xbInt16 iWeight; // used for building the tree of nodes, assigned to operators
// the higher the number, the lower it goes on the tree
};
/************************************************************************/
/* Expression handler */
};
#endif // XB_EXPRESSION_SUPPORT
#endif // __XB_EXP_H__