#ifndef GledCore_SGridStepper_H
#define GledCore_SGridStepper_H
#include <TObject.h>
class ZNode;
class SGridStepper : public TObject
{
public:
  enum StepMode_e { SM_XYZ, SM_YXZ, SM_XZY };
protected:
  Int_t *ls[3], *ns[3];
  void _init_internals(StepMode_e mode);
public:
  StepMode_e Mode;
  Int_t   nx, ny, nz;
  Int_t   Nx, Ny, Nz;
  Float_t Dx, Dy, Dz;
  Float_t Ox, Oy, Oz;
  SGridStepper(Int_t sm=SM_XYZ);
  SGridStepper(const SGridStepper& s, Bool_t as_parent=false);
  virtual ~SGridStepper() {}
  void Reset();
  void Subtract(const SGridStepper& s);
  void SetNs(Int_t nx, Int_t ny, Int_t nz=1)
  { Nx = nx; Ny = ny; Nz = nz; }
  void SetDs(Float_t dx, Float_t dy, Float_t dz=0)
  { Dx = dx; Dy = dy; Dz = dz; }
  void SetOs(Float_t ox, Float_t oy, Float_t oz=0)
  { Ox = ox; Oy = oy; Oz = oz; }
  bool Step();
  void GetPosition(Float_t* p);
  void SetNode(ZNode* node);
  void SetNodeAdvance(ZNode* node);
  ClassDef(SGridStepper, 1); 
}; 
#endif