#include #include #include #include #include "WriteHLL.hh" // declare a new dataset void WriteHLL::newDataset(int ndims,long npoints){ int dt=1; current_ndims=ndims; file.write(IObase::Int32,dt,&dt,&ndims); // single integer (ndims) switch(ndims){ case 1: current_cellsize=2; current_celltype="line"; break; case 2: current_cellsize=4; current_celltype="quad"; break; case 3: current_cellsize=8; current_celltype="hex"; break; default: fprintf(stderr,"WriteHLL:newDataset(), ndims=%d is invalid\n",ndims); break; } current_npoints=npoints; file.writeAttribute("cellsize",IObase::Int32,1,¤t_cellsize); file.writeAttribute("celltype",IObase::String,strlen(current_celltype),current_celltype); } // each array is npoints long void WriteHLL::writeCoords(void *xcoords,void *ycoords,void *zcoords){ if(xcoords) file.writeAttribute("xcoords",IObase::Float32,current_npoints,xcoords); if(ycoords) file.writeAttribute("ycoords",IObase::Float32,current_npoints,ycoords); if(zcoords) file.writeAttribute("zcoords",IObase::Float32,current_npoints,zcoords); } void WriteHLL::writeCoordsXYZ(void *xyzcoordsp){ // this is npoints *3 long register long s,d,last=current_npoints*3; float *xyzcoords=(float*)xyzcoordsp; char coordname[32]; float *coords = new float[current_npoints]; strcpy(coordname,"xcoords"); for(int i=0;i=1 && xcoords) idx=file.readAttributeInfo("xcoords",dt,npoints); if(idx>=0 && npoints==current_npoints) file.readAttribute(idx,xcoords); if(current_ndims>=1 && ycoords) idx=file.readAttributeInfo("ycoords",dt,npoints); if(idx>=0 && npoints==current_npoints) file.readAttribute(idx,ycoords); if(current_ndims>=1 && zcoords) idx=file.readAttributeInfo("zcoords",dt,npoints); if(idx>=0 && npoints==current_npoints) file.readAttribute(idx,zcoords); } // will assume ncells=npoints unless overridden. void ReadHLL::readConnectivity(int *cells){ int arraysize,idx; IObase::DataType dt; idx=file.readAttributeInfo("cells",dt,arraysize); file.readAttribute(idx,cells); } // npoints data points since the data is vertex-centered // each dataset can be of independent type void ReadHLL::readData(char *name,void *data){ char dname[128]; IObase::DataType datatype; int len,idx; sprintf(dname,"data_%s",name); idx=file.readAttributeInfo(dname,datatype,len); file.readAttribute(idx,data); } IOFile *HLLnewWriter(IOFile *file){ IObase *iofile = (IObase *)file; return (IOFile *)(new WriteHLL(*iofile)); } void HLLdeleteWriter(IOFile *file){ if(!file) return; WriteHLL *h = (WriteHLL *)file; delete h; } void HLLsetCoordType(IOFile *handle,int coordtype){ WriteHLL *h = (WriteHLL *)handle; h->setCoordType(IObase::Int2DataType(coordtype)); } void HLLsetIndexType(IOFile *handle,int indextype){ WriteHLL *h = (WriteHLL *)handle; h->setIndexType(IObase::Int2DataType(indextype)); } void HLLnewDataset(IOFile *handle,int ndims,long npoints){ WriteHLL *h = (WriteHLL *)handle; h->newDataset(ndims,npoints); } void HLLwriteCoords(IOFile *handle, float *xcoords,float *ycoords,float *zcoords){ WriteHLL *h = (WriteHLL *)handle; h->writeCoords(xcoords,ycoords,zcoords); } void HLLwriteCoordsXYZ(IOFile *handle,float *xcoords){ WriteHLL *h = (WriteHLL *)handle; h->writeCoordsXYZ(xcoords); } void HLLwriteConnectivity(IOFile *handle,int *cells,int ncells){ WriteHLL *h = (WriteHLL *)handle; h->writeConnectivity(cells,ncells); } void HLLwriteData(IOFile *handle,char *dataname,int datatype, void *data,int veclen){ WriteHLL *h = (WriteHLL *)handle; h->writeData(dataname,IObase::Int2DataType(datatype),data,veclen); } IOFile *HLLnewReader(IOFile *base){ IObase *iofile = (IObase *)base; return (IOFile *)(new ReadHLL(*iofile)); } void HLLdeleteReader(IOFile *handle){ if(!handle) return; ReadHLL *h = (ReadHLL *)handle; delete h; } void HLLselectDataset(IOFile *handle, int index,int *ndims,int *npoints, int *ncells,int *ndata){ ReadHLL *h = (ReadHLL *)handle; h->selectDataset(index,*ndims,*npoints,*ncells,*ndata); } void HLLreadDataInfo(IOFile *handle,char *names[], int *datatypes,int *veclens){ ReadHLL *h = (ReadHLL *)handle; h->readDataInfo(names,datatypes,veclens); } void HLLreadCoords(IOFile *handle, float *xcoords,float *ycoords,float *zcoords){ ReadHLL *h = (ReadHLL *)handle; h->readCoords(xcoords,ycoords,zcoords); } void HLLreadConnectivity(IOFile *handle,int *cells){ ReadHLL *h = (ReadHLL *)handle; h->readConnectivity(cells); } void HLLreadData(IOFile *handle,char *name,void *data){ ReadHLL *h = (ReadHLL *)handle; h->readData(name,data); }