summaryrefslogtreecommitdiff
path: root/src/teams.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/teams.c')
-rw-r--r--src/teams.c71
1 files changed, 31 insertions, 40 deletions
diff --git a/src/teams.c b/src/teams.c
index bfee347..f75f161 100644
--- a/src/teams.c
+++ b/src/teams.c
@@ -2,8 +2,9 @@
#include <stdlib.h>
#include <string.h>
-#define __IMPL_TEAMS_INTERNAL
#include "teams.h"
+#define __IMPL_TEAMS_INTERNAL
+#include "teams-hell.h"
typedef struct team_impl_struct {
char name[255];
@@ -11,74 +12,65 @@ typedef struct team_impl_struct {
char institution[255];
uint8_t solved;
} TEAM_impl;
+
// base functions
-TEAM team_new()
-{
+NEW(team, TEAM, {
return (TEAM_impl *)malloc(sizeof(TEAM_impl));
-}
-void team_del(TEAM self)
-{
+})
+
+DEL(team, TEAM, {
if(self) free(self);
-}
+})
// Setter definitions
// @set char[]: TEAM.name -> bool
-SETTER(team, name, TEAM, char *)
-{
+SETTER(team, name, TEAM, char *, {
return !(strncpy(self->name, value, 255) == NULL);
-}
+})
// @set char[]: TEAM.institution -> bool
-SETTER(team, institution, TEAM, char *)
-{
+SETTER(team, institution, TEAM, char *, {
return !(strncpy(self->institution, value, 255) == NULL);
-}
+})
// @set char[]: TEAM.member_name, int: id -> bool
-SETTER(team, member_name, TEAM, char *, int id)
-{
+SETTER(team, member_name, TEAM, char *, {
return (id > 0 && id < 4 && !(strncpy(self->members[id-1], value, 255) == NULL));
-}
+}, int id)
+
// @set int: TEAM.solved -> bool
-SETTER(team, solved, TEAM, uint8_t)
-{
+SETTER(team, solved, TEAM, uint8_t, {
if (value <= 10)
self->solved = value;
return (value <= 10);
-}
+})
// Getter definitions
// @get TEAM.name -> char[]
-GETTER(team, name, TEAM, char *)
-{
+GETTER(team, name, TEAM, char *, {
return self->name;
-}
+})
// @get TEAM.institution -> char[]
-GETTER(team, institution, TEAM, char *)
-{
+GETTER(team, institution, TEAM, char *, {
return self->institution;
-}
+})
// @get TEAM.solved -> int
-GETTER(team, solved, TEAM, uint8_t)
-{
+GETTER(team, solved, TEAM, uint8_t, {
return self->solved;
-}
+})
// @get TEAM.member_name, id -> char[]
-GETTER(team, member_name, TEAM, char *, int id)
-{
+GETTER(team, member_name, TEAM, char *, {
return (id > 0 && id < 4)? self->members[id - 1] : "(incorrect id)";
-}
+}, int id)
-DEFINE(team, printf, TEAM, int)
-{
+DEFINE(team, printf, TEAM, int, {
return fun(team, fprintf, self, stdout);
-}
+})
-DEFINE(team, fprintf, TEAM, int, FILE *file)
-{
+DEFINE(team, fprintf, TEAM, int, {
return fprintf(file,
"Team name : %s\n"
"Institution: %s\n"
@@ -92,10 +84,9 @@ DEFINE(team, fprintf, TEAM, int, FILE *file)
self->members[0],
self->members[1],
self->members[2]);
-}
+}, FILE *file)
-DEFINE(team, find_champion, TEAM, TEAM, TEAM *teams, unsigned num)
-{
+DEFINE(team, find_champion, TEAM, TEAM, {
UNUSED(self);
TEAM champion = teams[num - 1];
@@ -103,4 +94,4 @@ DEFINE(team, find_champion, TEAM, TEAM, TEAM *teams, unsigned num)
if ( teams[num]->solved > champion->solved )
champion = teams[num];
return champion;
-}
+}, TEAM *teams, unsigned num)