// (c) J. Dean Brock, 1998, 1999, 2002, 2003 // Written for UNCA CSCI 343 // Various I/O routines for the B+-tree #include using namespace std ; #include "btree.hxx" void bTree::updateBlock( int p, // position for block const blockRecT &b) // new contents for block { btFile.seekp(p * sizeof(blockRecT), ios_base::beg) ; if ( btFile.fail() ) { btState = 0 ; return ; } btFile.write((char *)&b, sizeof(blockRecT)) ; if ( btFile.fail() ) btState = 0 ; if (p==0) // I wasn't thinking.... btRoot = b; return ; } int bTree::addBlock( // returns position where block was added const blockRecT &b) // block to be added { int rPos ; btFile.seekp(0, ios_base::end) ; if (btFile.fail()) { btState = 0 ; return -1 ; } rPos = btFile.tellp() / sizeof(blockRecT) ; btFile.write((char *)&b, sizeof(blockRecT)) ; if (btFile.fail()) { btState = 0 ; return -1 ; } return(rPos) ; } void bTree::readBlock( int p, // position for block blockRecT &b) // buffer for block { btFile.seekg(p*sizeof(blockRecT), ios_base::beg) ; if (btFile.fail()) { btState = 0 ; return ; } btFile.read((char *)&b, sizeof(blockRecT)) ; if (btFile.fail()) btState = 0 ; return ; }