/* 9P Protocol JAVA
 * P9P/type/type9P.java
 * Autor: Jaime Garzon (2006) jgarzon@gmail.com
 *
 * Esta clase es una implementacion abstracta de un tipo de
 * dato 9P, la utilidad de esta clase es inducir a los subtipos
 * un interface de metodos comun.
*/

package P9P.type;
import java.io.*;

public abstract class type9P {

   public abstract void read(byte[] b, int i);
   public abstract void write(ByteArrayOutputStream buf);
   public abstract int len();
   public abstract String toString();


   /* METODOS INTERNOS */

   // Convierte numeros en un array de bytes en formato little-endian
   // size especifica el tamaņo del numero
   // (1=byte, 2=short, 4=int, 8=long)
   protected byte[] convNumber2Bytearray (int size, long num) {
      byte[] b=new byte[size];
      long mod;

      for(int i=0;i<size;i++) {
         mod=num % 256;
         num=num / 256;
         b[i]= (byte)mod;
      }
      return b;
   }

   // Convierte array de bytes en formato little-endian en numeros
   // size especifica el tamaņo del numero
   // (1=byte, 2=short, 4=int, 8=long)
   protected long convBytearray2Number (int size, byte[] b, int offset) {
      long num=0;
      byte bitShift=0;
      for (int i=0;i<size;i++) {
         num |= (b[offset+i]&0xFF) << bitShift;
         bitShift+=8;
      }
      return num;
   }
}