From 66c7eeef25386e27716436b2a5718936f9c50a05 Mon Sep 17 00:00:00 2001 From: cdez Date: Sun, 1 Oct 2023 00:21:57 -0700 Subject: [PATCH] Created most of the Array Engine, sanity checking. +- ArrayDataEngine.c ++ PA05_Main --- PA05-1004/ArrayDataEngine.c | 124 ++++++++++++++++++++++++++++++++++-- PA05-1004/PA05_Main | Bin 0 -> 33528 bytes 2 files changed, 118 insertions(+), 6 deletions(-) create mode 100755 PA05-1004/PA05_Main diff --git a/PA05-1004/ArrayDataEngine.c b/PA05-1004/ArrayDataEngine.c index 645b8df..87041d7 100644 --- a/PA05-1004/ArrayDataEngine.c +++ b/PA05-1004/ArrayDataEngine.c @@ -37,6 +37,10 @@ Dependencies: free */ StateArrayType *clearDataStructure( StateArrayType *arrayPtr ) { + // free the array from memory + free(arrayPtr->array); + // free the struct from memory + free(arrayPtr); // return NULL return NULL; } @@ -57,6 +61,10 @@ Dependencies: privateCheckForResize, deepCopyData */ void copyDataList( StateArrayType *dest, const StateArrayType src ) { + // check for resize + // check to see if the array dest capacity is less than source + // if it is, then size the dest to what source was + // copy the data from source to dest using deepCopy // no return, void } @@ -73,8 +81,15 @@ Dependencies: malloc, sizeof (C keyword) */ StateArrayType *createDataStructure( int initialCapacity ) { - // return stateArrayType - return NULL; + StateArrayType *stateDataStructure; + // initialize data structure + stateDataStructure = malloc(sizeof(StateArrayType)); + stateDataStructure->size = 0; + stateDataStructure->capacity = initialCapacity; + // initialize array for data structure + stateDataStructure->array = malloc(sizeof(StateDataType) * initialCapacity); + // return data structure + return stateDataStructure; } /* @@ -89,6 +104,13 @@ Dependencies: privateCopyString */ void deepCopyData( StateDataType *dest, const StateDataType src ) { + // *dest.population = src.population (for each piece) + dest->population = src.population; + dest->growth = src.growth; + dest->majority = src.majority; + // privateCopyString for the string + // privateCopyString(*dest.name, src.name) + privateCopyString(dest->name, src.name); // no return, void } @@ -107,6 +129,36 @@ Dependencies: printf, listIsEmpty */ void displayData( const StateArrayType stateData, const char *subTitle ) { + int displayIterator; + // check to see if the list isn't empty + if(!listIsEmpty(stateData)) + { + // if that is true, then display: + // print Display Data + printf("Display Data - "); + // print subtitle (and new line) + printf("%s\n", subTitle); + // for loop (iterates through the array data) + for(displayIterator = 0; displayIterator < stateData.size; displayIterator++) + { + // print Name, + printf("%s, ", stateData.array[displayIterator].name); + // print Population, + printf("%d, ", stateData.array[displayIterator].population); + // print Growth, + printf("%f, ", stateData.array[displayIterator].growth); + // print Majority + printf("%c\n", stateData.array[displayIterator].majority); + // print newline (included above) + } + // end for loop + } + else + { + // otherwise, display: + // print Data Not Found + printf("Data not found - Display aborted\n"); + } // no return, void } @@ -128,6 +180,11 @@ Dependencies: deepCopyData, setItemToEmpty bool getItemAtIndex( StateDataType *returnVal, const StateArrayType stateData, int listIndex ) { + // check stateData size against list index + // copy data into returnVal + // return true + // otherwise, + // use setItemToEmpty for returnVal // return false (TEMP) return false; } @@ -144,8 +201,8 @@ Dependencies: none */ int getListSize( const StateArrayType stateData ) { - // return 0 (TEMP) - return 0; + // return stateData.size + return stateData.size; } /* @@ -166,7 +223,13 @@ Dependencies: checkForResize bool insertItemAtIndex( StateArrayType *stateData, StateDataType toBeInserted, int insertIndex ) { + // check for resize + // check to see if index is within size + // shift elements right of index to right + // insert element at index + // return true // return false (TEMP) + return false; } /* @@ -181,7 +244,14 @@ Dependencies: none */ bool listIsEmpty( const StateArrayType array ) { - // return false (TEMP) + // check to see if size is equal to 0 + if(array.size == 0) + { + // return true since array empty + return true; + } + // return false if not empty + return false; } /* @@ -200,6 +270,26 @@ Dependencies: malloc, sizeof (C keyword), deepCopyData, free */ void privateCheckForResize( StateArrayType *stateData ) { + StateDataType *biggerStateArray; + int resizeIterator; + // do a check for size equal to capacity + if(stateData->size == stateData->capacity) + { + // 'create' bigger array + stateData->capacity = stateData->capacity * 2; + // allocate the bigger array + biggerStateArray = (StateDataType *)malloc(sizeof(StateDataType) * stateData->capacity); + // copy the new array stuff into the old space, use loop + for(resizeIterator = 0; resizeIterator < stateData->size; resizeIterator++) + { + // use deep copy to copy the pieces of smaller array + deepCopyData(&biggerStateArray[resizeIterator], stateData->array[resizeIterator]); + } + // free the old array + free(stateData->array); + // point the stateArray to the old array + stateData->array = biggerStateArray; + } // no return, void } @@ -215,6 +305,17 @@ Dependencies: none */ void privateCopyString( char *dest, const char *src ) { + int characterCount = 0; + // use a while loop, check for !NULL_CHAR + while(src[characterCount] != NULL_CHAR) + { + // copy the character accessed into dest string + dest[characterCount] = src[characterCount]; + // iterate the number of characters + characterCount = characterCount + 1; + } + // add a NULL_CHAR once done. (destStringIterator + 1) + dest[characterCount + 1] = NULL_CHAR; // no return, void } @@ -235,7 +336,11 @@ Dependencies: none bool removeItemAtIndex( StateArrayType *stateData, StateDataType *removedItem, int removeIndex ) { - // return false (TEMP) + // check to see if index is within size + // for loop (iterate through list starting at the index) + // shift the next element to current element. + // return true once done + // return false if item not removable? return false; } @@ -253,5 +358,12 @@ Dependencies: none */ void setItemToEmpty( StateDataType *data ) { + // set the data's name to "" + data->name[0] = NULL_CHAR; + // set the data's population and growth to 0 + data->population = 0; + data->growth = 0.0; + // set the data's majority to 'x' + data->majority = 'x'; // no return, void } \ No newline at end of file diff --git a/PA05-1004/PA05_Main b/PA05-1004/PA05_Main new file mode 100755 index 0000000000000000000000000000000000000000..183f669027711db632fd78d0e167f0b633b5cebd GIT binary patch literal 33528 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

U+GuAs(9e!9pVZgS(( zO3mI7IBWgx`bPg+PoujQPxOb}p2#|*#@`fZ^x}c&g2L1s^pz){+Y=0W*1Pe5dT>2H z&V)zt-L;XXru7ifN^Wq5EvyyAh4bCz`0^8sTCsA4yP~pmMOE>&WlrNpXXQ%wQde=M zJo}%;Wz|ljm};R%pPkM1zGg3k)awV;cy8SnUJuOm^yGQ6D4xep7MJ>)L;gmuyL6>H ziKJ)2-KEX=RFsCqdjc!#h*Hw%sV|sg)Zw(kk55c_g9wEXSs4jiW!&zP%HndT+qq(y z8=rn!_RST=<)upz1bnW|?Q}8KwXD)`FE3kpZE=}_)qI155n@;i9pu zy1e|G?$Q+%)m842(lV#JqN>se;7tMH5}MQN344XN20ndtI|@r1yfwF$_=A<+5Pfxv zK9W_WzG_9EtrDNW!b9wMDE_)gDD12Ad26fuBLim0OK8iCSjKOF)#VWFteHkhEKdgQXJ-2 z2}uwGzyLne60%RyR(b22 zkmx4GQ&Zy&g}}SAPADV8DQAr3sD5R2m8Jb8vrHUf4i&0za>T{7pZ{L8$Jz9ziSqxa3)kl)?lL1)7F;q~4MHF$GJj!S03(nuQ$*ZP{> zkq{E0R=(E5-B<6dDh14VucYt(!EA~Lx(cd>e30Jd^6GNb$?d&N+91bC`RzfA-}1wO z7F6kq(yCI7$1AGK-K(mKtDLK3$CKl$)JG9VJIGgn&|~plkm#Ic2qT8nZ!{o0s{)=H z*&SqyCHsIGWHCOdY$K?zN#1=YrPl@f}8dV^P%4 zLr91%&_+t?+Tvr2+Rz~kw7Rc(VU8xOjK)3gNTf`Bz|j(HIS85!t;RrMDI10l=>=r_ z@jzdP_P31nH9Sw!7$n9bdKJ)|FT}?m%}N)@k%S{=+H1jzI97V@5b37oAO5JMsffmr zI^ntn<#tzzl%!wSeKEgbnHp1D-b+ zFbeR7nzx|7IZ}YE4d9i}^%`nz#D~x4`f3?fd~NA$TBZv21`j^$Sx~#a8C6Ia4ob@H z-eAb*Z?+WNpas2+9unZQKx5b_5H1(sw4mOPBAtZ1HAX?0B3vM*&4Qqx#!aKZ+rTT; zhFWM-C8t55Sh(lwZj53Kl9xhS)w@4%#2-@(nDn;4}+2-9xb+r8aqWKTko2m3@T#H$ca0 zSbpWdy05LEs(&2ovD@zfemwq^d^g*#;0;V5A1TgCUfqB80Y@TAUfoAmP~A5Ni#XK& zO_k}s2i=oa^6Eacg6evNvS0BjxC!!fk6V@1eQpISxFWm#s{S^dP@5=ub>CgVc4k!d z+x`C=mcN$yb})m2>b^h8Q_Sr0KLU zCpP&t6J>1*Dt={yDl53lCLdsV1q;8V{{Ll@-@z9i6}<0KRkMVuUWNUoOzE zz5e$=I~{-AZO!}X`FsPz&acV}9)WDGCa<2GDLg^>FCa^~tLj(xbr-Tcy(dTq^*=gP zy{aAm2{>X=^6I&nd^d3$Mz;j!|4LrLaS+z!&HD#yq=>3VDNu5%Oz&zEPSvlj!{x1! z9EFOJp_K-p+j4W2zt>P0gQFjI5;lA-$nRS^{eq0m)T6)acUmw fJH+M-^Gs3oDn{zA%6Ek$c-{tCnqm{M6^;J_E@r%8 literal 0 HcmV?d00001