experiment with scala io
object Corp {
def create(path:String):Unit = {
val file = new RandomAccessFile(path, "rwd");
Util.putChunk(file);
file.close();
}
def readFirst(path:String):(Array[Byte], Array[Long]) = {
val file = new RandomAccessFile(path, "rwd");
val chunk = (Array.fill(27){file.readByte()}, Array.fill(27){file.readLong()});
file.close();
return chunk
}
def insert(phrase:String, path:String):Unit = {
val file = new RandomAccessFile(path, "rwd");
var chunk:Array[Byte] = Array()
var slot:Int = 0
var backset:Int = 0
for(i <- 0 until phrase.length-1) {
chunk = Util.indexChunk(file);
slot = Util.inWord(phrase(i))
backset = 27 - slot
chunk(slot) match {
case 0 => {
//gos back to write in index header
file.seek(file.getFilePointer() - backset.toLong)
file.writeByte(1)
file.skipBytes(backset.toInt + slot)
file.writeLong(file.length())
file.seek(file.length())
Util.putChunkIfEnd(file)
}
case 1 => {
file.seek(file.getFilePointer() - backset.toLong)
file.writeByte(1)
file.skipBytes(backset.toInt + slot)
file.seek(file.readLong())
}
case 2 => {
file.seek(file.getFilePointer() - backset.toLong)
file.writeByte(1)
file.skipBytes(backset.toInt + slot)
file.writeLong(file.length())
file.seek(file.length())
Util.putChunkIfEnd(file)
}
}
}
//last char dealing
chunk = Util.indexChunk(file);
slot = Util.inWord(phrase(phrase.length-1))
backset = 27 - slot
chunk(slot) match {
case 0 => {
//gos back to write in index header
file.seek(file.getFilePointer() - backset.toLong)
file.writeByte(2)
file.skipBytes(backset.toInt + slot)
}
case 1 => {
file.seek(file.getFilePointer() - backset.toLong)
file.writeByte(2)
}
}
file.close()
}
}