new structure and library structure
This commit is contained in:
@ -1,77 +1,28 @@
|
||||
import { type Entry, type Files } from "./entry"
|
||||
import { type Entry } from "./main"
|
||||
import { type Files } from "./collection"
|
||||
|
||||
interface SearchResult<T> {
|
||||
item: T,
|
||||
binary_index: number
|
||||
readonly result: T,
|
||||
readonly index: number
|
||||
}
|
||||
interface Search {
|
||||
binary_fs_name: <T extends Entry<T>>(cloned_list: Files<T>, file_name: string) => SearchResult<Entry<T>> | undefined,
|
||||
binary_nsort: <T>(list: T[], find: T, start?: number, end?: number) => SearchResult<T> | undefined,
|
||||
binary: <T>(list: T[], find: T) => SearchResult<T> | undefined,
|
||||
linear: <T>(list: T[], find: T) => SearchResult<T> | undefined,
|
||||
function wrap_result<T>(result: T, index: number): SearchResult<T> {
|
||||
return { result: result, index: index }
|
||||
}
|
||||
|
||||
function wrap_result<T>(item: T, binary_index: number): SearchResult<T> {
|
||||
return { item: item, binary_index: binary_index }
|
||||
}
|
||||
|
||||
const rfwfs_search = {} as Search
|
||||
|
||||
rfwfs_search.binary = function(list, find) {
|
||||
list.sort()
|
||||
export default function entry_search<T>(cloned_file_collection: Files<T>, file_name: string): SearchResult<Entry<T>> | undefined {
|
||||
let start = 0
|
||||
let end = list.length-1
|
||||
let end = cloned_file_collection.length-1
|
||||
while (start<=end) {
|
||||
const median = (start+end)>>1
|
||||
if (list[median] === find) {
|
||||
return wrap_result(list[median], median)
|
||||
} else if (list[median]<find) {
|
||||
start = median+1
|
||||
} else {
|
||||
end = median-1
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
const median_name = cloned_file_collection[median].name
|
||||
|
||||
rfwfs_search.binary_nsort = function(list, find, start = 0, end = list.length-1) {
|
||||
if (start>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)
|
||||
if (median_name == file_name) { //left == right && (T == U) is not necessary
|
||||
return wrap_result(cloned_file_collection[median], median)
|
||||
} else if (median_name<file_name) {
|
||||
start = median+1
|
||||
} else {
|
||||
end = median-1
|
||||
}
|
||||
}
|
||||
return
|
||||
return undefined
|
||||
}
|
||||
|
||||
rfwfs_search.linear = function(list, find) {
|
||||
for (let ind = 0; ind<list.length; ind++) {
|
||||
if (list[ind] === find) {
|
||||
return wrap_result(list[ind], ind)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
export default rfwfs_search
|
Reference in New Issue
Block a user