From d59ea8d8a7596a9066f1fc7fc36c335cb273c2ed Mon Sep 17 00:00:00 2001 From: rhpidfyre Date: Tue, 25 Feb 2025 23:24:10 -0500 Subject: [PATCH] search.ts -> index.ts --- src/rt/shell/fs/index.ts | 76 +++++++++++++++++++++++++++++++++++++++ src/rt/shell/fs/search.ts | 41 --------------------- 2 files changed, 76 insertions(+), 41 deletions(-) create mode 100644 src/rt/shell/fs/index.ts delete mode 100644 src/rt/shell/fs/search.ts diff --git a/src/rt/shell/fs/index.ts b/src/rt/shell/fs/index.ts new file mode 100644 index 0000000..a7dc329 --- /dev/null +++ b/src/rt/shell/fs/index.ts @@ -0,0 +1,76 @@ +import { type FsList, type FsEntry } from "./core" + +interface SearchResult { + item: T, + binary_index: number +} +interface Search { + binary_fs: (cloned_list: FsList, file_name: string) => SearchResult | undefined, + binary_nsort: (list: T[], find: T, start: number, end: number) => SearchResult | undefined, + binary: (list: T[], find: T) => SearchResult | undefined, + linear: (list: T[], find: T) => SearchResult | undefined, +} + +function wrap_result(item: T, binary_index: number): SearchResult { + return { item: item, binary_index: binary_index } +} + +const search = {} as Search + +search.binary = function(list, find) { + list.sort() + let start = 0 + let end = list.length-1 + while (start<=end) { + const median = (start+end)>>1 + if (list[median] === find) { + return wrap_result(list[median], median) + } else if (list[median]end) { return } + const median = (start+end)>>1 + if (list[median] === find) { + return wrap_result(list[median], median) + } + if (list[median]>find) { + return this.binary_nsort(list, find, start, median-1) + } else { + return this.binary_nsort(list, find, median+1, end) + } +} + +search.binary_fs = function(cloned_list, file_name) { + cloned_list.sort() + let start = 0 + let end = cloned_list.length-1 + while (start<=end) { + const median = (start+end)>>1 + if (cloned_list[median].name === file_name) { + return wrap_result(cloned_list[median], median) + } else if (cloned_list[median].name !== file_name) { + start = median+1 + } else { + end = median-1 + } + } + return +} + +search.linear = function(list, find) { + for (let ind = 0; ind(list: T[], find: T) => T | undefined, - binary_nsort: (list: T[], find: T, start: number, end: number) => T | undefined; - linear: (list: T[], find: T) => T | undefined, -} -const search = {} as Search - -search.binary = function(list, find) { - list.sort() - let start = 0 - let end = list.length-1 - while (start<=end) { - const median = (start+end)>>1 - if (list[median] === find) { - return find - } else if (list[median]end) { return } - const median = (start+end)>>1 - if (list[median] === find) { return list[median] } - if (list[median]>find) { - return this.binary_nsort(list, find, start, median-1) - } else { - return this.binary_nsort(list, find, median+1, end) - } -} - -search.linear = function(list, find) { - for (const item of list) { - if (item === find) { - return item - } - } - return -} - -export default search \ No newline at end of file