Start of binary search for ls command

This commit is contained in:
2026-02-12 06:21:30 +01:00
parent f678c0fa54
commit 05c3dcd5b5
6 changed files with 106 additions and 15 deletions

View File

@@ -105,6 +105,10 @@ export class Bash {
return this._terminal.getTerminalWidth();
}
getTerminalFontSize(): number {
return this._terminal.getFontSize();
}
hasSudoPerms(uid: number): boolean {
return this._group[1].members.includes(uid);
}

View File

@@ -227,9 +227,24 @@ function result_ls(this: Bash, data: any, args: CommandArgs): HTMLElement {
return w;
}
return dummysonoerror; //TEMP SO NO ERROR CUZ RETURNS HTMLElement EVERY TIME, DELETE LATER
}
function checkMaxColumns(this: Bash, files: TreeNode[]) {
const paddingWidth: number = 2;
const maxWidth: number = (this.getTerminalWidth() / this.getTerminalFontSize()) * 0.8;
//Upper bound set to max width / min column width - 1 character + padding
let lowBound: number = 1;
let highBound: number = Math.floor(maxWidth / (1 + paddingWidth));
}
function isValidNodeSortMethod(value: string): value is SortNodeBy {
return Object.values(SortNodeBy).includes(value as SortNodeBy);
}

View File

@@ -0,0 +1,48 @@
import type { Bash } from "./bash";
import type { TreeNode } from "./fs";
export class Search {
public static nodeBinarySearch(
this: Bash,
nodes: TreeNode[],
max: number
): number {
let low: number = 1;
let high: number = nodes.length;
let c: number = (low + high) / 2;
const nameLengths: number[] = nodes.map(node => node.name.length);
}
private static binarySearchDNC(
n: number,
nameLengths: number[],
low: number,
high: number,
max: number): number {
let c: number = (low + high) / 2;
if(low + 1 < high) {
for(let i = 0; i < c; i++) {
const colSize: number =
i < (n % c) ? n : n -1;
}
const calculatedWidth: number =
nameLengths.reduce((result, value) => result + value) + (c-1) * 2
if (calculatedWidth <= max) {
low = c;
return c;
}
else {
high = c;
}
this.binarySearchDNC(n, nameLengths, low, high, max);
}
}
}

View File

@@ -23,6 +23,7 @@ export type PrintData = {
export type PageCallbacks = {
print: (data: PrintData) => void;
getWidth: () => number;
getFontSize: () => number;
};
export class Terminal {
@@ -110,6 +111,14 @@ export class Terminal {
return width;
}
getFontSize(): number {
const size = this.callbacks.getFontSize?.();
if(!size) { throw new Error('somehow font size is undefined still after all the checks'); }
console.log(size);
return size;
}
getCwd(): string {
const fs: VirtualFS = this.bash.getFs();
console.log(fs.getPathByInode(this.bash.getCwd()));

View File

@@ -20,11 +20,21 @@
if(!e){
throw new Error('cant get width of the teminal element. Its null');
}
//gets an int from padding property value (which is a string) by cutting last 2 letters "px" and parsing to int
const padding: number = parseInt(window.getComputedStyle(e, null).getPropertyValue('padding').slice(0, -2));
console.log(padding);
return e.clientWidth - (padding * 2);
}
function getFontSize() {
const e = document.getElementById('cout');
if(!e) {
throw new Error('cant get font size of the terminal element. its null');
}
const size: number = parseInt(window.getComputedStyle(e, null).getPropertyValue('font-size').slice(0, -2));
return size;
}
function handleInput(e: KeyboardEvent) {
switch (e.key) {
case 'Enter': {
@@ -54,7 +64,8 @@
if (!e) return;
printOutput(e, data);
},
getWidth: getWidth
getWidth: getWidth,
getFontSize: getFontSize
};
//Test user with basic data so the bash can run