fix(front, back) -> undefined exception; feat(resize)

This commit is contained in:
2025-07-22 19:22:25 +03:00
parent f762717de5
commit 94ce32cff3
10 changed files with 1648 additions and 44 deletions

View File

@ -35,6 +35,16 @@ export class List {
return this._end.clone()
}
resize(size, value) {
if (this._size > size)
while (this._size !== size)
this.popBack()
else
while (this._size !== size)
this.pushBack(value)
}
_shiftRight(dest, generator) {
let prev, res, new_item, item = dest.deref()
@ -75,7 +85,7 @@ export class List {
}
}
List.from = function (obj) {
List.from = function(obj) {
const list = new List()
for (const value of obj) {
list.pushBack(value)
@ -98,6 +108,7 @@ export class ListItem {
}
export class ListIterator {
constructor(item) {
this._item = item
}
@ -130,4 +141,4 @@ export class ListIterator {
}
}
mixinClasses(ListIterator, BidirectionalIterator)
mixinClasses(ListIterator, BidirectionalIterator)

View File

@ -1,5 +1,5 @@
import { BidirectionalIterator } from "../iterators/Bidirectional"
import { satisfiesConcept } from "../utils/concept"
import { getCloneFunc, satisfiesConcept } from "../utils/concept"
export class SequenceContainer {
clone() {
@ -16,6 +16,9 @@ export class SequenceContainer {
}
get front() {
if (this.empty())
throw new Error('front element is undefined')
return this.begin().value
}
@ -24,6 +27,9 @@ export class SequenceContainer {
}
get back() {
if (this.empty())
throw new Error('back element is undefined')
return this.end().dec().value
}
@ -151,10 +157,11 @@ export class SequenceContainer {
}
}
SequenceContainer.is = function (obj, ...args) {
SequenceContainer.is = function(obj, ...args) {
const pure_virtual = [
'move',
'size',
'resize',
'begin',
'end',
'_shiftRight',
@ -179,4 +186,4 @@ SequenceContainer.is = function (obj, ...args) {
'toString',
]
return satisfiesConcept(obj, pure_virtual, virtual, ...args)
}
}

View File

@ -6,7 +6,7 @@ export class ForwardIterator {
}
get value() {
return this.deref()?.value
return this.deref().value
}
set value(value) {
@ -32,4 +32,4 @@ ForwardIterator.is = function (obj, ...args) {
'neq',
]
return satisfiesConcept(obj, pure_virtual, virtual, ...args)
}
}

View File

@ -31,4 +31,4 @@ export function satisfiesConcept(obj, pure_virtual, virtual, debug) {
}
}
return true
}
}

View File

@ -4,4 +4,4 @@ export function mixinClasses(dest, ...sources) {
delete properties.constructor
Object.defineProperties(dest.prototype, properties)
}
}
}