Blame projects/neural/segment.inc.cpp

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