// Path: src/roquen/fake/Vect2i.java
// public class Vect2i {
//   public int x, y;
//   
//   /** */
//   private static final int HASH = hashMakeSeed(0);
//   
//   @Override
//   public int hashCode()
//   {
//     return hashComplete(hashAdd(HASH,x,y));
//   }
// }


import roquen.fake.Vect2i;

package roquen.math.sfc;


/**
 * Trivial indexing scheme for drop-in-replacement testing of apple-to-apples (almost)
 */
public final class RowLinearIndex2D extends Index2D<RowLinearIndex2D>
{ 
  private final int D;
  
  public RowLinearIndex2D(int dim)
  {
    D = dim;
  }
  
  @Override
  public final void set(Vect2i v)
  {
   sx = v.x; sy = v.y;
  }
  
  @Override
  public void set(RowLinearIndex2D v) 
  {
    sx = v.sx;
    sy = v.sy;
  }
  
  @Override

// Path: src/roquen/fake/Vect2i.java
// public class Vect2i {
//   public int x, y;
//   
//   /** */
//   private static final int HASH = hashMakeSeed(0);
//   
//   @Override
//   public int hashCode()
//   {
//     return hashComplete(hashAdd(HASH,x,y));
//   }
// }


// Path: src/roquen/math/sfc/RowLinearIndex2D.java
import roquen.fake.Vect2i;

package roquen.math.sfc;


/**
 * Trivial indexing scheme for drop-in-replacement testing of apple-to-apples (almost)
 */
public final class RowLinearIndex2D extends Index2D<RowLinearIndex2D>
{ 
  private final int D;
  
  public RowLinearIndex2D(int dim)
  {
    D = dim;
  }
  
  @Override
  public final void set(Vect2i v)
  {
   sx = v.x; sy = v.y;
  }
  
  @Override
  public void set(RowLinearIndex2D v) 
  {
    sx = v.sx;
    sy = v.sy;
  }
  
  @Override

  public final void get(Vect2i v)
