Beispiel #1
0
/**
 * @brief BTRecordFile::readRecordFromDiskTest
 * @param pDisk
 * @param pRecordID
 * Hace la lectura de un registro en la RAM
 */
void BTRecordFile::readRecordFromDiskTest(Disk pDisk, unsigned short pRecordID)
{
    const char *padre = pDisk.read(this->_metadataPtr->getFirstRecordPos(), 7);
    const char *hizq = pDisk.read(this->_metadataPtr->getFirstRecordPos() + 8, 7);
    const char *hder = pDisk.read(this->_metadataPtr->getFirstRecordPos() + 16, 7);
    std::string father(padre);          // obtiene el padre
    std::string HI(hizq);               // obtiene el hijo izq
    std::string HD(hder);               // obtiene el hijo der
    unsigned short _sizeCounter = this->_metadataPtr->getFirstRecordPos() + 24;       // inicio de la data
    DLL<IRecordDataType*> *tmp1 = _metadataPtr->getRecordStruct();
    DLLNode<IRecordDataType*> *tmp = tmp1->getHeadPtr();
    const char *data;

    cout << "Binario " << father << " " << HI << " " << HD << endl;
    std::string P = _conversion->binaryToDecimal(father);
    std::string PHI = _conversion->binaryToDecimal(HI);
    std::string PHD = _conversion->binaryToDecimal(HD);
    cout << P << " " << PHI << " " << PHD << " ";
    while (tmp != nullptr) {
        data = (dynamic_cast<RecordDataType<char>*>(tmp->getData()))->getDataPtr();
        const char *DATO = pDisk.read(_sizeCounter, 7);
        std::string DATOSTR(DATO);       // obtiene el padre
        _sizeCounter += 8;
        cout << sortUserDataFromDisk(DATOSTR, *data) << endl;
        tmp = tmp->getNextPtr();
    }
}
Beispiel #2
0
/**
 * @brief BTRecordFile::getUserRecordData
 * Itera sobre la DLL de los datos que el usuario introduce
 */
std::string BTRecordFile::getUserRecordData(DLL<IRecordDataType *> *_dataListPtr)
{
    std::string finalBinaryRecord;  // concatenacion del registro
    DLLNode<IRecordDataType*> *tmp = _dataListPtr->getHeadPtr();
    RecordDataType<std::string> *data;
    while (tmp != nullptr) {
        data = dynamic_cast<RecordDataType<std::string>*>(tmp->getData());
        QString qstrData = _conversion->fromStringToQString(*data->getDataPtr());

        if (_conversion->verificaValidezDouble(qstrData) == true) {                    // VERIFICACION DE SI EL DATO ES DEL TIPO DOUBLE
            _conversion->setFillData((data->getSize() * 8));
            finalBinaryRecord += _conversion->fromDoubleString2BinaryString(*data->getDataPtr());
        }

        else if (_conversion->verificaValidezInt(qstrData) == true) {   // cadena no de numeros
            _conversion->setFillData((data->getSize() * 8));
            finalBinaryRecord += _conversion->decimalToBinary(*data->getDataPtr());
        } else { // letras
            _conversion->setFillData((data->getSize() * 8));
            finalBinaryRecord += _conversion->stringToBinary(*data->getDataPtr());
        }
        tmp = tmp->getNextPtr();
    }
    cout << "El registro en BINARIO es: " << "\n" << finalBinaryRecord << endl;
    _conversion->setFillData(8);
    return finalBinaryRecord;
}
Beispiel #3
0
/**
 * @brief BTRecordFile::readOneRecordFromDisk
 * @param recordID
 * Lee solo un registro desde disco
 */
void BTRecordFile::readOneRecordFromDisk(unsigned short recordID)
{
    if (recordID <= this->_metadataPtr->getNumberOfRecords() - 1) {
        unsigned short BOF = this->_metadataPtr->getFirstRecordPos();
        unsigned short recordSize = this->_metadataPtr->getRecordSize();
        unsigned short recordSpace = BOF + (recordSize * (recordID - 1));
        const char* padre = this->_disk->read(recordSpace, 7);
        std::string stringData1 = _conversion->fromConstChar2String(padre);
        const char* Hizq = this->_disk->read(recordSpace + 8, 7);
        std::string stringData2 = _conversion->fromConstChar2String(Hizq);
        const char* Hder = this->_disk->read(recordSpace + 16, 7);
        std::string stringData3 = _conversion->fromConstChar2String(Hder);

        cout << "BOF: " << BOF << "EOF: " << _metadataPtr->getEOF() << "\nrecordSize: " << recordSize << "\nrecordSpace: " << recordSpace;

        cout << "Registro #" << recordID << " " ;
        cout << "Padre: ";
        cout << _conversion->binaryToDecimal(stringData1);
        cout << " hIzq: ";
        cout << _conversion->binaryToDecimal(stringData2);
        cout << " hDer: ";
        cout << _conversion->binaryToDecimal(stringData3);
        cout << endl;

        DLL<IRecordDataType*> *tmp1 = _metadataPtr->getRecordStruct();
        DLLNode<IRecordDataType*> *tmp = tmp1->getHeadPtr();
        const char *data;
        recordSpace += 24;
        while (tmp != nullptr) {
            cout << " " << tmp->getData()->getName() << ": " ;
            data = (dynamic_cast<RecordDataType<char>*>(tmp->getData()))->getDataPtr();
            const char *DATO = _disk->read(recordSpace, tmp->getData()->getSize() * 8 - 1);
            std::string DATOSTR(DATO);
            cout << sortUserDataFromDisk(DATOSTR, *data);
            recordSpace += (tmp->getData()->getSize() * 8);
            tmp = tmp->getNextPtr();
        }
        cout << endl;
        cout << "-----------------------------------------------------" << endl;
    }
}
Beispiel #4
0
/**
 * @brief BTRecordFile::saveMetadata2Disk
 * Guarda los metadatos antes de cerrar sesión y los escribirá en disco
 */
void BTRecordFile::saveMetadata2Disk()
{
    std::string metadataBinary;
    std::string puntero = _conversion->fromShort2String(_metadataPtr->getPointerNextBlock());
    std::string tamanoRegistro = _conversion->fromShort2String(_metadataPtr->getRecordSize());
    std::string BOF = _conversion->fromShort2String(_metadataPtr->getFirstRecordPos());
    std::string cantidadRegistro = _conversion->fromShort2String(_metadataPtr->getNumberOfRecords());
    std::string ENDOF = _conversion->fromShort2String(_metadataPtr->getEOF());
    std::string freeBlocks = _conversion->fromShort2String(_metadataPtr->getFreeBlockList());
    _conversion->setFillData(16);   // hace los datos de tamaño 16 en binario
    metadataBinary += _conversion->decimalToBinary(puntero);
    cout << _conversion->decimalToBinary(puntero) << endl;
    metadataBinary += _conversion->decimalToBinary(tamanoRegistro);
    cout << _conversion->decimalToBinary(tamanoRegistro) << endl;
    metadataBinary += _conversion->decimalToBinary(BOF);
    cout << _conversion->decimalToBinary(BOF) << endl;
    metadataBinary += _conversion->decimalToBinary(cantidadRegistro);
    cout << _conversion->decimalToBinary(cantidadRegistro) << endl;
    metadataBinary += _conversion->decimalToBinary(ENDOF);
    cout << _conversion->decimalToBinary(ENDOF) << endl;
    metadataBinary += _conversion->decimalToBinary(freeBlocks);
    cout << _conversion->decimalToBinary(freeBlocks) << endl;
    cout << "Metadatos: " << metadataBinary << endl;
    cout << "Tamaño Metadatos: " << metadataBinary.length() << endl;

    DLL<IRecordDataType*> *tmp1 = _metadataPtr->getRecordStruct();
    DLLNode<IRecordDataType*> *tmp = tmp1->getHeadPtr();
    std::string size = _conversion->fromShort2String(tmp1->getSize());  // numero de datos de usuario
    metadataBinary += _conversion->decimalToBinary(size);  // cantidad de datos usuario

    _conversion->setFillData(_sizeOwner_FileName);  //24
    metadataBinary += _conversion->stringToBinary(_metadataPtr->getFileName());
    cout << _conversion->stringToBinary(_metadataPtr->getFileName()) << endl;
    metadataBinary += _conversion->stringToBinary(_metadataPtr->getOwner());
    cout << _conversion->stringToBinary(_metadataPtr->getOwner()) << endl;

    cout << "Metadatos: " << metadataBinary << endl;
    cout << "Tamaño Metadatos: " << metadataBinary.length() << endl;
    unsigned short data1;
    std::string data2;
    std::string data3;
    std::string datos;
    while (tmp != nullptr) {
        data1 = (dynamic_cast<RecordDataType<char>*>(tmp->getData()))->getSize();
        data2 = (dynamic_cast<RecordDataType<char>*>(tmp->getData()))->getDataPtr();
        data3 = (dynamic_cast<RecordDataType<char>*>(tmp->getData()))->getName(); // titulo
        std::string tamanoDato = _conversion->fromShort2String(data1);
        _conversion->setFillData(_sizeOwner_FileName);  //24
        datos += _conversion->decimalToBinary(tamanoDato);
        datos += _conversion->decimalToBinary(data2);
        datos += _conversion->stringToBinary(data3);
        cout << "MUSR1: " << data1 << " " << _conversion->decimalToBinary(tamanoDato) << endl;
        cout << "MUSR2: " << data2 << " " << _conversion->decimalToBinary(data2) << endl;
        cout << "MUSR3: " << data3 << " " << _conversion->stringToBinary(data3) << endl;
        cout << "MetadatosUSR: "******"Tamaño MetadatosUSR: "******"Metadatos: " << metadataBinary << endl;
    cout << "Tamaño Metadatos: " << metadataBinary.length() << endl;

    _disk->write(0, _conversion->fromStringToConstChar(metadataBinary));    // escribe a disco
  //    return metadataBinary;
}