feat: ring buffer
This commit is contained in:
parent
3be55dc53e
commit
7101b99c35
3 changed files with 58 additions and 3 deletions
|
|
@ -1,11 +1,41 @@
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
RingBuffer: {
|
||||||
|
generic: "<T>",
|
||||||
|
type: "class",
|
||||||
|
methods: [{
|
||||||
|
name: "push",
|
||||||
|
args: "item: T",
|
||||||
|
return: "void",
|
||||||
|
}, {
|
||||||
|
name: "get",
|
||||||
|
args: "idx: number",
|
||||||
|
return: "T | undefined",
|
||||||
|
}, {
|
||||||
|
name: "pop",
|
||||||
|
return: "T | undefined",
|
||||||
|
}],
|
||||||
|
getters: [{
|
||||||
|
name: "length",
|
||||||
|
return: "number",
|
||||||
|
prop_name: "_length",
|
||||||
|
}],
|
||||||
|
properties: [{
|
||||||
|
name: "_length",
|
||||||
|
type: "number",
|
||||||
|
scope: "private",
|
||||||
|
}]
|
||||||
|
},
|
||||||
ArrayList: {
|
ArrayList: {
|
||||||
type: "class",
|
type: "class",
|
||||||
|
generic: "<T>",
|
||||||
methods: [{
|
methods: [{
|
||||||
name: "add",
|
name: "add",
|
||||||
args: "item: T",
|
args: "item: T",
|
||||||
return: "void",
|
return: "void",
|
||||||
|
}, {
|
||||||
|
name: "peek",
|
||||||
|
return: "T | undefined",
|
||||||
}, {
|
}, {
|
||||||
name: "remove",
|
name: "remove",
|
||||||
args: "item: T",
|
args: "item: T",
|
||||||
|
|
@ -27,15 +57,19 @@ module.exports = {
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
SinglyLinkedList: {
|
SinglyLinkedList: {
|
||||||
|
generic: "<T>",
|
||||||
type: "class",
|
type: "class",
|
||||||
},
|
},
|
||||||
DoublyLinkedList: {
|
DoublyLinkedList: {
|
||||||
|
generic: "<T>",
|
||||||
type: "class",
|
type: "class",
|
||||||
},
|
},
|
||||||
Queue: {
|
Queue: {
|
||||||
|
generic: "<T>",
|
||||||
type: "class",
|
type: "class",
|
||||||
},
|
},
|
||||||
Stack: {
|
Stack: {
|
||||||
|
generic: "<T>",
|
||||||
type: "class",
|
type: "class",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ try { fs.unlinkSync(day_path); } catch (e) { }
|
||||||
try { fs.mkdirSync(day_path); } catch (e) { }
|
try { fs.mkdirSync(day_path); } catch (e) { }
|
||||||
|
|
||||||
function generate_method(method) {
|
function generate_method(method) {
|
||||||
return `${method.name}(${method.args}): ${method.return || "void"} {
|
return `${method.name}(${method.args || ""}): ${method.return || "void"} {
|
||||||
|
|
||||||
}`;
|
}`;
|
||||||
}
|
}
|
||||||
|
|
@ -46,7 +46,7 @@ function generate_getter(getter) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_class(name, item) {
|
function create_class(name, item) {
|
||||||
fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name}<T> {
|
fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name}${item.generic || ""} {
|
||||||
${(item.properties || []).map(generate_property).join("\n ")}
|
${(item.properties || []).map(generate_property).join("\n ")}
|
||||||
|
|
||||||
${(item.getters || []).map(generate_getter).join("\n ")}
|
${(item.getters || []).map(generate_getter).join("\n ")}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,24 @@
|
||||||
|
import RingBuffer from "@code/RingBuffer";
|
||||||
|
|
||||||
|
test("RingBuffer", function() {
|
||||||
|
const buffer = new RingBuffer<number>();
|
||||||
|
|
||||||
|
buffer.push(5);
|
||||||
|
expect(buffer.pop()).toEqual(5);
|
||||||
|
expect(buffer.pop()).toEqual(undefined);
|
||||||
|
|
||||||
|
buffer.push(42);
|
||||||
|
buffer.push(9);
|
||||||
|
expect(buffer.pop()).toEqual(42);
|
||||||
|
expect(buffer.pop()).toEqual(9);
|
||||||
|
expect(buffer.pop()).toEqual(undefined);
|
||||||
|
|
||||||
|
buffer.push(42);
|
||||||
|
buffer.push(9);
|
||||||
|
buffer.push(12);
|
||||||
|
expect(buffer.get(2)).toEqual(12);
|
||||||
|
expect(buffer.get(1)).toEqual(9);
|
||||||
|
expect(buffer.get(0)).toEqual(42);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue