rsmc
Loading...
Searching...
No Matches
directions.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2// Copyright (c) 2026 01eksa
3
9#ifndef RSMC_DIRECTIONS_H
10#define RSMC_DIRECTIONS_H
11#include "rsmc/abstractions.h"
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17typedef uint8_t RsmcDirectionNum;
18enum {
28};
29
30static const RsmcDirectionNum RsmcDirectionsNum[] = {
33
34static inline uint8_t rsmc_direction_to_number(const RsmcCoords direction)
35{
36 return 3 * (direction.x + 1) + (direction.y + 1);
37}
38
39static inline uint64_t rsmc_shift_in_direction(const uint64_t mask,
40 const RsmcDirectionNum direction)
41{
42 const uint64_t NotX0 = 0xFEFEFEFEFEFEFEFE;
43 const uint64_t NotX7 = 0x7F7F7F7F7F7F7F7F;
44
45 switch (direction) {
46 case RsmcDownNum:
47 return mask << 8;
48 case RsmcUpNum:
49 return mask >> 8;
50 case RsmcRightNum:
51 return (mask << 1) & NotX0;
52 case RsmcLeftNum:
53 return (mask >> 1) & NotX7;
55 return (mask << 9) & NotX0;
56 case RsmcUpRightNum:
57 return (mask >> 7) & NotX0;
58 case RsmcDownLeftNum:
59 return (mask << 7) & NotX7;
60 case RsmcUpLeftNum:
61 return (mask >> 9) & NotX7;
62 default:
63 return 0;
64 }
65}
66
67#ifdef __cplusplus
68}
69#endif
70
71#endif // RSMC_DIRECTIONS_H
Thin abstract layer for rsmc.
@ RsmcDownLeftNum
Definition directions.h:26
@ RsmcDownNum
Definition directions.h:20
@ RsmcUpNum
Definition directions.h:19
@ RsmcDownRightNum
Definition directions.h:24
@ RsmcUpRightNum
Definition directions.h:23
@ RsmcUpLeftNum
Definition directions.h:25
@ RsmcDirectionsCount
Definition directions.h:27
@ RsmcRightNum
Definition directions.h:22
@ RsmcLeftNum
Definition directions.h:21
uint8_t RsmcDirectionNum
Definition directions.h:17
Stores coords for the board. Coords might be invalid and negative.
Definition abstractions.h:55
int8_t x
Definition abstractions.h:56
int8_t y
Definition abstractions.h:57