Você está na página 1de 2

void insere(fstream &arq)

celula aux, cab;


int free;
cout<<endl<<endl<<"Inserindo registros"<<endl;

/*posiciona o ponteiro de leitura no in�cio do arquivo*/


arq.seekg (0,arq.beg);

/*le o cabe�alho*/
arq.read((char*)&cab, sizeof(cab));

/*posiciona o ponteiro de leitura na primeira posi��o livre no arquivo*/


arq.seekg(sizeof(cab)*cab.cabecalho.free,arq.beg);

/*le as informa��es do registro livre*/


arq.read((char*)&aux, sizeof(aux));

/*grava em free o pr�ximo registro livre*/


free=aux.lista.next;

/*lendo os dados para o novo registro*/


cout<<"Digite a chave: ";
cin>>aux.lista.reg.chave;
aux.lista.next=-1;
aux.lista.prev=cab.cabecalho.last;

/*atualizando o next do registro que vai apontar para o novo registro aux*/
if(aux.lista.prev!=-1)
{
celula bob;
/*posiciona o ponteiro de leitura para o registro que vai apontar para o
novo registro aux*/
arq.seekg(sizeof(aux)*aux.lista.prev,arq.beg);
/*lendo o registro*/
arq.read((char*)&bob, sizeof(bob));
/*atualizando o next*/
bob.lista.next=cab.cabecalho.free;

/*posiciona o ponteiro de escrita para o registro que vai apontar para o


novo registro aux*/
arq.seekp (sizeof(aux)*aux.lista.prev,arq.beg);
/*gravando o registro*/
arq.write((char*)&bob, sizeof(bob));
}
/*posiciona o ponteiro de leitura para a posi��o do novo registro aux*/
arq.seekp(sizeof(cab)*cab.cabecalho.free,arq.beg);
/*gravando o registro*/
arq.write((char*)&aux, sizeof(aux));

/*Atualiza��o o cabe�alho*/
if(cab.cabecalho.first==-1)
cab.cabecalho.first=cab.cabecalho.free;

cab.cabecalho.quant++;
cab.cabecalho.last=cab.cabecalho.free;
cab.cabecalho.free=free;
/*posiciona o ponteiro de escrita no in�cio do arquivo*/
arq.seekp (0,arq.beg);
/*gravado o cabe�alho*/
arq.write((char*)&cab, sizeof(cab));
}

Você também pode gostar