adding cs142 code
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
#include<string>
|
||||
#include <iostream>
|
||||
|
||||
#include "cookies.h"
|
||||
|
||||
void addOrder(string * cookies[], int * size, string new_name) {
|
||||
string * s = findOrder(cookies, size, new_name);
|
||||
if(s == NULL)
|
||||
s = new string(new_name);
|
||||
cookies[*size] = s;
|
||||
(*size)++;
|
||||
}
|
||||
|
||||
int deliverOrder(string * cookies[], int * size, string name) {
|
||||
string * s = findOrder(cookies, size, name);
|
||||
if(s == NULL)
|
||||
return 0;
|
||||
|
||||
// interesting note, temp_cookies gets allocatied on the stack and (see
|
||||
// note above return) ...
|
||||
string * temp_cookies [MAXIMUM_SIZE] = {};
|
||||
|
||||
int removes = 0;
|
||||
int temp_pos = 0;
|
||||
for(int i = 0; i < *size; i++) {
|
||||
if(cookies[i] == s) {
|
||||
// pass
|
||||
removes += 1;
|
||||
}
|
||||
else {
|
||||
temp_cookies[temp_pos] = cookies[i];
|
||||
temp_pos++;
|
||||
}
|
||||
}
|
||||
|
||||
// copy from the tmp buffer into the original passed-by-pointer array
|
||||
for(int i = 0; i < temp_pos; i++) {
|
||||
cookies[i] = temp_cookies[i];
|
||||
}
|
||||
|
||||
*size = temp_pos;
|
||||
|
||||
// this removes the memory newed above (in addOrder) from the HEAP
|
||||
delete s;
|
||||
|
||||
// ... temp_cookies (along with removes and temp_pos) gets cleaned up at
|
||||
// this point ... Stack stack stack
|
||||
return removes;
|
||||
}
|
||||
|
||||
bool modifyOrder(string * cookies[], int * size, string original_name, string new_name) {
|
||||
string * s = findOrder(cookies, size, original_name);
|
||||
if(s == NULL)
|
||||
return false;
|
||||
|
||||
*s = new_name;
|
||||
return true;
|
||||
}
|
||||
|
||||
string displayOrders(string * cookies[], int * size) {
|
||||
string r;
|
||||
for(int i=0; i < *size; i++) {
|
||||
r += *cookies[i];
|
||||
if(i < *size - 1)
|
||||
r += ", ";
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
string * findOrder(string * cookies[], int * size, string name) {
|
||||
string * r = NULL;
|
||||
for(int i=0; i<*size; i++) {
|
||||
if(*cookies[i] == name) {
|
||||
r = cookies[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
void clean_up(string * cookies[], int * size) {
|
||||
string * deletable_cookies [MAXIMUM_SIZE] = {};
|
||||
int del_size = 0;
|
||||
for(int i = 0; i < *size; i++) {
|
||||
if(!findOrder(deletable_cookies, &del_size, *cookies[i])) {
|
||||
deletable_cookies[del_size] = cookies[i];
|
||||
del_size++;
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < del_size; i++)
|
||||
delete deletable_cookies[i];
|
||||
}
|
||||
Reference in New Issue
Block a user