The Sparta Modeling Framework
Loading...
Searching...
No Matches
sparta::statistics::expression::BinaryFunction< RetT, ArgT > Struct Template Reference

Represents a Binary function node. More...

#include <ExpressionNodeTypes.hpp>

Inheritance diagram for sparta::statistics::expression::BinaryFunction< RetT, ArgT >:
Collaboration diagram for sparta::statistics::expression::BinaryFunction< RetT, ArgT >:

Public Types

using fxn_t = typename std::conditional< std::is_class< RetT >::value, RetT, RetT(*const)(ArgT, ArgT)>::type
 Function evaluation handler type.
 

Public Member Functions

 BinaryFunction ()=delete
 No default construction.
 
 BinaryFunction (const BinaryFunction &rhp)
 
 BinaryFunction (const std::string &name, fxn_t fxn, ExpressionNode *op1, ExpressionNode *op2)
 
BinaryFunctionoperator= (const BinaryFunction &)=delete
 Non-assignable.
 
virtual BinaryFunctionclone_ () const override
 Deep copy of the content of this item.
 
virtual double evaluate_ () const override
 Compute value of this item in simulation.
 
virtual bool supportsCompression () const override
 
virtual void start () override
 
virtual void end () override
 
virtual void dump (std::ostream &o, bool show_range=true, bool resolve_subexprs=true) const override
 Dump the content of this expression item.
 
virtual void getClocks (std::vector< const Clock * > &clocks) const override
 Populates a vector with the clocks found in this subexpression node.
 
- Public Member Functions inherited from sparta::statistics::expression::ExpressionNode
 ExpressionNode (const ExpressionNode &)=delete
 No copy-constructable.
 
ExpressionNodeclone () const
 
uint32_t getStats (std::vector< const StatisticInstance * > &results) const
 Gets the statistics present in this expression.
 
double evaluate ()
 Compute value of this item in simulation. Must be implemented by subclass.
 

Public Attributes

const std::string name_
 Name of this binary function.
 
const fxn_t fxn_
 Binary function to invoke.
 
std::unique_ptr< ExpressionNodeoperand_1_
 Operand 1 of the unary function fxn_.
 
std::unique_ptr< ExpressionNodeoperand_2_
 Operand 2 of the unary function fxn_.
 

Detailed Description

template<typename RetT = double, typename ArgT = double>
struct sparta::statistics::expression::BinaryFunction< RetT, ArgT >

Represents a Binary function node.

Template Parameters
RetTReturn type of function pointer. Must be convertable to double
ArgTArgument type of function pointer. Must be convertable from a lvalue double

Definition at line 391 of file ExpressionNodeTypes.hpp.

Member Typedef Documentation

◆ fxn_t

template<typename RetT = double, typename ArgT = double>
using sparta::statistics::expression::BinaryFunction< RetT, ArgT >::fxn_t = typename std::conditional< std::is_class<RetT>::value, RetT, RetT(* const)(ArgT, ArgT)>::type

Function evaluation handler type.

Definition at line 396 of file ExpressionNodeTypes.hpp.

Constructor & Destructor Documentation

◆ BinaryFunction() [1/2]

template<typename RetT = double, typename ArgT = double>
sparta::statistics::expression::BinaryFunction< RetT, ArgT >::BinaryFunction ( const BinaryFunction< RetT, ArgT > &  rhp)
inline

Definition at line 427 of file ExpressionNodeTypes.hpp.

◆ BinaryFunction() [2/2]

template<typename RetT = double, typename ArgT = double>
sparta::statistics::expression::BinaryFunction< RetT, ArgT >::BinaryFunction ( const std::string &  name,
fxn_t  fxn,
ExpressionNode op1,
ExpressionNode op2 
)
inline

brief Construct a new binary function

Parameters
Nameof function
unarydouble function pointer
op1Operand 1. Must not be nullptr. Takes ownership
op2Operand 1. Must not be nullptr. Takes ownership

Definition at line 445 of file ExpressionNodeTypes.hpp.

Member Function Documentation

◆ clone_()

template<typename RetT = double, typename ArgT = double>
virtual BinaryFunction * sparta::statistics::expression::BinaryFunction< RetT, ArgT >::clone_ ( ) const
inlineoverridevirtual

Deep copy of the content of this item.

To be overridden by subclasses

Implements sparta::statistics::expression::ExpressionNode.

Definition at line 465 of file ExpressionNodeTypes.hpp.

Here is the call graph for this function:

◆ dump()

template<typename RetT = double, typename ArgT = double>
virtual void sparta::statistics::expression::BinaryFunction< RetT, ArgT >::dump ( std::ostream &  o,
bool  show_range = true,
bool  resolve_subexprs = true 
) const
inlineoverridevirtual

Dump the content of this expression item.

Note
Must not evaluate the expression
Parameters
oOstream to write to
show_rangeShould the range be shown in any subexpression nodes.
resolve_subexprsShould any referenced statistic defs be expanded to their full expressions so that this becomes an expression containing only counters.

Implements sparta::statistics::expression::ExpressionNode.

Definition at line 493 of file ExpressionNodeTypes.hpp.

◆ end()

template<typename RetT = double, typename ArgT = double>
virtual void sparta::statistics::expression::BinaryFunction< RetT, ArgT >::end ( )
inlineoverridevirtual

◆ evaluate_()

template<typename RetT = double, typename ArgT = double>
virtual double sparta::statistics::expression::BinaryFunction< RetT, ArgT >::evaluate_ ( ) const
inlineoverridevirtual

Compute value of this item in simulation.

Implements sparta::statistics::expression::ExpressionNode.

Definition at line 469 of file ExpressionNodeTypes.hpp.

◆ getClocks()

template<typename RetT = double, typename ArgT = double>
virtual void sparta::statistics::expression::BinaryFunction< RetT, ArgT >::getClocks ( std::vector< const Clock * > &  clocks) const
inlineoverridevirtual

Populates a vector with the clocks found in this subexpression node.

Parameters
clocksVector of clocks to which any found clocks will be appended. This vector is not cleared.

Implements sparta::statistics::expression::ExpressionNode.

Definition at line 503 of file ExpressionNodeTypes.hpp.

◆ start()

template<typename RetT = double, typename ArgT = double>
virtual void sparta::statistics::expression::BinaryFunction< RetT, ArgT >::start ( )
inlineoverridevirtual

◆ supportsCompression()

template<typename RetT = double, typename ArgT = double>
virtual bool sparta::statistics::expression::BinaryFunction< RetT, ArgT >::supportsCompression ( ) const
inlineoverridevirtual

We currently are not attempting compression for UnaryFunction, BinaryFunction, and TernaryFunction SI's. These are not used with nearly as much frequency as counters, constants, and parameters.

Implements sparta::statistics::expression::ExpressionNode.

Definition at line 479 of file ExpressionNodeTypes.hpp.

Member Data Documentation

◆ fxn_

template<typename RetT = double, typename ArgT = double>
const fxn_t sparta::statistics::expression::BinaryFunction< RetT, ArgT >::fxn_

Binary function to invoke.

Definition at line 409 of file ExpressionNodeTypes.hpp.

◆ name_

template<typename RetT = double, typename ArgT = double>
const std::string sparta::statistics::expression::BinaryFunction< RetT, ArgT >::name_

Name of this binary function.

Definition at line 404 of file ExpressionNodeTypes.hpp.

◆ operand_1_

template<typename RetT = double, typename ArgT = double>
std::unique_ptr<ExpressionNode> sparta::statistics::expression::BinaryFunction< RetT, ArgT >::operand_1_

Operand 1 of the unary function fxn_.

Definition at line 414 of file ExpressionNodeTypes.hpp.

◆ operand_2_

template<typename RetT = double, typename ArgT = double>
std::unique_ptr<ExpressionNode> sparta::statistics::expression::BinaryFunction< RetT, ArgT >::operand_2_

Operand 2 of the unary function fxn_.

Definition at line 419 of file ExpressionNodeTypes.hpp.


The documentation for this struct was generated from the following file: