#include #include #include #define __COBJ_IMPL__ #include "teams.h" // Setter definitions // @set char[]: TEAM.name -> bool Set(team, name, ref(char), { return !(strncpy(Self(name), value, 255) == NULL); }) // @set char[]: TEAM.institution -> bool Set(team, institution, ref(char), { return !(strncpy(Self(institution), value, 255) == NULL); }) // @set char[]: TEAM.member_name, int: id -> bool Set(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 Set(team, solved, uint8_t, { if (value <= 10) Self(solved) = value; return (value <= 10); }) // Getter definitions // @get TEAM.name -> char[] Get(team, name, ptr(char), { return Self(name); }) // @get TEAM.institution -> char[] Get(team, institution, ptr(char), { return Self(institution); }) // @get TEAM.solved -> int Get(team, solved, uint8_t, { return Self(solved); }) // @get TEAM.member_name, id -> char[] static char* const _id_error = (char *)"(incorrect id)"; // C++ fix Get(team, member_name, ptr(char), { return (id > 0 && id < 4)? Self(member_name)[id - 1] : _id_error; }, int id) Def(team, printf, int, { return Call(self, fprintf, stdout); }) Def(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) Def(team, find_champion, team, { UNUSED(self); team champion = teams[num - 1]; while(num --) if (Attr(teams[num], solved) > Attr(champion, solved) ) champion = teams[num]; return champion; }, ptr(team) teams, size_t num) Del(team, DefaultDelete) // base functions New(team, { Prop(team, name); Prop(team, member_name); Prop(team, institution); Prop(team, solved); Func(team, printf); Func(team, fprintf); Func(team, find_champion); DelF(team); })