jweinst1
5/16/2017 - 5:57 AM

experiment with scala io

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()
	}
}