From 5b1f702f012e9fcb0e64cdb6954759acc4c13e31 Mon Sep 17 00:00:00 2001 From: schodet Date: Wed, 10 Sep 2003 20:12:26 +0000 Subject: Aprés 2003 --- 2003/i/buzz/src/config/config.cc | 3 ++- 2003/i/buzz/src/date/Makefile.defs | 8 ++++++ 2003/i/buzz/src/date/date.cc | 54 ++++++++++++++++++++++++++++++++++++++ 2003/i/buzz/src/date/date.h | 33 +++++++++++++++++++++++ 2003/i/buzz/src/date/test_date.cc | 22 ++++++++++++++++ 5 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 2003/i/buzz/src/date/Makefile.defs create mode 100644 2003/i/buzz/src/date/date.cc create mode 100644 2003/i/buzz/src/date/date.h create mode 100644 2003/i/buzz/src/date/test_date.cc (limited to '2003/i/buzz/src') diff --git a/2003/i/buzz/src/config/config.cc b/2003/i/buzz/src/config/config.cc index 3e764ae..7cbf5f0 100644 --- a/2003/i/buzz/src/config/config.cc +++ b/2003/i/buzz/src/config/config.cc @@ -93,5 +93,6 @@ Config::isId (const char *s) void Config::noId (void) { - throw ErreurConfig (m_filename, "Identificateur inconnu.\n"); + throw ErreurConfig (m_filename, config_yylval.id, + "Identificateur inconnu.\n"); } diff --git a/2003/i/buzz/src/date/Makefile.defs b/2003/i/buzz/src/date/Makefile.defs new file mode 100644 index 0000000..1d4474c --- /dev/null +++ b/2003/i/buzz/src/date/Makefile.defs @@ -0,0 +1,8 @@ +LIBS += date.a +TARGETS += test_date +date_a_SOURCES = date.cc +test_date_SOURCES = test_date.cc date.a + +test_date: $(test_date_SOURCES:%.cc=%.o) + +date.a: ${date_a_SOURCES:%.cc=date.a(%.o)} diff --git a/2003/i/buzz/src/date/date.cc b/2003/i/buzz/src/date/date.cc new file mode 100644 index 0000000..daffd74 --- /dev/null +++ b/2003/i/buzz/src/date/date.cc @@ -0,0 +1,54 @@ +// date.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "date.h" + +#include +#include + +// Pointeur vers l'instance unique. +Date *Date::m_instance = 0; + +// Constructeur. +Date::Date (void) +{ + m_start = getDate (); + m_round = -1; + m_instance = this; +} + +// Destructeur. +Date::~Date (void) +{ + m_instance = 0; +} + +// Signale le début du match. +void +Date::startRound (void) +{ + m_round = getDate (); +} + +// Retourne la date système. +int +Date::getDate (void) +{ + timeval tv; + gettimeofday (&tv, 0); + // Ça veut dire, un bug tous les 11 jours... + // Cette année : le 26/05/2003, et le 06/05/2003. Mais le robot n'est pas + // à l'heure de toue façon. + return (tv.tv_sec % 1000000) * 1000 + tv.tv_usec / 1000; +} + +// Attend un nombre de millisecondes. +void +Date::wait (int t) +{ + timespec ts, r; + ts.tv_sec = t / 1000; + ts.tv_nsec = t * 1000000; + nanosleep (&ts, &r); +} diff --git a/2003/i/buzz/src/date/date.h b/2003/i/buzz/src/date/date.h new file mode 100644 index 0000000..a86916e --- /dev/null +++ b/2003/i/buzz/src/date/date.h @@ -0,0 +1,33 @@ +#ifndef date_h +#define date_h +// date.h +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet + +class Date +{ + // On travaille en millième de seconde, ça nous fait 24 jours dans un int. + int m_start, m_round; + // Pointeur vers l'instance unique. + static Date *m_instance; + public: + // Constructeur. + Date (void); + // Destructeur. + ~Date (void); + // Retourne une référence vers l'instance unique. + static Date &getInstance (void) { return *m_instance; } + // Retourne la date depuis le début du match, en millième de secondes. + int round (void) { return m_round == -1 ? 0 : getDate () - m_round; } + // Retourne la date depuis le début du programme. + int start (void) { return getDate () - m_start; } + // Signale le début du match. + void startRound (void); + // Attend un nombre de millisecondes. + static void wait (int t); + private: + // Retourne la date système. + int getDate (void); +}; + +#endif // date_h diff --git a/2003/i/buzz/src/date/test_date.cc b/2003/i/buzz/src/date/test_date.cc new file mode 100644 index 0000000..51246a0 --- /dev/null +++ b/2003/i/buzz/src/date/test_date.cc @@ -0,0 +1,22 @@ +// test_date.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "date.h" + +#include +#include + +int +main (void) +{ + Date d; + sleep (2); + cout << "date " << d.start () << ' ' << d.round () << endl; + d.startRound (); + sleep (1); + cout << "date " << d.start () << ' ' << d.round () << endl; + sleep (2); + cout << "date " << d.start () << ' ' << d.round () << endl; + return 0; +} -- cgit v1.2.3