From c5e2c257893f80864be71d7fba1cc7ecdd49e68d Mon Sep 17 00:00:00 2001 From: Rory Healy Date: Tue, 24 Aug 2021 23:55:19 +1000 Subject: [PATCH] changed to linux, added basic reading of datasets --- Makefile | 0 README.md | 0 dataset_1.csv | 0 dataset_10.csv | 0 dataset_100.csv | 0 dataset_2.csv | 0 dataset_full.csv | 0 output.txt | 0 poly_1split.txt | 0 poly_2split.txt | 0 poly_3split.txt | 0 poly_4split.txt | 0 poly_5split.txt | 0 polygon_irregular.txt | 0 polygon_square.txt | 0 square_1split.txt | 0 square_2split.txt | 0 voronoi.c | 96 +++++++++++++++++++++++++++++++++++------- voronoi.h | 6 +-- voronoi1 | Bin 19808 -> 20272 bytes 20 files changed, 84 insertions(+), 18 deletions(-) mode change 100644 => 100755 Makefile mode change 100644 => 100755 README.md mode change 100644 => 100755 dataset_1.csv mode change 100644 => 100755 dataset_10.csv mode change 100644 => 100755 dataset_100.csv mode change 100644 => 100755 dataset_2.csv mode change 100644 => 100755 dataset_full.csv mode change 100644 => 100755 output.txt mode change 100644 => 100755 poly_1split.txt mode change 100644 => 100755 poly_2split.txt mode change 100644 => 100755 poly_3split.txt mode change 100644 => 100755 poly_4split.txt mode change 100644 => 100755 poly_5split.txt mode change 100644 => 100755 polygon_irregular.txt mode change 100644 => 100755 polygon_square.txt mode change 100644 => 100755 square_1split.txt mode change 100644 => 100755 square_2split.txt mode change 100644 => 100755 voronoi.c mode change 100644 => 100755 voronoi.h diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/dataset_1.csv b/dataset_1.csv old mode 100644 new mode 100755 diff --git a/dataset_10.csv b/dataset_10.csv old mode 100644 new mode 100755 diff --git a/dataset_100.csv b/dataset_100.csv old mode 100644 new mode 100755 diff --git a/dataset_2.csv b/dataset_2.csv old mode 100644 new mode 100755 diff --git a/dataset_full.csv b/dataset_full.csv old mode 100644 new mode 100755 diff --git a/output.txt b/output.txt old mode 100644 new mode 100755 diff --git a/poly_1split.txt b/poly_1split.txt old mode 100644 new mode 100755 diff --git a/poly_2split.txt b/poly_2split.txt old mode 100644 new mode 100755 diff --git a/poly_3split.txt b/poly_3split.txt old mode 100644 new mode 100755 diff --git a/poly_4split.txt b/poly_4split.txt old mode 100644 new mode 100755 diff --git a/poly_5split.txt b/poly_5split.txt old mode 100644 new mode 100755 diff --git a/polygon_irregular.txt b/polygon_irregular.txt old mode 100644 new mode 100755 diff --git a/polygon_square.txt b/polygon_square.txt old mode 100644 new mode 100755 diff --git a/square_1split.txt b/square_1split.txt old mode 100644 new mode 100755 diff --git a/square_2split.txt b/square_2split.txt old mode 100644 new mode 100755 diff --git a/voronoi.c b/voronoi.c old mode 100644 new mode 100755 index 12daee2..a6c9356 --- a/voronoi.c +++ b/voronoi.c @@ -14,10 +14,17 @@ #define NUM_FILE_ERROR "Error: Incorrect number of inputs (3 required).\n" #define MALLOC_ERROR "Error: Cannot allocate memory.\n" +#define ARGC_CORRECT_LEN 4 +#define NUM_CSV_FIELDS 6 +#define MAX_FIELD_LEN 128 +#define MAX_CSV_ENTRY_LEN 512 + int main(int argc, char **argv) { + /* Input and output files */ FILE *dataset = NULL, *polygonData = NULL, *output = NULL; checkInputArgs(argc, argv, &dataset, &polygonData, &output); + /* Stores information about the watchtowers given in dataset file */ watchtower_t *watchtowers = (watchtower_t *) malloc(sizeof(watchtower_t)); if (watchtowers == NULL) { fputs(MALLOC_ERROR, stderr); @@ -26,7 +33,7 @@ int main(int argc, char **argv) { readWatchtowers(watchtowers, dataset); - // Cleaning up data + /* Cleaning up data */ free(watchtowers); fclose(dataset); fclose(polygonData); @@ -34,9 +41,10 @@ int main(int argc, char **argv) { return 0; } +/* Checks the validity of the command line input arguments */ void checkInputArgs(int argc, char **argv, FILE **datasetFile, \ -FILE **polygonFile, FILE **outputFile) { - if (argc != 4) { + FILE **polygonFile, FILE **outputFile) { + if (argc != ARGC_CORRECT_LEN) { fputs(NUM_FILE_ERROR, stderr); exit(EXIT_FAILURE); } @@ -60,25 +68,83 @@ FILE **polygonFile, FILE **outputFile) { } } +/* Reads the CSV file and stores the information in the watchtowers array */ void readWatchtowers(watchtower_t *watchtowers, FILE* datasetFile) { - char *lineBuffer; - int lineCount = 0; - size_t lineBufferSize = 512; - size_t numberCharsRead; + /* Maximum length of a single CSV line */ + size_t lineBufferSize = MAX_CSV_ENTRY_LEN; - lineBuffer = (char *) malloc(lineBufferSize * sizeof(char)); + /* Stores the current line from the CSV */ + char *lineBuffer = (char *) malloc(lineBufferSize * sizeof(char)); if (lineBuffer == NULL) { fprintf(stderr, MALLOC_ERROR); exit(EXIT_FAILURE); } - numberCharsRead = getline(&lineBuffer, &lineBufferSize, datasetFile); - while (numberCharsRead > 0) { - lineCount += 1; - printf("line[%06d]: chars=%06zd, buf size=%06zu, contents: %s",\ - lineCount, numberCharsRead, lineBufferSize, lineBuffer); - numberCharsRead = getline(&lineBuffer, &lineBufferSize, datasetFile); + int numWatchtowers = 1; + + /* Discard the header line, then read the rest of the CSV */ + getline(&lineBuffer, &lineBufferSize, datasetFile); + while (getline(&lineBuffer, &lineBufferSize, datasetFile) > 0) { + /* The current tower being filled in with information */ + watchtower_t *currTower = (watchtower_t *) malloc(sizeof(watchtower_t)); + + /* Stores the current CSV field for the current line */ + char *token = strtok(lineBuffer, ","); + size_t tokenLength; + + /* Read the line in to currTower */ + for (int i = 0; i < NUM_CSV_FIELDS; i++) { + tokenLength = strlen(token); + switch(i) { + /* Case 0, 1, and 3 deal with strings in the CSV + * Case 2 deals with an integer + * Case 4 and 5 deal with doubles + * Each case is handled seperately to fill in the + * watchtower with no space wasted. + */ + case 0: + currTower->id = (char *) malloc(sizeof(char) * \ + tokenLength + 1); + strcpy(currTower->id, token); + currTower->id[tokenLength] = '\0'; + break; + case 1: + currTower->postcode = (char *) malloc(sizeof(char) * \ + tokenLength + 1); + strcpy(currTower->postcode, token); + currTower->postcode[tokenLength] = '\0'; + break; + case 3: + currTower->manager = (char *) malloc(sizeof(char) * \ + tokenLength + 1); + strcpy(currTower->manager, token); + currTower->manager[tokenLength] = '\0'; + break; + case 2: + currTower->population = strtol(token, NULL, 10); + break; + case 4: + currTower->x = strtod(token, NULL); + break; + case 5: + currTower->y = strtod(token, NULL); + break; + } + token = strtok(NULL, ","); + } + // printf("ID: %s\nPostcode: %s\nManager: %s\n", \ + // currTower->id, currTower->postcode, currTower->manager); + // printf("Population: %d\nx: %f\ny: %f\n", \ + // currTower->population, currTower->x, currTower->y); + + /* Add currTower to the watchtowers array */ + + + /* Clean up currTower before reading next CSV line */ + free(currTower->id); + free(currTower->manager); + free(currTower->postcode); + free(currTower); } free(lineBuffer); - lineBuffer = NULL; } diff --git a/voronoi.h b/voronoi.h old mode 100644 new mode 100755 index ebee5ca..db6961d --- a/voronoi.h +++ b/voronoi.h @@ -1,4 +1,4 @@ -typedef struct { +typedef struct watchtower { char *id; char *postcode; char *manager; @@ -8,5 +8,5 @@ typedef struct { } watchtower_t; void checkInputArgs(int argc, char **argv, FILE **datasetFile, \ -FILE **polygonFile, FILE **outputFile); -void readWatchtowers(watchtower_t *watchtowers, FILE* datasetFile); + FILE **polygonFile, FILE **outputFile); +void readWatchtowers(watchtower_t *watchtowers, FILE* datasetFile); \ No newline at end of file diff --git a/voronoi1 b/voronoi1 index 0e46e25d10c03ec24b87c33fd70b1dcc052ae4bb..d2723d666324b8f0625b113390a4e64636dd8e8d 100755 GIT binary patch delta 5517 zcmZ`-3v^RO8lJhyB$GaqG&Kzcn(~lBZQ4RhDKxafK5nsKREkAWihvXrX?GC!4)phaX5IX>@(uxVjK0knhmdJ!>d_5P2Y9(`1P0}DcY4Kx&M!`*I?`w4$E54 zTWxDf`d_;I9kn6jk=?CRGrvsw?1f&wMT=Mu z{_6}MJ7_Ek*3IHEyLaN&1S?Ch-k+eii7j@o_z1G;PS85UpP;?ugqWv9G53lAdx{Tw zVW=ETh)ENv-0MppvJrAT!Ri!2?xn8%OZj2j9_KhdwUCfA+QeyMiu0LhOAl6%$*30_TpJlWP0x15fJpIMyH5>jPMSKvZUA z(Fa9SMnR_6pejnBN)``i_#N3WBhY)bIF>OX^FThfQu-B48&DnuZ!$o|#f)sn5nVNq zD*T=anN7N1EYa_AvB;C{xX8Uaxsec4kLoui81UU+u(hdGv&)f~lkCxZ3I2fvzy2!a&ktRn%^^ zGqV~AY5#034&gBFeH1C?N{UxN1*7Pcq67FFf&T>B5B(sA9?+y#Mj$Zy!HGS&Y#4LI*O?gVb+Z0HGbE1c9ewG$KS@}C*`VwK z;`7VZe0|bJ*uX+izEJ{ih${Ia4PD>R85}>6kkG>V_7kDT`u6Wa3qtJ|8`aJN52&we znEVsWe?IV+bNjW-XYG6Z+oG^$U-?ec`1hLj5M0;5br7zTaM5hbtS~$^o}9LSt!djq zMg}$QkBC9O3Uc{3nzjbyyfd2i5y;TDnsyQ7GiNnzG)&Cx=QOPXHm8K1f#@z8!`=EJgLN6#t6M^d>=;I*GG8!to z;9B*KcqVtO5@5L#HoTp+Akb|9C}Vn4ivh> z#;%IZV+m8SIxyC4o{8`%fF;i^9uCZ>=f!D=JT4rCD`~S>U$}Bqzwy{{Lk^nV;1Wyu zbis>)NvDkjr!hF|U3TM}Rzlz(3a2L_>6HIK^&@D1*iTyJO~Kcn@}9RGgoWF0L1DG8 z1YzYC%6CGTMX@gi8Vj}EFZzl+Gj?JGT*T7t!=YCkaF((BCL8NE9zz4Q?FJ8fAB3H> z7V{hc{Be;|?2A4GW^0+F1B8=jK%jMo1X=tx1mzO=`Fx19&XgdJ{~p0C35s|P5>!Yq zgZ}|RP=YGH7Tu~OPW}b@-wVv4kTKH}Rs(l5B zb-WGf>LrNq6KI*6yb;7^{#OL^++h$~`B7w>pME`nR*sX{dNr>GT^rwm1lOc50B}G5 z5G{*RqfwAu9A2ixdZTv2XV zq-}*L3uoKF9mfAA5cXezs>nv2=Rl^dT25?AGL9GFZy=3D0?s)Cs{~Gd54hTx1A8tj zZ8NdiQZU$`b{DbPWi=1jt?zToA_Yl%PJqGL4=z-l zfOSjksilXZQ?N^vSe5HqjGQMkQevv>0>bNLPL|kwTnKoQ}_`#KJCI67(jg&fe_4XoT+rFDx0W2yJ%b6I)^jaae8q zXW&ckMwSBG$M|y$$|}R1_SC|nbT;Ax7x-3S`$}w$vqj>|(WbV=ddKtrf%yoVi>R4!x-t1**dbTe{q1h|ZJsaD##CoHy zZ_qC*8L6=EV8a7AT8Cj*3>(fW)?t%Nj?3tb6XHb4pQEWTvNMxsC6_1HXUs^34hYan zpCwIKP4c;@+g_FR>p4CO9pYrfwA5!P@CJ32j8M3fDMmo|f@O#oT|Jlb)@SI<9H=4L z#mb)P7s|{hw`5WtV9B4c(XFhwm9aK9mA}OJ2h6dFf6CZny!i0p!z|@6ql?%Te6c7h zTNth66)fd5mb-%`A7Y-X7@x}=i}=sOwJ+d;jO<+ZZuQa$YkmN%@P)XGYwx}b>V^94;TGsY$q zv2h$~ZNoL9Se0?`a|MLuMobE7bT0E+iXOpCylu?Us^8mKilzDxBzr4kmf2m59u|Kq zE6H54v1RRs$Ss?0CGbmo#qA9%ZeJN`5h*hcq}{&hw(FNhmbFCI-nnAKM$tE8uh>F4EE70u^{MyA63@`y}r#b z-<`xqoK>c~E~Dbv;PBRO+V%+7Y(2V9Mt@>NlM&IMqm^l3l^7!6xYn`U1g#Vn{~KDxC?v!pk6R#d(?I>m z*Hu&$S9*ONhSgkG<{PC8GpGCH{eZl`A@3i``R*7CC#uByP`1tZA`}hX;g+9@)?DIoHq?q9Fk$zvnp39i zf3$ijg)y321sQ^rL|EgbqFY4-htHqojEQq2>jl;Ro= zU+L5$+9POvp~IZTJ)*q6ENRfMw=(D#ch^sMnBT78$XQ?JFqco0xB$pp9L=J9ZkfxR z^kHMTd-rdfTS@6V;^!?}Kc{!rFAn}3K2XAoCGT3 z42iB zz2Cjxz3;yFX5O30fuFF6N7#_p)u#wrE764zE{`sHQVw$+hCyNO=-JtEbvE5lX9E|@ zDGiH;-;jb+#|#BAJF<1$5&E{=XYfa12lFU>2CL6t^}*BZO=Z-t$6S&S5$iMlU&bLL z;}FP}_GHU7na{{$`=9t-_pvi~{_K3~dw<-&8}7Gc`I0cFS)9OjP!A&6obZO_GIk4` zvv{Nj5c}bv=w@>Wvv}=Vpj|gYtu-L+HyMy`^)j30DWxm;tzMY0dZojc7`bb#@Pw4? zU5pk*m?ij2P{C%*tN`ywbHHhPK8Xe(3Ksm)p8$Wexi>M?+R<)ItB~B%k{}@GcEi>+ zt3{@$e#F$wc{Y=WUAn#7m|4^Ahgy4?&sa;1GFhxM$;RQ=c8@PnH)z)j)4WOW7rQ6H ztccvZfN>9W^Y{eIw3uNCqV*{r?~|rkpE5Gp(PoD?kg*5j4o$Ph!A0&#a7>Fi24l#} zm*ZK&NO0bM`-9GTe0@L=K8a;s1B;x$>_ue`;-vI)K{%f@_e;ckbH0st&%lE-@Vzte zT{Cdk41DV}yns4vnr0xpWd^RxfiILf8=kZZf;yNG&_rkqM;S|5iqubs)WOguRMbIf zJ&BbUI#bjEDUtMhM?2-%L{fSmP0A~VME*jJzkFT}w7SyR8QA5TyYM1COkIoX)c(-R zq^glKo$=~GXdJ<0C+(RlJ4o$P_K_grue1?#xOy|7{?;_7` z@J8Wc^8DUAbl$Ug4`C;IzMH>_#a^P}OzuT(==dvipVZ;xsQqV4)W}`O)JWH8qdH*C z%t8`Q$%WwP(TdYli+Z$TlAcH$x;Dfmm;ebAh$nDqv{~cSr7>&0=CqxT!|sYNb(~3Y z19hY7;8m0AAjU@iKy&c*fAuB!u)M$GG*btZS%NPFF^zBICFM3XVk|$OA{=QUT9Po>tpPcCYPb}_$yn7Xf8^xTRRwn%LSoy zLuKSorFE5&&q}W?jeJ$74rbqj=4;k2yohtfCu3iXT}Y{>HGEPsvu1==_0LmS7V< zjJM;CN&a8qZ#VYdLdi|PCCrFG{@3yM9#+Mt`^A_RkDHQk7JtXi$6`%b**`N%r76@U z+|1G(K68)u8+)}@KGNHvB|BYFQ&Gj{(}mCh4`-*dZg@UBz&hXq)ZYR*C*bNZc2GJ+ zs7(n_l{44XLHjH=LkPn*=*d~fn&Eg(IxB|{a&BgQP#d@zu9I_t=Z4~1j4GNecmk$w z?!tWv|6$|o-&k4v8B`xa*uYMpf>4R1iSbt@@z`zrAKdwze;GcrygCy z{I`_hdfzQ5_VEyvx<#w!DV|ChZjjd?`v6zSQy)j?!y(>7p0HNjDEE@*M&5x5UKPZ@ zqD!*-hLIq4l+?#<>_JPDcjIwZv>caKkj3P1D#^m#8 zPHJfsY@&nKO5lH|6c!C|{yAD~Rt-2gy~f!jneG{HQnz5U#Z$09>2|?p*VHV`Y<&aW z;x>xomVM~&b=G46tk^c5j7DtQV~CRN*?|sa0y(UBKIxX|ptM%TJ>uv&IyJWZAu-RK&l;4%Y-v4k&09I*2~VrAO4xRHiU+bB@7 zJ?E%`e5xrabHl)oVHcOQVQQHIjSXhK$5GaG%+(-@{wh=B=ty6%+n9g=Pz^9Sy$HH)z&H0 zZ*Okj)`>?Ph%29i@s&S?M+z6QAT$;%frkoSxLkAlTZmbCb^UEEjZO894V?`_Ti2~O zHf<}Tb8>xCLnGW>I2(=@J_hMl30haJ4IVH)$8gMA^W#;-&wz;;_A3m#A3j(W@R_gq zS_oe5G`wL5hCFy&REE~D>meEn-~log^7zaTE|dSRrljB@b1vjrIO;d;y3}qM{&*obz$4>F4NSYbx& zGvt@X@qW}k%o^TCO%Z(ppTT>d>;fKPem%c_bP2*aw7YQnzOz5zElu_lDLS7X6lw|_ zEcQT2iML_D5ovxO)80UBz7aX|dB=Sb^UeCs=!*@$dFz@FX*u=8HfYydwCf$(^+yma z^+=Ckls01Pv#8<9xh=w*;z&fn({4B)PPcMeEOMk9@MG! zb^xN4fw&V+y_XYCc&&1UGGRbd?gOPNaOuAo%&Gjn71mef#F=k6YAXD&YBhTiPF4lv zQNNyW6y)l>IB$lIyctkcy+Ss>ayuYWohO?&eK#COWZu$!Ag|3+%v-g?Shk^&+O@@u z-44;K^5plH=~?}764BSob@V!-bjV%jm0!!#E$vXdE-$X6P)8G1cyQec*