Blame projects/neural/segment.inc.cpp

Ivan Mahonin b579b3
#ifndef SEGMENT_INC_CPP
Ivan Mahonin b579b3
#define SEGMENT_INC_CPP
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
#include "layer.inc.cpp"
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
class Segment: public WeightHolder {
Ivan Mahonin b579b3
public:
Ivan Mahonin b579b3
  const int sx, sy, sz;
Ivan Mahonin b579b3
  
Ivan Mahonin e4740d
  int effectiveLinks;
Ivan Mahonin b579b3
  Layout layout;
Ivan Mahonin b579b3
  NeuronReal *f_values;
Ivan Mahonin b579b3
  
Ivan Mahonin b579b3
  Segment(int sx, int sy, int sz, int weightsCount, Weight *weights = nullptr):
Ivan Mahonin e4740d
    WeightHolder(weightsCount, weights), sx(sx), sy(sy), sz(sz), effectiveLinks(weightsCount), f_values() { }
Ivan Mahonin b579b3
  
Ivan Mahonin b579b3
  virtual ~Segment() { }
Ivan Mahonin b579b3
  
Ivan Mahonin b579b3
  virtual void clear() { }
Ivan Mahonin b579b3
  virtual void split(int threadsCount) { }
Ivan Mahonin b579b3
  
Ivan Mahonin b579b3
  virtual Quality pass(Barrier &barrier, int x, int y, int z, NeuronReal trainRatio) { return barrier.tid ? Quality() : testPass(x, y, z, trainRatio); }
Ivan Mahonin b579b3
  virtual Quality testPass(int x, int y, int z, NeuronReal trainRatio) { return Quality::bad(); }
Ivan Mahonin b579b3
  
Ivan Mahonin b579b3
  
Ivan Mahonin b579b3
  inline void check(int x, int y, int z) {
Ivan Mahonin b579b3
    #ifndef NDEBUG
Ivan Mahonin b579b3
    Layout l = layout;
Ivan Mahonin b579b3
    assert(l);
Ivan Mahonin b579b3
    assert(f_values);
Ivan Mahonin b579b3
    assert(weights);
Ivan Mahonin b579b3
    assert(l.x0 <= x && x+sx <= l.x1);
Ivan Mahonin b579b3
    assert(l.y0 <= y && y+sy <= l.y1);
Ivan Mahonin b579b3
    assert(l.z0 <= z && z+sz <= l.z1);
Ivan Mahonin b579b3
    #endif
Ivan Mahonin b579b3
  }
Ivan Mahonin b579b3
};
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
#endif
Ivan Mahonin b579b3