BVB Source Codes

CRYENGINE Show SelectionCondition.h Source code

Return Download CRYENGINE: download SelectionCondition.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __SelectionCondition_h__
  4. #define __SelectionCondition_h__
  5.  
  6. #pragma once
  7.  
  8. /*
  9.    Simple logical expression for use as node conditions in the selection tree.
  10.    The expression is pre-compiled and stored as a vector of byte-code ops.
  11.  */
  12.  
  13. class SimpleLexer;
  14. class SelectionVariables;
  15. class SelectionVariableDeclarations;
  16.  
  17. class SelectionCondition
  18. {
  19.         struct ConditionOp;
  20. public:
  21.         SelectionCondition();
  22.         SelectionCondition(const char* condition, const SelectionVariableDeclarations& variables);
  23.  
  24.         bool Evaluate(const SelectionVariables& variables) const;
  25.         bool Valid() const;
  26.  
  27. private:
  28.         int  AddOp(const ConditionOp& op);
  29.         int  ParseLogical(SimpleLexer& lex, int tok, const SelectionVariableDeclarations& variables);
  30.         int  ParseCompOp(SimpleLexer& lex, int tok, const SelectionVariableDeclarations& variables);
  31.         int  ParseUnary(SimpleLexer& lex, int tok, const SelectionVariableDeclarations& variables);
  32.         int  ParseValue(SimpleLexer& lex, int tok, const SelectionVariableDeclarations& variables);
  33.         int  Parse(const char* condition, const SelectionVariableDeclarations& variables);
  34.         void Optimise();
  35.  
  36.         bool EvaluateOp(const SelectionVariables& variables, const struct ConditionOp& op) const;
  37.  
  38.         struct ConditionOp
  39.         {
  40.                 enum Type
  41.                 {
  42.                         Not = 1,
  43.                         And,
  44.                         Or,
  45.                         Xor,
  46.                         Equal,
  47.                         NotEqual,
  48.                         Constant,
  49.                         Variable,
  50.                 };
  51.  
  52.                 ConditionOp()
  53.                         : value(false)
  54.                 {
  55.                 }
  56.  
  57.                 ConditionOp(int type, int left, int right)
  58.                         : value(false)
  59.                         , opType((Type)type)
  60.                         , operandLeft((uint8)left)
  61.                         , operandRight((uint8)right)
  62.                 {
  63.                 }
  64.  
  65.                 ConditionOp(int type, uint32 varID)
  66.                         : variableID(varID)
  67.                         , value(false)
  68.                         , opType((Type)type)
  69.                 {
  70.                 }
  71.  
  72.                 ConditionOp(int type, bool val)
  73.                         : value(val)
  74.                         , opType((Type)type)
  75.                 {
  76.                 }
  77.  
  78.                 uint32 variableID;
  79.                 bool   value;
  80.  
  81.                 uint8  opType;
  82.                 uint8  operandLeft;
  83.                 uint8  operandRight;
  84.         };
  85.  
  86.         typedef std::vector<ConditionOp> ConditionOps;
  87.         ConditionOps m_conditionOps;
  88.         int          m_rootID;
  89. };
  90.  
  91. DECLARE_SHARED_POINTERS(SelectionCondition)
  92.  
  93. #endif
  94.  
downloadSelectionCondition.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top