mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-09 16:09:15 +00:00
* Initial Commit
* Not quite all was staged, apparently.
* Multiline no longer necessary
* For my convenience...
* Forgot an important little tidbit in routes.tsx
* This updated, apparently.
* And now hell breaks loose
* First batch
* Second Batch
* Third batch (Unit Tests)
* Improvised shotgun ammo is gone; Vibebots are refactored
* UpdatePath sweeps in our fulp_modules/_maps folder
* I can't bring myself to do it.
* Map stuff
* Didn't mean to leave this uncommented
* I carpet-bombed them with Find-Replace. Let's see what linters think
* I sure do hope this is comprehensive and doesn't break other things
* This may take a while
* Next Round
* Hopefully the last batch before getting on with actual fixes
* Telescreens
* :/
* Stragglers
* Helio Emergency Shuttle; NearStation adjustments.
* Only one more commit for greenchecks... Shuttle code be dammed.
* Pff, the file was missing
* Same treatment as the other map files.
* Missed a comma :P
* BZ chambers for Xenobiology
* Odd. Most of these got done earlier. Not sure why this one wasn't.
* Mapping sweep. I didn't adjust C_tags in Theia. Another time.
* The balloon alerts overlap
* I hate TGU I hate TGU
* I meant to say "I hate TG" on the last one. Freudian slip.
* Fix Fix
* Nanite research cost rebalance
* TGU-Update: Step 0
* Yeah I figured it'd do this.
* I accidentally undid this
* Failed to catch this one
* I don't trust hundredths not to break or be broken somewhere.
* Little air alarm tweaks
* Ports #1228
* Stuff I missed
* Silly
* TGU so nice we're going to make it thrice
* Yarn
* Should be all? Fixes cult stun too.
* Thermomachine layers
* Free square spellcheck to rerun tests and see if it's consistent
* All credit goes to QLA for reminding me to actually do this
* Update to e40becd742
* github folder
96 lines
2.6 KiB
Plaintext
96 lines
2.6 KiB
Plaintext
/// Sorts the list in place with timSort, default settings.
|
|
#define SORT_TIM(to_sort, associative) if(length(to_sort) >= 2) { \
|
|
var/datum/sort_instance/sorter = GLOB.sortInstance; \
|
|
if (isnull(sorter)) { \
|
|
sorter = new; \
|
|
} \
|
|
sorter.L = to_sort; \
|
|
sorter.cmp = GLOBAL_PROC_REF(cmp_numeric_asc); \
|
|
sorter.associative = associative; \
|
|
sorter.timSort(1, 0); \
|
|
}
|
|
|
|
|
|
/// Helper for the sorting procs. Prevents some code duplication. Creates /datum/sort_instance/sorter
|
|
#define CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex) \
|
|
if(length(to_sort) < 2) { \
|
|
return to_sort; \
|
|
} \
|
|
fromIndex = fromIndex % length(to_sort); \
|
|
toIndex = toIndex % (length(to_sort) + 1); \
|
|
if (fromIndex <= 0) { \
|
|
fromIndex += length(to_sort); \
|
|
} \
|
|
if (toIndex <= 0) { \
|
|
toIndex += length(to_sort) + 1; \
|
|
} \
|
|
var/datum/sort_instance/sorter = GLOB.sortInstance; \
|
|
if (isnull(sorter)) { \
|
|
sorter = new; \
|
|
} \
|
|
sorter.L = to_sort; \
|
|
sorter.cmp = cmp; \
|
|
sorter.associative = associative;
|
|
|
|
|
|
/**
|
|
* ## Tim Sort
|
|
* Hybrid sorting algorithm derived from merge sort and insertion sort.
|
|
*
|
|
* **Sorts in place**.
|
|
* You might not need to get the return value.
|
|
*
|
|
* @see
|
|
* https://en.wikipedia.org/wiki/Timsort
|
|
*
|
|
* @param {list} to_sort - The list to sort.
|
|
*
|
|
* @param {proc} cmp - The comparison proc to use. Default: Numeric ascending.
|
|
*
|
|
* @param {boolean} associative - Whether the list is associative. Default: FALSE.
|
|
*
|
|
* @param {int} fromIndex - The index to start sorting from. Default: 1.
|
|
*
|
|
* @param {int} toIndex - The index to stop sorting at. Default: 0.
|
|
*/
|
|
/proc/sortTim(list/to_sort, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative = FALSE, fromIndex = 1, toIndex = 0) as /list
|
|
CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex)
|
|
|
|
sorter.timSort(fromIndex, toIndex)
|
|
|
|
return to_sort
|
|
|
|
|
|
/**
|
|
* ## Merge Sort
|
|
* Divide and conquer sorting algorithm.
|
|
*
|
|
* @see
|
|
* - https://en.wikipedia.org/wiki/Merge_sort
|
|
*/
|
|
/proc/sortMerge(list/to_sort, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative = FALSE, fromIndex = 1, toIndex = 0) as /list
|
|
CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex)
|
|
|
|
sorter.mergeSort(fromIndex, toIndex)
|
|
|
|
return to_sort
|
|
|
|
|
|
/**
|
|
* ## Insertion Sort
|
|
* Simple sorting algorithm that builds the final sorted list one item at a time.
|
|
*
|
|
|
|
* @see
|
|
* - https://en.wikipedia.org/wiki/Insertion_sort
|
|
*/
|
|
/proc/sortInsert(list/to_sort, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative = FALSE, fromIndex = 1, toIndex = 0) as /list
|
|
CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex)
|
|
|
|
sorter.binarySort(fromIndex, toIndex)
|
|
|
|
return to_sort
|
|
|
|
|
|
#undef CREATE_SORT_INSTANCE
|