////////////////////////////////////////////////////////
// example.cpp - Sorting Large Files with CVirtMemFile
//
// Compile as a Console Application with Visual C++.
////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
#include "vmfile.h"
struct sampleRec
{
unsigned long key;
char data[40];
};
int compareSampleRec( const void *arg1, const void *arg2 )
{
sampleRec *rec1=(sampleRec *)arg1;
sampleRec *rec2=(sampleRec *)arg2;
if (rec1->key<rec2->key) return -1;
if (rec1->key>rec2->key) return 1;
return 0;
}
int main( void )
{
FILE *filePtr;
sampleRec rec;
char filename[]="testfile.dta";
// Create a sample file to sort
filePtr=fopen(filename,"wb");
if (filePtr==NULL)
return 0;
for (int i=0; i<10000; i++)
{
rec.key=rand();
sprintf(rec.data,"This is record: %ld",i);
fwrite(&rec,sizeof(sampleRec),1,filePtr);
}
fclose(filePtr);
// Sort the file
CVirtMemFile vmFile;
if (vmFile.Open(filename, CVirtMemFile::READ_WRITE_MODE))
{
unsigned long count=vmFile.GetFileSize()/sizeof(sampleRec);
qsort( vmFile.GetBasePtr(), count, sizeof(sampleRec),
compareSampleRec );
vmFile.Close();
printf("%ld records sorted.\n", count);
}
else
{
printf("Unable to sort file.\n");
return 0;
}
return 1;
}
End of Listing