#include #include #include #include "teams.h" #define __COBJ_PRIV_IMPLS_H__ #include "cobj.h" // Setter definitions // @set char[]: TEAM.name -> bool Setter(team, name, ref(char), { return !(strncpy(SELF(name), value, 255) == NULL); }) // @set char[]: TEAM.institution -> bool Setter(team, institution, ref(char), { return !(strncpy(SELF(institution), value, 255) == NULL); }) // @set char[]: TEAM.member_name, int: id -> bool Setter(team, member_name, ref(char), { return (id > 0 && id < 4 && !(strncpy(SELF(member_name)[id-1], value, 255) == NULL)); }, int id) // @set int: TEAM.solved -> bool Setter(team, solved, uint8_t, { if (value <= 10) SELF(solved) = value; return (value <= 10); }) // Getter definitions // @get TEAM.name -> char[] Getter(team, name, ptr(char), { return SELF(name); }) // @get TEAM.institution -> char[] Getter(team, institution, ptr(char), { return SELF(institution); }) // @get TEAM.solved -> int Getter(team, solved, uint8_t, { return SELF(solved); }) static char* const _id_error = (char *)"(incorrect id)"; // C++ fix // @get TEAM.member_name, id -> char[] Getter(team, member_name, ptr(char), { return (id > 0 && id < 4)? SELF(member_name)[id - 1] : _id_error; }, int id) Define(team, printf, int, { return call(self, fprintf, stdout); }) Define(team, fprintf, int, { return fprintf(file, "Team name : %s\n" "Institution: %s\n" "Solved : %u\n" " Member 1: %s\n" " Member 2: %s\n" " Member 3: %s\n", SELF(name), SELF(institution), SELF(solved), SELF(member_name)[0], SELF(member_name)[1], SELF(member_name)[2]); }, ptr(FILE) file) Define(team, find_champion, team, { UNUSED(self); team champion = teams[num - 1]; while(num --) if (GET(teams[num], solved) > GET(champion, solved) ) champion = teams[num]; return champion; }, ptr(team) teams, size_t num) // base functions New(team, { team self = (team)malloc(sizeof(TYPE(team))); if (self) { PROPERTY(team, name); PROPERTY(team, member_name); PROPERTY(team, institution); PROPERTY(team, solved); CALLABLE(team, printf); CALLABLE(team, fprintf); CALLABLE(team, find_champion); } return self; }) Del(team, { if(self) free(self); })