00001 #include <iostream>
00002 #include <fstream>
00003 #include <stdlib.h>
00004 #include "IO.h"
00005
00006 using namespace std;
00007
00008
00009 long * monoFieldAlloc(long kolikPrvku, ifstream & inFile);
00010 long ** biFieldAlloc(long kolikPrvku,long *pprNaRadku, ifstream & inFile);
00011 void preskocNazevPole(ifstream & inFile);
00012 void deleteBiField(long pocetRadku,long ** pole);
00013 void deleteBiField(long pocetRadku,double ** pole);
00014 void vypisBiPole(long **poleSeznam, long * polePocet, long pocetRadku);
00015
00016
00017
00018 IO::IO (const char* fileName)
00019 {
00020 ifstream inFile ( fileName , ifstream::in );
00021
00022 if(!inFile)
00023 {
00024 cout << endl << "Nepodarilo se otevrit soubor " << fileName << " !\n";
00025 exit (1);
00026 }
00027 long nicDulezityho;
00028
00029 inFile >> nn;
00030 xyz = new double *[nn];
00031 for (long i = 0; i < nn; i++)
00032 {
00033 xyz[i] = new double[3];
00034 inFile >> nicDulezityho;
00035 for (long j = 0; j < 3; j++)
00036 inFile >> xyz[i][j];
00037 inFile >> nicDulezityho;
00038 }
00039
00040 inFile >> ne;
00041 nnod = new long [ne];
00042 nodes = new long *[ne];
00043 long tmp;
00044 for (long i = 0; i < ne; i++)
00045 {
00046 inFile >> nicDulezityho;
00047 inFile >> nicDulezityho;
00048 nodes[i] = new long [nicDulezityho];
00049 nnod[i] = nicDulezityho;
00050
00051 for (long j = 0; j < nicDulezityho; j++)
00052 {
00053 inFile >> tmp;
00054 nodes[i][j] = tmp -1;
00055 }
00056 inFile >> nicDulezityho;
00057 }
00058 preskocNazevPole(inFile);
00059
00060
00061
00062
00063 nadjnodnod = new long [nn];
00064 for (long i = 0; i < nn; i++)
00065 {
00066 inFile >> nicDulezityho;
00067 inFile >> nadjnodnod[i];
00068 }
00069
00070 preskocNazevPole(inFile);
00071
00072
00073 adjnodnod = biFieldAlloc(nn, nadjnodnod, inFile);
00074 preskocNazevPole(inFile);
00075
00076
00077 nadjelnod = new long [nn];
00078 for (long i = 0; i < nn; i++)
00079 {
00080 inFile >> nicDulezityho;
00081 inFile >> nadjelnod[i];
00082 }
00083 preskocNazevPole(inFile);
00084
00085 adjelnod = biFieldAlloc(nn,nadjelnod, inFile);
00086 preskocNazevPole(inFile);
00087
00088
00089 nadjelel = new long [ne];
00090 for (long i = 0; i < ne; i++)
00091 {
00092 inFile >> nicDulezityho;
00093 inFile >> nadjelel[i];
00094 }
00095 preskocNazevPole(inFile);
00096
00097
00098 adjelel = biFieldAlloc(ne,nadjelel,inFile);
00099 inFile.close();
00100
00101 }
00102
00103
00104 IO::~IO ()
00105 {
00106 delete [] nnod;
00107 delete [] nadjnodnod;
00108 deleteBiField(nn,adjnodnod);
00109 delete [] nadjelnod;
00110 deleteBiField(nn, adjelnod);
00111 delete [] nadjelel;
00112 deleteBiField(ne,adjelel);
00113 deleteBiField(ne,nodes);
00114 deleteBiField(nn,xyz);
00115 }
00116
00117 void deleteBiField(long pocetRadku,long ** pole)
00118 {
00119 for (long i = 0; i < pocetRadku; i++)
00120 delete [] pole[i];
00121 delete[] pole;
00122 }
00123
00124 void deleteBiField(long pocetRadku,double ** pole)
00125 {
00126 for (long i = 0; i < pocetRadku; i++)
00127 delete [] pole[i];
00128 delete[] pole;
00129 }
00130
00131 void vypisBiPole(long **poleSeznam, long * polePocet, long pocetRadku)
00132 {
00133 for (long i = 0; i < pocetRadku; i++)
00134 {
00135 cout << i << " ";
00136 for (long j = 0; j < polePocet[i]; j++)
00137 cout << poleSeznam[i][j] << " ";
00138 cout << endl;
00139 }
00140
00141 }
00142
00143 long * monoFieldAlloc(long kolikPrvku, ifstream & inFile)
00144 {
00145 long * pole = new long [kolikPrvku];
00146 long preskocit;
00147 inFile >> preskocit;
00148 for (long i = 0; i < kolikPrvku; i++)
00149 inFile >> pole[i];
00150 return pole;
00151 }
00152
00153
00154 long ** biFieldAlloc(long kolikPrvku,long *pprNaRadku, ifstream & inFile){
00155 long **pole = new long *[kolikPrvku];
00156 for (long i = 0; i < kolikPrvku; i++)
00157 pole[i] = monoFieldAlloc(pprNaRadku[i], inFile);
00158 return pole;
00159 }
00160
00161
00162 void preskocNazevPole(ifstream & inFile){
00163 inFile.ignore(256, '\n');
00164 inFile.ignore(256, '\n');
00165 inFile.ignore(256, '\n');
00166 }
00167
00168
00169