Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*tinder.c*/
- #include "tinder.h"
- struct Tinder_t{
- Map users;
- Map hobbies;
- FILE *output;
- };
- #define INITIAL_CHECKS(tinder)\
- if(!tinder || !tinder->users || !tinder->hobbies || !tinder->output){\
- return TINDER_INVALID_PARAMETERS;}
- #define CHECK_TINDER_IF_NULL_RETURN_INVALID if(tinder==NULL){\
- return TINDER_INVALID_PARAMETERS;}
- static TinderResult checkHobbyResult(HobbyResult result){
- TinderResult tResult;
- switch (result) {
- case HOBBY_ALREADY_EXISTS:
- tResult = TINDER_HOBBY_ALREADY_EXISTS;
- break;
- case HOBBY_OUT_OF_MEMORY:
- tResult = TINDER_OUT_OF_MEMORY;
- break;
- case HOBBY_DOESNT_EXIST:
- tResult = TINDER_HOBBY_DOES_NOT_EXIST;
- break;
- case HOBBY_USER_DOESNT_EXISTS:
- tResult = TINDER_USER_DOES_NOT_EXIST;
- break;
- case HOBBY_USER_ALREADY_EXISTS:
- tResult = TINDER_USER_ALREADY_EXISTS;
- break;
- case HOBBY_NULL_ARGUMENT:
- tResult = TINDER_INVALID_PARAMETERS;
- break;
- case HOBBY_INVALID_PARAMETERS:
- tResult = TINDER_INVALID_PARAMETERS;
- break;
- case HOBBY_NO_HOBBIES:
- tResult = TINDER_NO_HOBBIES;
- break;
- case HOBBY_NO_USERS:
- tResult = TINDER_NO_USERS;
- break;
- case HOBBY_USER_DOESNT_PARTICIPATE_HOBBY:
- tResult = TINDER_USER_DOESNT_PARTICIPATE_HOBBY;
- break;
- case HOBBY_USER_ALREADY_PARTICIPATES_HOBBY:
- tResult = TINDER_USER_ALREADY_PARTICIPATES_HOBBY;
- break;
- default:
- tResult = TINDER_SUCCESS;
- break;
- }
- return tResult;
- }
- static TinderResult checkUserResult(UserResult result) {
- TinderResult tResult = TINDER_SUCCESS;
- switch (result) {
- case USER_FAILED:
- tResult = TINDER_OUT_OF_MEMORY;
- break;
- case USER_NULL_ARGUMENT:
- tResult = TINDER_INVALID_PARAMETERS;
- break;
- case USER_NOT_FRIENDS:
- tResult = TINDER_USER_NOT_FRIEND;
- break;
- case USER_DOESNT_EXIST:
- tResult = TINDER_USER_DOES_NOT_EXIST;
- break;
- case USER_ALREADY_EXISTS:
- tResult = TINDER_USER_ALREADY_EXISTS;
- break;
- case USER_NO_USERS:
- tResult = TINDER_NO_USERS;
- break;
- case USER_INVALID_PARAMETERS:
- tResult = TINDER_INVALID_PARAMETERS;
- break;
- case USER_NO_USER_REQUEST:
- tResult = TINDER_NO_USER_REQUEST;
- break;
- case USER_ALREADY_FRIENDS:
- tResult = TINDER_USER_ALREADY_FRIEND;
- break;
- default:
- tResult = TINDER_SUCCESS;
- break;
- }
- return tResult;
- }
- ///////////////////////////Module functions/////////////////////////////////////
- Tinder createTinder(FILE* output){
- assert(output != NULL);
- Tinder tinder = malloc(sizeof(*tinder));
- if(!tinder){
- return NULL;
- }
- tinder->output = output;
- tinder->users = mapCreate(copyDataUser,copyID,freeDataUser,freeID,compareVoidID);
- if(!tinder->users){
- free(tinder);
- return NULL;
- }
- tinder->hobbies = mapCreate(copyHobbyData, copyHobbyKey, freeHobbyData,
- freeHobbyKey,compareMapKeys);
- if(!tinder->hobbies){
- mapDestroy(tinder->users);
- free(tinder);
- return NULL;
- }
- return tinder;
- }
- void tinderDestroy(Tinder tinder){
- if(tinder!= NULL){
- mapDestroy(tinder->users);
- mapDestroy(tinder->hobbies);
- free(tinder);
- }
- }
- TinderResult tinderHobbyAdd(Tinder tinder, char* name){
- INITIAL_CHECKS(tinder);
- HobbyResult result = hobbyAdd(tinder->hobbies, name);
- return checkHobbyResult(result);
- }
- TinderResult tinderHobbyRemove(Tinder tinder, char* name){
- INITIAL_CHECKS(tinder);
- HobbyResult result = hobbyRemove(tinder->hobbies, name);
- return checkHobbyResult(result);
- }
- TinderResult tinderHobbyJoin(Tinder tinder, char* name ,int id){
- INITIAL_CHECKS(tinder);
- HobbyResult result = hobbyJoin(tinder->hobbies,tinder->users, name, id);
- return checkHobbyResult(result);
- }
- TinderResult tinderHobbyLeave(Tinder tinder, char* name ,int id){
- INITIAL_CHECKS(tinder);
- HobbyResult result = hobbyLeave(tinder->hobbies,tinder->users, name, id);
- return checkHobbyResult(result);
- }
- TinderResult tinderHobbyReport(Tinder tinder, int count){
- INITIAL_CHECKS(tinder);
- HobbyResult result = hobbyReport(tinder->hobbies,count, tinder->output);
- return checkHobbyResult(result);
- }
- TinderResult tinderHobbyReportByAge(Tinder tinder){
- INITIAL_CHECKS(tinder);
- HobbyResult result = hobbyReportByAge(tinder->hobbies, tinder->users,
- tinder->output);
- return checkHobbyResult(result);
- }
- TinderResult tinderUserAdd(int id, char* name, int year, Gender gender,
- Gender pref, Tinder tinder) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userAdd(id, name, year, gender, pref,
- tinder->users);
- return checkUserResult(result);
- }
- TinderResult tinderUserRemove(Tinder tinder, int id) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userRemove(tinder->users, tinder->hobbies, id);
- return checkUserResult(result);
- }
- TinderResult tinderUserReport(Tinder tinder) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userReport(tinder->users, tinder->output);
- return checkUserResult(result);
- }
- TinderResult tinderUserFriendRequest(Tinder tinder, int idIng, int idEd) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userFriendRequest(tinder->users, idIng, idEd);
- return checkUserResult(result);
- }
- TinderResult tinderUserHandleRequest(Tinder tinder, int idIng, int idEd,
- char* choice) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userHandleRequest(tinder->users, idIng, idEd,
- choice);
- return checkUserResult(result);
- }
- TinderResult tinderUserUnfriend(Tinder tinder, int idIng, int idEd) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userUnfriend(tinder->users, idIng, idEd);
- return checkUserResult(result);
- }
- TinderResult tinderUserWhoCanIDate(Tinder tinder, int id1, int count) {
- CHECK_TINDER_IF_NULL_RETURN_INVALID
- UserResult result = userWhoCanIDate(tinder->users, id1, count,
- tinder->output);
- return checkUserResult(result);
- }
- ///////////////////////////Testing functions////////////////////////////////////
- int* getTinderUserId(Tinder tinder){
- assert(tinder!=NULL);
- MapKeyElement key = mapGetFirst(tinder->users);
- return (int*)key;
- }
- int getTindetUsersSize(Tinder tinder){
- assert(tinder!=NULL);
- return mapGetSize(tinder->users);
- }
- char* getTinderUserName(Tinder tinder, int id){
- int* key = createMapKey(id);
- MapDataElement data = mapGet(tinder->users,key);
- freeID(key);
- return getUserName(data);
- }
- int getTinderUserBirthYear(Tinder tinder, int id){
- int* key = createMapKey(id);
- MapDataElement data = mapGet(tinder->users,key);
- freeID(key);
- return getUserBirthYear(data);
- }
- Gender getTinderUserGender(Tinder tinder, int id){
- int* key = createMapKey(id);
- MapDataElement data = mapGet(tinder->users,key);
- freeID(key);
- return getUserGender(data);
- }
- Gender getTinderUserPref(Tinder tinder, int id){
- int* key = createMapKey(id);
- MapDataElement data = mapGet(tinder->users,key);
- freeID(key);
- return getUserPref(data);
- }
- Map getTinderUsers(Tinder tinder){
- assert(tinder!=NULL);
- return tinder->users;
- }
- char* getHobby(Tinder tinder){
- return (char*)mapGetFirst(tinder->hobbies);
- }
- bool hobbyExists(Tinder tinder, char* hobby){
- return mapContains(tinder->hobbies,hobby);
- }
- bool userParticipatesHobby(Tinder tinder, char* name, MapKeyElement idKey){
- return setIsIn(getPplLikeHobby((HobbyData)mapGet(tinder->hobbies, name)),
- idKey);
- }
- bool hobbyExistsInUsersHobbies(Tinder tinder, char* name, MapKeyElement idKey){
- return setIsIn(getHobbiesOfUser((UserData)mapGet(tinder->users,idKey)),
- name);
- }
- int getHobbyPplSetSize(Tinder tinder, char* name){
- return getNumPplLikeHobby((HobbyData)mapGet(tinder->hobbies, name));
- }
- bool checkContainIdInUsers(Tinder tinder, int id){
- assert(tinder!=NULL);
- int* key = createMapKey(id);
- if(key==NULL){
- return false;
- }
- bool answer = mapContains(tinder->users,key);
- freeID(key);
- return answer;
- }
- bool checkInFriendsSet(Tinder tinder, int id1, int id2){
- if(tinder==NULL){
- return false;
- }
- int* key1 = createMapKey(id1);
- if(key1==NULL){
- return false;
- }
- int* key2 = createMapKey(id2);
- if(key2==NULL){
- freeID(key1);
- return false;
- }
- bool answer = checkIfInFriendSet(tinder->users,key1,key2);
- freeID(key1);
- freeID(key2);
- return answer;
- }
- bool checkInFriendsRequests(Tinder tinder, int id1, int id2){
- if(tinder==NULL){
- return false;
- }
- int* key1 = createMapKey(id1);
- if(key1==NULL){
- return false;
- }
- int* key2 = createMapKey(id2);
- if(key2==NULL){
- freeID(key1);
- return false;
- }
- bool answer = checkIfInFriendRequests(tinder->users,key1,key2);
- freeID(key1);
- freeID(key2);
- return answer;
- }
- int getTinderFriendsSetSize(Tinder tinder, int id){
- if(tinder==NULL){
- return -1;
- }
- MapKeyElement key1 = createMapKey(id);
- if(key1==NULL){
- return -1;
- }
- int size = getSizeSetFriends(tinder->users,key1);
- freeID(key1);
- return size;
- }
- int getTinderRequestsSetSize(Tinder tinder, int id){
- if(tinder==NULL){
- return -1;
- }
- MapKeyElement key1 = createMapKey(id);
- if(key1==NULL){
- return -1;
- }
- int size = getSizeSetFriendRequests(tinder->users,key1);
- freeID(key1);
- return size;
- }
- bool userExistsInHobbySet(Tinder tinder, int userID){
- MAP_FOREACH(MapKeyElement, hobby, tinder->hobbies){
- HobbyData currHobby = (HobbyData)mapGet(tinder->hobbies, hobby);
- int *idKEy = createMapKey(userID);
- if(setIsIn(getPplLikeHobby(currHobby), idKEy)){
- return false;
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement