Blame | Last modification | View Log | RSS feed
/*
* CS 3114 Project 4
* Author: Kevin Lee
* Compiler: Eclipse 3.7.0
* Operating System: Windows 7 x64
* Date Completed: 12/4/2011
*
* The following program is an combination of the previous three
* projects. This program implements the GIS b-tree and
* quad-tree, but instead of keeping the PRQuad-Tree in memory,
* the PRQuad-Tree interfaces with a memory manager to store and
* retrieve internal and leaf nodes, as well as city names. The
* memory manager interfaces to a file ("p4bin.dat") using a
* buffer pool. The buffer pool is implemented using a least
* recently used block list.
*
* Note that while the PRQuad-Tree is optimized for speed, the
* conversion of CityRecords to handles for the b-tree severely
* slows down the program (see test _seq-16384-IR). If the b-tree
* is kept completely in memory, the program runs >30x faster.
*
* On my honor:
*
* - I have not used source code obtained from another student,
* or any other unauthorized source, either modified or
* unmodified.
*
* - All source code and documentation used in my program is
* either my original work, or was derived by me from the
* source code published in the textbook for this course.
*
* - I have not discussed coding details about this project with
* anyone other than my partner (in the case of a joint
* submission), instructor, ACM/UPE tutors or the TAs assigned
* to this course. I understand that I may discuss the concepts
* of this program with other students, and that another student
* may help me debug my program so long as neither of us writes
* anything during the discussion or modifies any computer file
* during the discussion. I have violated neither the spirit nor
* letter of this restriction.
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Bindisk {
public static void main(String[] args) {
// 3 arguments must be supplied to the program
if (args.length != 3) {
System.out.println("3 Arguments must be supplied!");
return;
}
// Parses passed arguments into member variables
String dataFile = args[0];
int buffSize = Integer.parseInt(args[1]);
int blockSize = Integer.parseInt(args[2]);
if (buffSize < 1 || buffSize > 20) {
System.out.println("Number of buffers must be between 1 and 20");
return;
}
LRUBuffer buffer = new LRUBuffer("p4bin.dat", "p4bin-stat.dat", buffSize, blockSize);
MemManager memManager = new MemManager(buffer, blockSize);
// Check to make sure the command file exists
File cmdFile = new File(dataFile);
if (!cmdFile.exists()) {
System.out.printf("Command file not found");
return;
}
CmdParser GISParser = new CmdParser(memManager);
long time1 = System.currentTimeMillis();
// Parse each command with the memory client
try {
BufferedReader reader = new BufferedReader(new FileReader(cmdFile));
String cin;
while ((cin = reader.readLine()) != null) {
cin = cin.trim();
if (cin.length() != 0) {
// Send string to command parser
GISParser.Parse(cin);
}
}
} catch (FileNotFoundException e) {
System.out.printf("Command file not found");
return;
} catch (IOException e) {
System.out.printf("Unable to read input file");
return;
}
buffer.flushBuffer();
long time2 = System.currentTimeMillis();
buffer.writeStats(time2-time1);
}
}