void BPlusTree::exportNode(ofstream& salida, Node* unNodo, int tabulacion,bool keyText,bool textContent) { if (unNodo->isLeaf()) { LeafNode *unNodoHoja = static_cast<LeafNode*> (unNodo); salida << endl; for(int i = 0 ; i < tabulacion ; i++) salida << " "; salida << "Numero: " << unNodoHoja->number << " Nivel: " << unNodoHoja->level << " Cant.Elem: " << unNodoHoja->keyMount << " Esp.Libre: " << TreeConstraits::getEfectiveSizeNode() - unNodoHoja->occupiedSpace << " Hoja.Sig: " << unNodoHoja->nextLeaf << endl; for (int posicion = 0; posicion < unNodoHoja->keyMount; ++posicion) { for(int i = 0 ; i < tabulacion + 4 ; i++) salida << " "; salida << "("; Key unaClave = unNodoHoja->keys[posicion]; if(keyText) { salida << unaClave.toString(); } else { ByteString clave(unaClave.toString()); salida << Utility::toString(clave.readAsInt(0)); } salida << ";"; ByteString unDato = unNodoHoja->byteData[posicion]; if(textContent) { salida << unDato.toString(); } else { salida << Utility::intToString(unDato.readAsInt(0)); } salida << ")"; salida << (unaClave.getSize() + unDato.getSize() + TreeConstraits::getControlSizeRecord()) << endl; } salida << endl; } else { InnerNode *unNodoInterior = static_cast<InnerNode*> (unNodo); salida << endl << endl; for(int i=0; i<tabulacion ; i++) salida << " "; salida << "Numero: " << unNodoInterior->number << " Nivel: " << unNodoInterior->level << " Cant.Elem: " << unNodoInterior->keyMount << " Esp.Libre: " << TreeConstraits::getEfectiveSizeNode() - unNodoInterior->occupiedSpace << endl; for (int posicion = 0; posicion <= unNodoInterior->keyMount; ++posicion) { if (posicion < unNodoInterior->keyMount) { Key unaClave = unNodoInterior->keys[posicion]; for(int i=0; i<(tabulacion+1) ; i++) salida << " "; salida << "("; if(keyText) { salida << unaClave.toString(); } else { ByteString clave(unaClave.toString()); salida << Utility::toString(clave.readAsInt(0)); } salida << ")"; salida << unaClave.getSize(); salida << " "; salida << unNodoInterior->getSons()[posicion] << " "; } } for (int posicion = 0; posicion <= unNodoInterior->keyMount; ++posicion) { Node *hijo = hidratateNode(unNodoInterior->sons[posicion]); exportNode(salida, hijo, tabulacion + 2,keyText,textContent); if (hijo) freeNodeMemory(hijo); } for(int i=0; i<tabulacion ; i++) salida << " "; salida << endl; } }
void ClassifBPlusTree::exportNode(ofstream& salida, Node* unNodo, int tabulacion,bool keytext, bool textContent) { if (unNodo->isLeaf()) { LeafNode *unNodoHoja = static_cast<LeafNode*> (unNodo); salida << endl; for(int i = 0 ; i < tabulacion ; i++) salida << " "; salida << "Numero: " << unNodoHoja->number << " Nivel: " << unNodoHoja->level << " Cant.Elem: " << unNodoHoja->keyMount << " Esp.Libre: " << TreeConstraits::getEfectiveSizeNode() - unNodoHoja->occupiedSpace << " Hoja.Sig: " << unNodoHoja->nextLeaf << endl; for (int posicion = 0; posicion < unNodoHoja->keyMount; ++posicion) { for(int i = 0 ; i < tabulacion + 4 ; i++) salida << " "; salida << "("; Key unaClave = unNodoHoja->keys[posicion]; if(keytext) { salida << unaClave.toString(); } else { ByteString clave(unaClave.toString()); if(clave.getSize()==(2*sizeof(int))) { salida << Utility::toString(clave.readAsInt(0)); salida << "-"; salida << Utility::toString(clave.readAsInt(sizeof(int))); } else salida << Utility::toString(clave.readAsInt(0)); } salida << ";"; ByteString unDato = unNodoHoja->byteData[posicion]; int idBlock = unDato.readAsInt(0); string datoString = Utility::intToString(idBlock); salida << datoString; salida << ")"; salida << (unaClave.getSize() + unDato.getSize() + TreeConstraits::getControlSizeRecord()) << endl; for(int i = 0 ; i < tabulacion + 4 ; i++) salida << " "; ListofID listOfID(this->fileBlockManager,idBlock); list<int> listOfInt = listOfID.getListID(); list<int>::iterator it; int id; //int count = 0; ByteString bs; unsigned int i = 0; for(it=listOfInt.begin();it!=listOfInt.end();++it) { i++; id = *it; bs.insertLast(Utility::intToString(id)); bs.insertLast(" "); if((i == listOfInt.size()) || (bs.toString().size() >80)) { salida << bs.toString(); salida << endl; if(i != listOfInt.size()) { for(int i = 0 ; i < tabulacion + 4 ; i++) salida << " "; } bs.clean(); } } } } else { InnerNode *unNodoInterior = static_cast<InnerNode*> (unNodo); salida << endl << endl; for(int i=0; i<tabulacion ; i++) salida << " "; salida << "Numero: " << unNodoInterior->number << " Nivel: " << unNodoInterior->level << " Cant.Elem: " << unNodoInterior->keyMount << " Esp.Libre: " << TreeConstraits::getEfectiveSizeNode() - unNodoInterior->occupiedSpace << endl; for (int posicion = 0; posicion <= unNodoInterior->keyMount; ++posicion) { if (posicion < unNodoInterior->keyMount) { Key unaClave = unNodoInterior->keys[posicion]; for(int i=0; i<(tabulacion+1) ; i++) salida << " "; salida << "("; if(keytext) { salida << unaClave.toString(); } else { ByteString clave(unaClave.toString()); salida << Utility::toString(clave.readAsInt(0)); } salida << ")"; salida << unaClave.getSize(); salida << " "; salida << unNodoInterior->getSons()[posicion] << " "; } } for (int posicion = 0; posicion <= unNodoInterior->keyMount; ++posicion) { Node *hijo = hidratateNode(unNodoInterior->sons[posicion]); exportNode(salida, hijo, tabulacion + 2,keytext,textContent); if (hijo) freeNodeMemory(hijo); } for(int i=0; i<tabulacion ; i++) salida << " "; salida << endl; } }