From 4c6644e1b2c588671164014182c4520212f964ca Mon Sep 17 00:00:00 2001 From: Adam Joly Date: Tue, 9 Jul 2024 13:18:59 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat:=20added=20t?= =?UTF-8?q?iming=20calc=20and=20parsing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- philo/include/philo.h | 28 +++++++++++++++++++----- philo/include/utils.h | 18 ++++++++++++++++ philo/philo | Bin 17488 -> 0 bytes philo/src/ft_atoll.c | 35 ++++++++++++++++++++++++++++++ philo/src/get_time_in_ms.c | 19 +++++++++++++++++ philo/src/log.c | 4 ++-- philo/src/parse_argv.c | 40 +++++++++++++++++++++++++++++++++++ philo/src/philo.c | 21 ++++++++++++++---- philo/src/print_philo_data.c | 18 ++++++++++++++++ 9 files changed, 172 insertions(+), 11 deletions(-) create mode 100644 philo/include/utils.h delete mode 100755 philo/philo create mode 100644 philo/src/ft_atoll.c create mode 100644 philo/src/get_time_in_ms.c create mode 100644 philo/src/parse_argv.c create mode 100644 philo/src/print_philo_data.c diff --git a/philo/include/philo.h b/philo/include/philo.h index 4b884b7..439f74e 100644 --- a/philo/include/philo.h +++ b/philo/include/philo.h @@ -6,26 +6,44 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/07 15:11:02 by adjoly #+# #+# */ -/* Updated: 2024/07/07 16:18:23 by adjoly ### ########.fr */ +/* Updated: 2024/07/09 12:04:14 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef PHILO_H # define PHILO_H -# include # include # include +# include +# include -typedef enum s_philo_state +typedef enum s_pstate { DIED = -1, EAT, THINK, SLEEP, FORK_TAKEN -} t_philo_state; +} t_pstate; -void log_philo(uint32_t timestamp, uint16_t philo, t_philo_state type); +typedef struct s_pdata +{ + uint32_t die_time; + uint32_t sleep_time; + uint32_t eat_time; + uint16_t philo_nbr; + uint8_t meal_nbr; + bool error; +} t_pdata; + +void log_philo(uint32_t timestamp, uint16_t philo, t_pstate type); +t_pdata philo_parse(char **argv, int ac); +uint16_t get_time_in_ms(struct timeval t0, struct timeval t1); + +/** + * For debug purpose to be REMOVED + */ +void print_philo_data(t_pdata data); #endif diff --git a/philo/include/utils.h b/philo/include/utils.h new file mode 100644 index 0000000..751aafa --- /dev/null +++ b/philo/include/utils.h @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/08 17:46:19 by adjoly #+# #+# */ +/* Updated: 2024/07/08 17:46:50 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef UTILS_H +# define UTILS_H + +long long ft_atoll(const char *nptr); + +#endif diff --git a/philo/philo b/philo/philo deleted file mode 100755 index 6c0685fa19b26934df25849255c0c29d93a58e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17488 zcmeHOdu$xV8K1p}ZDL|yY#z>|WC=+~p}zAgt|5@DV>>w~&V%4kpn}c$Ztc5rzH{&P zXiRw+g@;Uv8qx|>l~(4D7F8-ODo8wvAT)@Fs8kSD)xX*Zff__hjha@J(p-Pv%zWqb z)@~6+m0ImsGvD(!-|V-0vpe3M+XjZV1q?%Q35d;tBr9S`m1>1JvPp_s*CUn+OI#q< zh#F`@sFt)4RUFe_2b6(no%RcY60U_9Nv(Nwm6U{F$|EF7xVd6!R?(KQ5}AsKk_jhG zS{C~FnBJ?$$+Q|LjJpqR21!i&3F%pGx z*6yxoF(2)a9yBhBLD$sw-TOsgN*p5{c zk5%SA2tz(p$e)MAGWn67{Hkqa=R!8Ftot~WFii_MHZP*5X~0~-U)VM>mb8m*qTt%& ziA+vR6f!w?RFInT)-ARV4Q}nTJE9%YjTOGL3&^qYd`=^6^c}#_(zvJ?kXC^5`7Eu- zoI%-Gt96gxcRwzRfM_FUl-Vtoq;#!tAEfx8O0O?<>DOXelGdVKEVt6ZZ~P4S8SpdU zXTZ;Zp8-Dueg^yu{2yfCPmSk&7(ev;y7=MnJ24^RcOG*C<=5heUZ^`RkFLD&O{mN3 z-a^~B+5$&%nr!c!D3{BGZ~w#K^y}Bhr{9bpdTVy?@Id>q_E+LBz0|f0?q?r{`>D}r z9BPCW8t8y>*pms9IDKS?e$gfpHaMft?&k>jIt&J_Py>3{osl1$IWpMP&l z{P_=papT4K>!;mil^$w!4_-XQpSpY_1|>?(`{UDZpS%f2@nZM_XpHNQ|5H5jfA^lb zF%Sg#icH_~QGB{I``i+A^eim`pGG(3lS{$1A4B>g*Bx(M-7f_Dk5115GCDo*;q?Af zhi*9~8t=RizK2U6H9oQb!}xO{(}IYjf2u)qkBXCDKV2@r^9Hm47>fdy&jGF{z;_fN zuqa^t9H5l|V+v4S6wo;b_~`Edv@1Zc@y<2i7C44W<^Zn}0A9k=s2mB(ue|;$R~-5J z#m|7B0Y3wN2K)^88SpdUXTZ;Zp8-Dueg;164AA?vbtQ9M8nq}gMbk;RncUbCV%>Bm zcLNK>tm8~bA(e4bOGG*Whr|s|&P)kCbw5$!zb4c1GJ;+e=bxzqO+y+Sc`1trprTnN8%z%p09TF_X`ctu5N# z+J1?`bcz{7P!~a+%*mNzy^h%dO5YGrp(T5OzL35JHDsI>ybkoX;0Rg~97SUUX>}h6 z7DypNKLZJe!qsr&s>9^bNWIhq?z{O&wKVY!DIG;CY9FBHK{TQJ(bO2?H^hq+S{~!K z!P5|Ej0f}>>E8yQV2sspFMzy>8d_fa3y>42!409;L23iF7lF*88Y_jd%vjgZ91b=_&RyBC z%xJ2?C_=_ybFiVl{?htQ_*Dfrh+xAi{QN^}!ECOthb|liuBpaq2{w?^h06zEnhD0|-G>pGBEG0sh7OIiSC9|cJBZ`Hj5EJQ4 zHXlusL9t2s33wd@0^**X1Z>tA;sD-{bd9W92<19o?p z-bpZ)E5$}KZjpn^_}TneR7Q6vC!8Y2gn6pyrtkrMYY9zGX@ndaUogRl5w2fSw=-N* zvm<j&P)=?(J~>r=|-!b>9seHNjPNmj!BY)F1C>jReOysj=K>F_zAc zJH=Qc^`(4vGS;6@md2f&Ta0ye*wRfoi~hlZelgHHEQaHQyLXB!hXw}rifw!L?X-t` zcMj|pMdeMK1zbnSZ3c;?NZcrr=|q9fYD{Gkt@0FZ265fQ_=G6sikY#TlQNM|Y&xL4 zc6QkAoW7XO7ueF?4GWzN;m!+*6Te`g3oInwFMEx2e=uOVIcQ0fDONi^ z2K|>--@jS^eJ~4+|3{1Hn-`aJ1z-Yu

_H2?=vxy zvE9TNDT;0hp8+OC$|*QwnWF0yY)kbA z5A5!@ZDIFcv%7cKU?2LxrY?IRuC4L@eZt;8v}bGYkiBQywkrpQF{f=E8UVt(b;{zM zQnWkDNhREbki*qmsw!sMNQJ|PUG1KNFmEdrY{k5tPUKQqN7#dV;DuX?T`D>$^qWJI z%Gw1dn@?gkm2+w)X-{O}YmXF*y3e_(R8F_HJ-n-r50w&wEsn*>aW^pn>J}7DGlx0W zDNKlHF7G-~-1(vth5Uq5a3`x&Bc%+s*=15%)w^}DmCn0#$6Kbfh^8iU2%)H3P!|0_ zIZv=*!{HUH2UguIDR18Hb?U%vP8k6z7t~{#o ze7rn<_G5Z0@U&)Snb)l|8qe!o@A!ED_ktl;#`8M)H4mQS^LY69Y3)U>TTx{RTbe4u zeuO99i+>0@$_W-Qs_^|KqD1wHT{|3~pEG$s{s}rb6pqJ~&m%ook_+Q`Kk{shQ1omzzc8NZUtzAs3(Hb~HbqQD zDlOxf1^}+c^K+)D@r%Xh4(T5p)EAGRpWE6rp5w4T#i}k#b$sn!F){v%ibgSvXL^pt zd)&nBxtXTwK+o4cDuLgtn;@cL%zoGHA2jCIKWg722{to@aq5mIL7sgl9 z%5S&Iv2CLg4(JneK1BMb3ZD<27wP|xeC`xNwMTjseT)NXqer9_#e(?0OBG +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/08 17:29:13 by adjoly #+# #+# */ +/* Updated: 2024/07/08 17:29:15 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +long long ft_atoll(const char *nptr) +{ + char sign; + long long nbr; + + sign = 1; + nbr = 0; + while ((*nptr >= 7 && *nptr <= 13) || *nptr == 32) + nptr++; + if (*nptr == '-') + { + sign *= -1; + nptr++; + } + else if (*nptr == '+') + nptr++; + while (*nptr >= '0' && *nptr <= '9') + { + nbr = nbr * 10 + (*nptr - '0'); + nptr++; + } + return (nbr * sign); +} diff --git a/philo/src/get_time_in_ms.c b/philo/src/get_time_in_ms.c new file mode 100644 index 0000000..8787563 --- /dev/null +++ b/philo/src/get_time_in_ms.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_time_in_ms.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/09 12:02:24 by adjoly #+# #+# */ +/* Updated: 2024/07/09 13:14:50 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include + +uint16_t get_time_in_ms(struct timeval t0, struct timeval t1) +{ + return (((t1.tv_sec-t0.tv_sec) * 1000000 + t1.tv_usec-t0.tv_usec)/1000); +} diff --git a/philo/src/log.c b/philo/src/log.c index 869da9b..b6faa42 100644 --- a/philo/src/log.c +++ b/philo/src/log.c @@ -6,14 +6,14 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/07 16:12:20 by adjoly #+# #+# */ -/* Updated: 2024/07/07 17:56:28 by adjoly ### ########.fr */ +/* Updated: 2024/07/08 16:22:28 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "philo.h" #include "philo_msg.h" -void log_philo(uint32_t timestamp, uint16_t philo, t_philo_state type) +void log_philo(uint32_t timestamp, uint16_t philo, t_pstate type) { if (type == EAT) printf("%u %hu %s", timestamp, philo, EATING_MSG); diff --git a/philo/src/parse_argv.c b/philo/src/parse_argv.c new file mode 100644 index 0000000..c2d2c48 --- /dev/null +++ b/philo/src/parse_argv.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parse_argv.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/08 15:30:46 by adjoly #+# #+# */ +/* Updated: 2024/07/09 10:46:47 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "philo.h" +#include "utils.h" + +t_pdata fill_pdata(char **av) +{ + t_pdata data; + + if (!av) + { + data.error = true; + return (data); + } + data.philo_nbr = ft_atoll(av[1]); + data.die_time = ft_atoll(av[2]); + data.eat_time = ft_atoll(av[3]); + data.sleep_time = ft_atoll(av[4]); + if (av[5]) + data.meal_nbr = ft_atoll(av[5]); + data.error = false; + return (data); +} + +t_pdata philo_parse(char **av, int ac) +{ + if (!(ac > 4 && ac <= 6)) + return (fill_pdata(NULL)); + return (fill_pdata(av)); +} diff --git a/philo/src/philo.c b/philo/src/philo.c index 2640641..c567c33 100644 --- a/philo/src/philo.c +++ b/philo/src/philo.c @@ -6,15 +6,28 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/07 15:10:29 by adjoly #+# #+# */ -/* Updated: 2024/07/07 17:44:08 by adjoly ### ########.fr */ +/* Updated: 2024/07/09 13:17:55 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "philo.h" +#include +#include +#include +#include +#include "utils.h" int main(int ac, char **av) { - (void)ac; - (void)av; - log_philo(10, 5, DIED); + t_pdata data; + struct timeval t0; + struct timeval t1; + + gettimeofday(&t0, NULL); + data = philo_parse(av, ac); + gettimeofday(&t1, NULL); + if (data.error == true) + return (EXIT_FAILURE); + print_philo_data(data); + log_philo(get_time_in_ms(t0, t1), 0, DIED); } diff --git a/philo/src/print_philo_data.c b/philo/src/print_philo_data.c new file mode 100644 index 0000000..d91c410 --- /dev/null +++ b/philo/src/print_philo_data.c @@ -0,0 +1,18 @@ +#include "philo.h" +#include + +void print_philo_data(t_pdata data) +{ + if (data.error == true) + { + printf("error = true\n"); + return ; + } + else + printf("error = false\n"); + printf("die_time = %u\n", data.die_time); + printf("sleep_time = %u\n", data.sleep_time); + printf("eat_time = %u\n", data.eat_time); + printf("philo_nbr = %u\n", data.philo_nbr); + printf("meal_nbr = %u\n", data.meal_nbr); +}