Exemple #1
0
size_t RecordHashFunction::operator()(const Record& r) const {
  size_t n = 0;
  const Record::FieldVector& fields = r.getFields();
  for(Record::FieldVector::const_iterator i = fields.begin(),
      i_end = fields.end(); i != i_end; ++i) {
    n = (n << 3) ^ TypeHashFunction()((*i).second);
  }
  return n;
}
Exemple #2
0
TypeNode NodeManager::RecTypeCache::getRecordType( NodeManager * nm, const Record& rec, unsigned index ) {
    if( index==rec.getNumFields() ) {
        if( d_data.isNull() ) {
            const Record::FieldVector& fields = rec.getFields();
            Datatype dt("__cvc4_record");
            dt.setRecord();
            DatatypeConstructor c("__cvc4_record_ctor");
            for(Record::FieldVector::const_iterator i = fields.begin(); i != fields.end(); ++i) {
                c.addArg((*i).first, (*i).second);
            }
            dt.addConstructor(c);
            d_data = TypeNode::fromType(nm->toExprManager()->mkDatatypeType(dt));
            Debug("tuprec-debug") << "Return type : " << d_data << std::endl;
        }
        return d_data;
    } else {
        return d_children[TypeNode::fromType( rec[index].second )][rec[index].first].getRecordType( nm, rec, index+1 );
    }
}
Exemple #3
0
Record::Record(const Record& other)
    : d_fields(new FieldVector(other.getFields()))
{
  Debug("record") << "copy constructor " << this << " " << d_fields << std::endl;
}
Exemple #4
0
//Encargado de mostrar los registros del archivo en una estructura de xml
void MainWindow::on_exportXML_triggered()
{
    //verifica que el archivo este abierto
    if(!this->fileRecord.isOpen()){
        QMessageBox::critical(this,"Error","No tiene un archivo abierto para exportar sus campos y registros");
        return;
    }

    //verifica que existan campos y registros
    if(this->fileRecord.fieldsSize() == 0 || this->fileRecord.getIndexes().size() == 0){
        QMessageBox::warning(this,"Error","El archivo no tiene campos o registros");
        return;
    }

    //Obtiene del usuario la direccion del archivo donde se guardara el xml
    QString path = QFileDialog::getExistingDirectory(this,"Exportar en archivo XML","");

    //verifica que esa direccion sea correcta
    if(!path.isEmpty()){
        path += "/Registros.xml";

        //Utiliza un Qfile para poder hacer la escritura correcta del codigo xml
        QFile file (path);

        //verifica que este abierto en modo de escritura solamente
        if(!file.open(QIODevice::WriteOnly)){
            QMessageBox::warning(this,"Error","No se puede exportar a xml, error al abrir archivo destino");
            return;
        }else{
            //se hace del uso de un QXmlStreamWriter que ayuda a escribir el codigo XML dentro del archivo
            QXmlStreamWriter xmlw;
            xmlw.setDevice(&file);
            //se escribe el principio del documento
            xmlw.writeStartDocument();

            //se escribe el encabezado del archivo de xml
            xmlw.writeStartElement("fileRecord");

            vector<PrimaryIndex*> indexes = this->fileRecord.getIndexes();

            //se escriben los subarboles del principal, es uno por cada registro
            for(int i = 0; i < indexes.size(); i++){
                PrimaryIndex* currentIndex = indexes.at(i);

                Record* currentRecord = this->fileRecord.getRecord(currentIndex);
                vector<Field*> fields = currentRecord->getFields();
                vector<string> record = currentRecord->getRecord();

                xmlw.writeStartElement("record");

                //adentro de cada uno de los subarboles se crean otros subarboles, uno por cada campo con
                //su registro que le corresponde
                for(int j = 0; j < fields.size(); j++){
                    Field* currentField = fields.at(j);

                    //se escribe los registros junto con sus campos
                    xmlw.writeStartElement(QString::fromStdString(currentField->getName()));
                    if(currentField->isKey()){
                        xmlw.writeAttribute("key","true");
                    }else{
                        xmlw.writeAttribute("key","false");
                    }

                    if(currentField->getType() == 'E'){
                        xmlw.writeAttribute("type","integer");
                    }else if(currentField->getType() == 'R'){
                        xmlw.writeAttribute("type","real");
                    }else{
                        xmlw.writeAttribute("type","string");
                    }

                    xmlw.writeAttribute("length",QString::number(currentField->getLength()));

                    if(currentField->getType() == 'R'){
                        xmlw.writeAttribute("decimalPlaces",QString::number(currentField->getDecimalPlaces()));
                    }

                    QString str = QString::fromStdString(record[j]).trimmed();
                    xmlw.writeCharacters(str);
                    xmlw.writeEndElement();
                }
                //se escribe el final del elemento
                xmlw.writeEndElement();
            }

            //se escribe el final del elemento
            xmlw.writeEndElement();
            //se escribe el final del documento
            xmlw.writeEndDocument();

            QMessageBox::information(this,"Satisfactorio","Se ha creado correctamente el archivo XML");
        }
    }
}