Files
qad/mbricks/brick_composite.h
Бычков Андрей ba8bc27298 1
git-svn-id: svn://db.shs.com.ru/libs@1 a8b55f48-bf90-11e4-a774-851b48703e85
2015-02-28 21:28:53 +00:00

104 lines
3.9 KiB
C++

#ifndef BRICK_COMPOSITE_H
#define BRICK_COMPOSITE_H
#include "brick_emits.h"
#include "brick_math.h"
#include "brick_logic.h"
#include "brick_digital.h"
#include "brick_link.h"
#include "brick_interface.h"
#include "brick_statistic.h"
void buildTree(PIVector<BrickBase * > & bricks, PIVector<PIVector<BrickBase * > > & tree);
PIVector<PIVector<BrickBase * > > buildSubtree(PIVector<BrickBase * > & bricks, PIVector<PIVector<BrickBase * > > & tree);
void sumTrees(PIVector<PIVector<BrickBase * > > & ft, PIVector<PIVector<BrickBase * > > & st);
class BrickCompositeBase: public BrickBase {
public: BrickCompositeBase(int inputs_num = 0, int outputs_num = 0, int parameters_num = 1): BrickBase(inputs_num, outputs_num, parameters_num) {lib = "Composite";}
};
class BrickCompositeInput;
class BrickCompositeOutput;
class BrickCompositeParameters;
class BrickCompositeInformation;
class BrickComposite: public BrickCompositeBase {
MBRICK(BrickComposite)
BrickComposite();
virtual bool tick_body(double time);
Mode mode() const {return mode_;}
void setMode(Mode m) {mode_ = m;}
void buildBrickTree() {buildTree(bricks, tree);}
void clear();
void loadScheme(const PIString & file) {setParameterValue(0, file);}
static BrickBase * findBaseBrick(const PIString & code_name);
protected:
virtual void parameterChanged(int index);
virtual void started() {parameterChanged(0); for (uint i = 0; i < bricks.size(); ++i) {bricks[i]->setManager(manager_); bricks[i]->started();}}
virtual void finished() {for (uint i = 0; i < bricks.size(); ++i) bricks[i]->finished();}
virtual void saveInputsToDefault() {defInputs = inputs; for (uint i = 0; i < bricks.size(); ++i) bricks[i]->saveInputsToDefault();}
virtual void resetOutputs() {for (uint i = 0; i < bricks.size(); ++i) bricks[i]->resetOutputs();}
virtual void reset_specified() {for (uint i = 0; i < bricks.size(); ++i) bricks[i]->reset_specified();}
virtual void reset() {BrickBase::reset(); for (uint i = 0; i < bricks.size(); ++i) bricks[i]->reset();}
virtual void proceedConnections(bool compositeToo = false);
BrickBase * findBrick(const PIString & name);
static void loadBrick(PIConfig & sr, const PIString & prefix, BrickBase * b, BrickManager * m = 0);
static void fillBaseBricks();
static PIVector<BrickBase * > baseBricks;
PIVector<BrickBase * > bricks;
PIVector<PIVector<BrickBase * > > tree;
PIVector<BrickBase * > * tl;
BrickCompositeInput * bi;
BrickCompositeOutput * bo;
BrickCompositeParameters * bp;
BrickCompositeInformation * inf;
Mode mode_;
int header_;
};
ADD_NEW_TO_COLLECTION(Composite, BrickComposite)
class BrickCompositeInput: public BrickCompositeBase {
MBRICK(BrickCompositeInput)
BrickCompositeInput(int inputs_num = 1);
virtual bool tick_body(double time) {return true;}
virtual void parameterChanged(int index) {if (outNames.size_s() > index) outNames[index] = parameters[index].toString();}
virtual void outputsCountChanged(int count) {setParametersCount(count, "");}
};
ADD_NEW_TO_COLLECTION(Composite, BrickCompositeInput)
class BrickCompositeOutput: public BrickCompositeBase {
MBRICK(BrickCompositeOutput)
BrickCompositeOutput(int outputs_num = 1);
virtual bool tick_body(double time) {return true;}
virtual void parameterChanged(int index) {if (inNames.size_s() > index) inNames[index] = parameters[index].toString();}
virtual void inputsCountChanged(int count) {setParametersCount(count, "");}
};
ADD_NEW_TO_COLLECTION(Composite, BrickCompositeOutput)
class BrickCompositeParameters: public BrickCompositeBase {
MBRICK(BrickCompositeParameters)
BrickCompositeParameters();
virtual void outputsCountChanged(int count) {setParametersCount(count, "p");}
virtual void parameterChanged(int index);
};
ADD_NEW_TO_COLLECTION(Composite, BrickCompositeParameters)
class BrickCompositeInformation: public BrickCompositeBase {
MBRICK(BrickCompositeInformation)
BrickCompositeInformation();
};
ADD_NEW_TO_COLLECTION(Composite, BrickCompositeInformation)
#endif // BRICK_COMPOSITE_H