mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-15 17:13:46 +01:00
5f814597a7
* lint: forbid whitespace in empty list decls * Update tools/ci/check_grep2.py Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: warriorstar-orion <orion@snowfrost.garden> * close enough to grab a bunch --------- Signed-off-by: warriorstar-orion <orion@snowfrost.garden> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
26 lines
1011 B
Plaintext
26 lines
1011 B
Plaintext
GLOBAL_LIST_EMPTY(bitflag_lists)
|
|
|
|
/**
|
|
* System for storing bitflags past the 24 limit, making use of an associative list.
|
|
*
|
|
* Macro converts a list of integers into an associative list of bitflag entries for quicker comparison.
|
|
* Example: list(0, 4, 26, 32)) => list("0" = ( (1<<0) | (1<<4) ), "1" = ( (1<<2) | (1<<8) ))
|
|
* Lists are cached into a global list of lists to avoid identical duplicates.
|
|
* This system makes value comparisons faster than pairing every element of one list with every element of the other for evaluation.
|
|
*
|
|
* Arguments:
|
|
* * target - List of integers.
|
|
*/
|
|
#define SET_BITFLAG_LIST(target) \
|
|
do { \
|
|
var/txt_signature = target.Join("-"); \
|
|
if(!GLOB.bitflag_lists[txt_signature]) { \
|
|
var/list/new_bitflag_list = list(); \
|
|
for(var/value in target) { \
|
|
new_bitflag_list["[round(value / 24)]"] |= (1 << (value % 24)); \
|
|
}; \
|
|
GLOB.bitflag_lists[txt_signature] = new_bitflag_list; \
|
|
}; \
|
|
target = GLOB.bitflag_lists[txt_signature]; \
|
|
} while(FALSE)
|