summaryrefslogtreecommitdiff
path: root/graphs/piscine/traffic_lights/traffic_lights.c
blob: 76ea94fb2a115092675d4e876a9b1277e832952e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "traffic_lights.h"

void init(unsigned char *lights)
{
    *lights <<= 4;
}

void turn_on(unsigned char *lights, unsigned char light_num)
{
    *lights |= 1 << (light_num - 1);
}

void turn_off(unsigned char *lights, unsigned char light_num)
{
    *lights &= ~(1 << (light_num - 1));
}

void next_step(unsigned char *lights)
{
    *lights <<= 1;
    *lights += *lights >> 4;
}

void reverse(unsigned char *lights)
{
    *lights = ~*lights;
}

void swap(unsigned char *lights_1, unsigned char *lights_2)
{
    if (lights_1 == lights_2)
    {
        return;
    }
    *lights_1 = *lights_2 ^ *lights_1;
    *lights_2 = *lights_1 ^ *lights_2;
    *lights_1 = *lights_2 ^ *lights_1;
}