diff --git a/reader.cc b/reader.cc
index 1f60ce8fe31041fda6ebb15c5f740ed5022bf474..21cef1dd1882ec8fcdda0033f05821e6f67a538c 100644 (file)
--- a/reader.cc
+++ b/reader.cc
return out;
}
return out;
}
+SHORTINT Reader::readSInt() {
+ SHORTINT buf;
+ char *bufPtr = (char*)&buf;
+ d_rider.read(bufPtr, 2);
+ if (isLittleEndian()) {
+ return buf;
+ } else {
+ SHORTINT out;
+ char *outPtr = (char *)&out;
+ outPtr[0] = bufPtr[1]; outPtr[1] = bufPtr[0];
+ return out;
+ }
+}
+
INTEGER Reader::readInt() {
INTEGER buf;
char *bufPtr = (char*)&buf;
INTEGER Reader::readInt() {
INTEGER buf;
char *bufPtr = (char*)&buf;
Store* Reader::readStore() {
SHORTCHAR kind = readSChar();
if (kind == Store::NIL) {
Store* Reader::readStore() {
SHORTCHAR kind = readSChar();
if (kind == Store::NIL) {
- std::cout << "NIL STORE" << std::endl;
+ //std::cout << "NIL STORE" << std::endl;
return readNilStore();
} else if (kind == Store::LINK) {
return readNilStore();
} else if (kind == Store::LINK) {
- std::cout << "LINK STORE" << std::endl;
+ //std::cout << "LINK STORE" << std::endl;
return readLinkStore();
} else if (kind == Store::NEWLINK) {
return readLinkStore();
} else if (kind == Store::NEWLINK) {
- std::cout << "NEWLINK STORE" << std::endl;
+ //std::cout << "NEWLINK STORE" << std::endl;
return readNewLinkStore();
} else if (kind == Store::STORE) {
return readNewLinkStore();
} else if (kind == Store::STORE) {
- std::cout << "STORE STORE" << std::endl;
+ //std::cout << "STORE STORE" << std::endl;
return readStoreOrElemStore(false);
} else if (kind == Store::ELEM) {
return readStoreOrElemStore(false);
} else if (kind == Store::ELEM) {
- std::cout << "ELEM STORE" << std::endl;
+ //std::cout << "ELEM STORE" << std::endl;
return readStoreOrElemStore(true);
} else {
return readStoreOrElemStore(true);
} else {
- std::cout << std::hex << (unsigned int)kind << std::endl;
+ //std::cout << std::hex << (unsigned int)kind << std::endl;
throw 20;
}
}
throw 20;
}
}
// kind: SHORTCHAR; path: TypePath; type: TypeName;
// save: ReaderState;
Store *Reader::readNilStore() {
// kind: SHORTCHAR; path: TypePath; type: TypeName;
// save: ReaderState;
Store *Reader::readNilStore() {
+ INTEGER comment = readInt();
+ std::streamoff next = readInt();
+ d_state->end = d_rider.tellg();
+ if (next > 0 || (next == 0 && comment % 2 == 1)) {
+ d_state->next = d_state->end + next;
+ } else {
+ d_state->next = 0;
+ }
return 0;
}
// IF kind = nil THEN
return 0;
}
// IF kind = nil THEN
Store *Reader::readStoreOrElemStore(bool isElem) {
INTEGER id = isElem ? d_elemList.size() : d_storeList.size();
TypePath path = readPath();
Store *Reader::readStoreOrElemStore(bool isElem) {
INTEGER id = isElem ? d_elemList.size() : d_storeList.size();
TypePath path = readPath();
- std::cout << path.toString() << std::endl;
+ //std::cout << path.toString() << std::endl;
const std::string &type = path[0];
INTEGER comment = readInt();
std::streampos pos1 = d_rider.tellg();
const std::string &type = path[0];
INTEGER comment = readInt();
std::streampos pos1 = d_rider.tellg();
d_store = x;
} else {
// join(d_store, x)
d_store = x;
} else {
// join(d_store, x)
- std::cout << "Man, should have written join(.,.)" << std::endl;
+ //std::cout << "Man, should have written join(.,.)" << std::endl;
}
if (isElem) {
d_elemList.push_back(x);
}
if (isElem) {
d_elemList.push_back(x);
d_store = alien;
} else {
// join(d_store, alien)
d_store = alien;
} else {
// join(d_store, alien)
- std::cout << "Man, should have written join(.,.)" << std::endl;
+ //std::cout << "Man, should have written join(.,.)" << std::endl;
}
if (isElem) {
d_elemList.push_back(alien);
}
if (isElem) {
d_elemList.push_back(alien);
@@ -254,14 +276,14 @@ void Reader::internalizeAlien(Alien *alien, std::streampos down, std::streampos
std::streampos next = down != 0 ? down : end;
while (d_rider.tellg() < end) {
if (d_rider.tellg() < next) { // for some reason, this means its a piece (unstructured)
std::streampos next = down != 0 ? down : end;
while (d_rider.tellg() < end) {
if (d_rider.tellg() < next) { // for some reason, this means its a piece (unstructured)
- std::cout << "Alien Piece" << std::endl;
+ //std::cout << "Alien Piece" << std::endl;
size_t len = next - d_rider.tellg();
char *buf = new char[len];
d_rider.read(buf, len);
AlienComponent *comp = new AlienPiece(buf, len);
alien->getComponents().push_back(comp);
} else { // that means we've got a store
size_t len = next - d_rider.tellg();
char *buf = new char[len];
d_rider.read(buf, len);
AlienComponent *comp = new AlienPiece(buf, len);
alien->getComponents().push_back(comp);
} else { // that means we've got a store
- std::cout << "Alien Store" << std::endl;
+ //std::cout << "Alien Store" << std::endl;
d_rider.seekg(next);
AlienComponent *comp = new AlienPart(readStore());
alien->getComponents().push_back(comp);
d_rider.seekg(next);
AlienComponent *comp = new AlienPart(readStore());
alien->getComponents().push_back(comp);