NCBI C++ ToolKit
|
Search Toolkit Book for mu::ParserByteCode
Bytecode implementation of the Math Parser. More...
#include <gui/utils/muparser/muParserBytecode.h>
Public Types | |
typedef bytecode_type | map_type |
Underlying type of the container. More... | |
Public Member Functions | |
ParserByteCode () | |
Bytecode default constructor. More... | |
~ParserByteCode () | |
Destructor (trivial). More... | |
ParserByteCode (const ParserByteCode &a_ByteCode) | |
Copy constructor. More... | |
ParserByteCode & | operator= (const ParserByteCode &a_ByteCode) |
Assignment operator. More... | |
void | Assign (const ParserByteCode &a_ByteCode) |
Copy state of another object to this. More... | |
void | AddVar (value_type *a_pVar) |
Add a Variable pointer to bytecode. More... | |
void | AddVal (value_type a_fVal) |
Add a Variable pointer to bytecode. More... | |
void | AddOp (ECmdCode a_Oprt) |
Add an operator identifier to bytecode. More... | |
void | AddAssignOp (value_type *a_pVar) |
Add an assignement operator. More... | |
void | AddFun (void *a_pFun, int a_iArgc) |
Add function to bytecode. More... | |
void | AddStrFun (void *a_pFun, int a_iArgc, int a_iIdx) |
Add Strung function entry to the parser bytecode. More... | |
void | Finalize () |
Add end marker to bytecode. More... | |
void | clear () |
Delete the bytecode. More... | |
std::size_t | GetBufSize () const |
const map_type * | GetRawData () const |
Get Pointer to bytecode data storage. More... | |
unsigned | GetValSize () const |
Return size of a value entry. More... | |
unsigned | GetPtrSize () const |
Return size of a pointer entry. More... | |
void | RemoveValEntries (unsigned a_iNumber) |
Remove a value number of entries from the bytecode. More... | |
void | AsciiDump () |
Dump bytecode (for debugging only!). More... | |
Private Types | |
typedef ParserToken< value_type, string_type > | token_type |
Token type for internal use only. More... | |
typedef std::vector< map_type > | storage_type |
Core type of the bytecode. More... | |
Private Member Functions | |
void | StorePtr (void *a_pAddr) |
Store an address in bytecode. More... | |
Private Attributes | |
unsigned | m_iStackPos |
Position in the Calculation array. More... | |
storage_type | m_vBase |
Core type of the bytecode. More... | |
const int | mc_iSizeVal |
Size of a value entry in the bytecode, relative to TMapType size. More... | |
const int | mc_iSizePtr |
Size of a pointer, relative to size of underlying TMapType. More... | |
const int | mc_iSizeValEntry |
A value entry requires that much entires in the bytecode. More... | |
Bytecode implementation of the Math Parser.
The bytecode contains the formula converted to revers polish notation stored in a continious memory area. Associated with this data are operator codes, variable pointers, constant values and function pointers. Those are necessary in order to calculate the result. All those data items will be casted to the underlying datatype of the bytecode.
Definition at line 55 of file muParserBytecode.h.
Underlying type of the container.
The bytecode is a vector of this type containing control codes, values and pointers. Values and pointer will be casted to this type before their storage.
Definition at line 64 of file muParserBytecode.h.
|
private |
Core type of the bytecode.
Definition at line 72 of file muParserBytecode.h.
|
private |
Token type for internal use only.
Definition at line 69 of file muParserBytecode.h.
mu::ParserByteCode::ParserByteCode | ( | ) |
Bytecode default constructor.
Definition at line 47 of file muParserBytecode.cpp.
References m_vBase.
mu::ParserByteCode::~ParserByteCode | ( | ) |
Destructor (trivial).
Definition at line 59 of file muParserBytecode.cpp.
mu::ParserByteCode::ParserByteCode | ( | const ParserByteCode & | a_ByteCode | ) |
Copy constructor.
Implemented in Terms of Assign(const ParserByteCode &a_ByteCode)
Definition at line 67 of file muParserBytecode.cpp.
References Assign().
void mu::ParserByteCode::AddAssignOp | ( | value_type * | a_pVar | ) |
Add an assignement operator.
Operator entries in byte code consist of:
Definition at line 207 of file muParserBytecode.cpp.
References mu::cmASSIGN, m_iStackPos, m_vBase, and StorePtr().
Referenced by mu::ParserBase::ApplyBinOprt().
void mu::ParserByteCode::AddFun | ( | void * | a_pFun, |
int | a_iArgc | ||
) |
Add function to bytecode.
a_iArgc | Number of arguments, negative numbers indicate multiarg functions. |
a_pFun | Pointer to function callback. |
Definition at line 220 of file muParserBytecode.cpp.
References mu::cmFUNC, m_iStackPos, m_vBase, and StorePtr().
Referenced by mu::ParserBase::ApplyNumFunc().
void mu::ParserByteCode::AddOp | ( | ECmdCode | a_Oprt | ) |
Add an operator identifier to bytecode.
Operator entries in byte code consist of:
Definition at line 190 of file muParserBytecode.cpp.
References m_iStackPos, and m_vBase.
Referenced by mu::ParserBase::ApplyBinOprt().
Add Strung function entry to the parser bytecode.
nothrow | A string function entry consists of the stack position of the return value, followed by a cmSTRFUNC code, the function pointer and an index into the string buffer maintained by the parser. |
Definition at line 246 of file muParserBytecode.cpp.
References mu::cmFUNC_STR, m_iStackPos, m_vBase, and StorePtr().
Referenced by mu::ParserBase::ApplyStrFunc().
void mu::ParserByteCode::AddVal | ( | value_type | a_fVal | ) |
Add a Variable pointer to bytecode.
Value entries in byte code consist of:
a_pVal | Value to be added. |
nothrow |
Definition at line 170 of file muParserBytecode.cpp.
References mu::cmVAL, i, m_iStackPos, m_vBase, and mc_iSizeVal.
Referenced by mu::ParserBase::ApplyBinOprt(), mu::ParserBase::ApplyNumFunc(), and mu::ParserBase::ParseString().
void mu::ParserByteCode::AddVar | ( | value_type * | a_pVar | ) |
Add a Variable pointer to bytecode.
a_pVar | Pointer to be added. |
nothrow |
Definition at line 141 of file muParserBytecode.cpp.
References assert, mu::cmVAR, i, m_iStackPos, m_vBase, mc_iSizePtr, mc_iSizeVal, and StorePtr().
Referenced by mu::ParserBase::ParseString().
void mu::ParserByteCode::AsciiDump | ( | ) |
Dump bytecode (for debugging only!).
Definition at line 318 of file muParserBytecode.cpp.
References mu::cmADD, mu::cmAND, mu::cmASSIGN, mu::cmDIV, mu::cmEND, mu::cmEQ, mu::cmFUNC, mu::cmFUNC_STR, mu::cmGE, mu::cmGT, mu::cmLE, mu::cmLT, mu::cmMUL, mu::cmNEQ, mu::cmOR, mu::cmPOW, mu::cmSUB, mu::cmVAL, mu::cmVAR, mu::cmXOR, hex(), i, int, m_vBase, max(), mc_iSizePtr, and mc_iSizeVal.
Referenced by mu::ParserBase::ParseString().
void mu::ParserByteCode::Assign | ( | const ParserByteCode & | a_ByteCode | ) |
Copy state of another object to this.
nowthrow |
Definition at line 127 of file muParserBytecode.cpp.
References m_iStackPos, and m_vBase.
Referenced by operator=(), and ParserByteCode().
void mu::ParserByteCode::clear | ( | void | ) |
Delete the bytecode.
nothrow | The name of this function is a violation of my own coding guidelines but this way it's more in line with the STL functions thus more intuitive. |
Definition at line 295 of file muParserBytecode.cpp.
References m_iStackPos, and m_vBase.
Referenced by mu::ParserBase::ClearFormula(), and mu::ParserBase::ReInit().
void mu::ParserByteCode::Finalize | ( | void | ) |
Add end marker to bytecode.
nothrow |
Definition at line 262 of file muParserBytecode.cpp.
References mu::cmEND, and m_vBase.
Referenced by mu::ParserBase::ParseString().
std::size_t mu::ParserByteCode::GetBufSize | ( | ) | const |
Definition at line 281 of file muParserBytecode.cpp.
References m_vBase.
Referenced by mu::ParserBase::ParseString().
|
inline |
Return size of a pointer entry.
That many bytecode entries are necessary to store a pointer.
Definition at line 142 of file muParserBytecode.h.
References mc_iSizePtr.
Referenced by mu::ParserBase::ParseCmdCode().
const ParserByteCode::map_type * mu::ParserByteCode::GetRawData | ( | ) | const |
Get Pointer to bytecode data storage.
Definition at line 274 of file muParserBytecode.cpp.
References assert, and m_vBase.
Referenced by mu::ParserBase::ParseString().
|
inline |
Return size of a value entry.
That many bytecode entries are necessary to store a value.
Definition at line 131 of file muParserBytecode.h.
References mc_iSizeVal.
Referenced by mu::ParserBase::ParseCmdCode(), and mu::ParserBase::ParseString().
ParserByteCode & mu::ParserByteCode::operator= | ( | const ParserByteCode & | a_ByteCode | ) |
Assignment operator.
Implemented in Terms of Assign(const ParserByteCode &a_ByteCode)
Definition at line 80 of file muParserBytecode.cpp.
References Assign().
void mu::ParserByteCode::RemoveValEntries | ( | unsigned | a_iNumber | ) |
Remove a value number of entries from the bytecode.
Definition at line 306 of file muParserBytecode.cpp.
References assert, m_iStackPos, m_vBase, and mc_iSizeValEntry.
Referenced by mu::ParserBase::ApplyBinOprt(), and mu::ParserBase::ApplyNumFunc().
|
private |
Store an address in bytecode.
a_pAddr | Address to be stored. |
nothrow |
Definition at line 92 of file muParserBytecode.cpp.
References i, m_vBase, and mc_iSizePtr.
Referenced by AddAssignOp(), AddFun(), AddStrFun(), and AddVar().
|
private |
Position in the Calculation array.
Definition at line 75 of file muParserBytecode.h.
Referenced by AddAssignOp(), AddFun(), AddOp(), AddStrFun(), AddVal(), AddVar(), Assign(), clear(), and RemoveValEntries().
|
private |
Core type of the bytecode.
Definition at line 78 of file muParserBytecode.h.
Referenced by AddAssignOp(), AddFun(), AddOp(), AddStrFun(), AddVal(), AddVar(), AsciiDump(), Assign(), clear(), Finalize(), GetBufSize(), GetRawData(), ParserByteCode(), RemoveValEntries(), and StorePtr().
Size of a pointer, relative to size of underlying TMapType.
Definition at line 87 of file muParserBytecode.h.
Referenced by AddVar(), AsciiDump(), GetPtrSize(), and StorePtr().
Size of a value entry in the bytecode, relative to TMapType size.
Definition at line 81 of file muParserBytecode.h.
Referenced by AddVal(), AddVar(), AsciiDump(), and GetValSize().
A value entry requires that much entires in the bytecode.
Value entry consists of:
Definition at line 100 of file muParserBytecode.h.
Referenced by RemoveValEntries().