00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHFIXEDMANIPULATOR_HPP
00025 #define SHFIXEDMANIPULATOR_HPP
00026
00027 #include <vector>
00028 #include "ShDllExport.hpp"
00029 #include "ShProgram.hpp"
00030
00031 namespace SH {
00032
00033 typedef ShProgramNode::VarList::const_iterator ShManipVarIterator;
00034
00040 class
00041 SH_DLLEXPORT ShFixedManipulatorNode: public ShRefCountable {
00042 public:
00043 ShFixedManipulatorNode();
00044 virtual ~ShFixedManipulatorNode();
00045
00051 virtual ShProgram applyToInputs(ShManipVarIterator &finger, ShManipVarIterator end) const = 0;
00052
00058 virtual ShProgram applyToOutputs(ShManipVarIterator &finger, ShManipVarIterator end) const = 0;
00059 };
00060 typedef ShPointer<ShFixedManipulatorNode> ShFixedManipulator;
00061
00062 class
00063 SH_DLLEXPORT ShKeepNode: public ShFixedManipulatorNode {
00064 public:
00065 ShKeepNode(int numChannels);
00066 ShProgram applyToInputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00067 ShProgram applyToOutputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00068
00069 private:
00070 int m_numChannels;
00071 };
00072 SH_DLLEXPORT
00073 ShFixedManipulator shKeep(int numChannels = 1);
00074
00075 class
00076 SH_DLLEXPORT ShLoseNode: public ShFixedManipulatorNode {
00077 public:
00078 ShLoseNode(int numChannels);
00079 ShProgram applyToInputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00080 ShProgram applyToOutputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00081
00082 private:
00083 int m_numChannels;
00084 };
00085 SH_DLLEXPORT
00086 ShFixedManipulator shLose(int numChannels = 1);
00087
00088 class
00089 SH_DLLEXPORT ShDupNode: public ShFixedManipulatorNode {
00090 public:
00091 ShDupNode(int numDups);
00092 ShProgram applyToInputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00093 ShProgram applyToOutputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00094
00095 private:
00096 int m_numDups;
00097 };
00098 SH_DLLEXPORT
00099 ShFixedManipulator shDup(int numDups = 2);
00100
00101
00102
00103
00104
00105
00106
00107
00108 class
00109 SH_DLLEXPORT ShProgramManipNode: public ShFixedManipulatorNode {
00110 public:
00111 ShProgram applyToInputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00112 ShProgram applyToOutputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00113
00114 private:
00115 ShProgram p;
00116
00117 ShProgramManipNode(const ShProgram &p);
00118
00119 friend SH_DLLEXPORT
00120 ShFixedManipulator operator&(const ShFixedManipulator &m, const ShProgram &p );
00121 friend SH_DLLEXPORT
00122 ShFixedManipulator operator&( const ShProgram &p, const ShFixedManipulator &m);
00123 };
00124
00125
00126 class ShTreeManipNode: public ShFixedManipulatorNode {
00127 public:
00128 ShProgram applyToInputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00129 ShProgram applyToOutputs(ShManipVarIterator &finger, ShManipVarIterator end) const;
00130 private:
00131 ShFixedManipulator a, b;
00132
00133 ShTreeManipNode(const ShFixedManipulator &a, const ShFixedManipulator &b);
00134
00135 friend SH_DLLEXPORT
00136
00137 ShFixedManipulator operator&(const ShFixedManipulator &m, const ShFixedManipulator &n);
00138 };
00139
00140 SH_DLLEXPORT
00141 ShProgram operator<<(const ShProgram &p, const ShFixedManipulator &m);
00142 SH_DLLEXPORT
00143 ShProgram operator<<(const ShFixedManipulator &m, const ShProgram &p);
00144 SH_DLLEXPORT
00145 ShFixedManipulator operator&(const ShFixedManipulator &m,
00146 const ShFixedManipulator &n);
00147 SH_DLLEXPORT
00148 ShFixedManipulator operator&(const ShFixedManipulator &m,
00149 const ShProgram &p );
00150 SH_DLLEXPORT
00151 ShFixedManipulator operator&(const ShProgram &p,
00152 const ShFixedManipulator &m);
00153
00154 }
00155
00156 #endif