Files
Aurora.3/code/__HELPERS/functional.dm
Fluffy e867030c2e Update MC (#18112)
* sdf

* fsda

* fuck

* fuck2

* toolz

* sdaf

* sdfa

* saf

* sdfa

* sdfa

* sdf

* sdfa

* temp rename

* temp rename

* temp rename

* sdaf

* the pain is immensurable in the land of byond

* the curse of rah

* safd

* sadf

* sadf

* gf

* asf

* fssdfa

* sfd

* sadf

* sfda

* brah

* brah

* it's easier for you to fix this

* ffs

* brah

* brah
2024-01-06 17:03:57 +01:00

50 lines
1.4 KiB
Plaintext

#define PREPARE_INPUT \
predicates = istype(predicates) ? predicates : list(predicates);\
input = istype(input) ? input : list(input);
#define PREPARE_ARGUMENTS \
var/extra_arguments = predicates[predicate];\
var/list/predicate_input = input;\
if(LAZYLEN(extra_arguments)) {\
predicate_input = predicate_input.Copy();\
predicate_input += list(extra_arguments);\
}
/proc/all_predicates_true(var/list/input, var/list/predicates)
PREPARE_INPUT
for(var/predicate in predicates)
PREPARE_ARGUMENTS
if(!call(predicate)(arglist(predicate_input)))
return FALSE
return TRUE
/proc/any_predicate_true(var/list/input, var/list/predicates)
PREPARE_INPUT
if(!predicates.len)
return TRUE
for(var/predicate in predicates)
PREPARE_ARGUMENTS
if(call(predicate)(arglist(predicate_input)))
return TRUE
return FALSE
/proc/can_not_locate(var/atom/container, var/container_thing)
return !(locate(container_thing) in container) // We could just do !can_locate(container, container_thing) but BYOND is pretty awful when it comes to deep proc calls
/proc/where(var/list/list_to_filter, var/list/predicates, var/list/extra_predicate_input)
. = list()
for(var/entry in list_to_filter)
var/predicate_input
if(extra_predicate_input)
predicate_input = (list(entry) + extra_predicate_input)
else
predicate_input = entry
if(all_predicates_true(predicate_input, predicates))
. += entry
#undef PREPARE_ARGUMENTS
#undef PREPARE_INPUT