// 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;


/**
 * Base class of maintaining a 2-to-1 representation of a 2D coordinate.
 */
public abstract class Index2D<T extends Index2D<T>>
{
  /** Scattered version of x. Publicly visible for copy/storage/restoring. */
  public int sx;
  
  /** Scattered version of y. Publicly visible for copy/storage/restoring. */
  public int sy;
  
  /** Returns the current index */
  public abstract int  getIndex();
  
  /** Copies the represented coordinate 'v' into this. */
  public abstract void set(T v);
  
  /** Set the represented 2D coordinate */

// 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/Index2D.java
import roquen.fake.Vect2i;

package roquen.math.sfc;


/**
 * Base class of maintaining a 2-to-1 representation of a 2D coordinate.
 */
public abstract class Index2D<T extends Index2D<T>>
{
  /** Scattered version of x. Publicly visible for copy/storage/restoring. */
  public int sx;
  
  /** Scattered version of y. Publicly visible for copy/storage/restoring. */
  public int sy;
  
  /** Returns the current index */
  public abstract int  getIndex();
  
  /** Copies the represented coordinate 'v' into this. */
  public abstract void set(T v);
  
  /** Set the represented 2D coordinate */

  public abstract void set(Vect2i v);
