import { type Entry, type Files } from "./entry" interface SearchResult { item: T, binary_index: number } interface Search { binary_fs_name: >(cloned_list: Files, 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 rfwfs_search = {} as Search rfwfs_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) } } rfwfs_search.binary_fs_name = function(cloned_entry_list, file_name) { let start = 0 let end = cloned_entry_list.length-1 while (start<=end) { const median = (start+end)>>1 const median_name = cloned_entry_list[median].name if (median_name === file_name) { return wrap_result(cloned_entry_list[median], median) } else if (median_name