improve perf of replace
This commit is contained in:
parent
c6ce51d0c1
commit
78d96e3097
1 changed files with 7 additions and 3 deletions
|
@ -58,9 +58,10 @@ abstract class GPXTreeNode<T extends GPXTreeElement<any>> extends GPXTreeElement
|
||||||
// Producers
|
// Producers
|
||||||
replace(segment: number, start: number, end: number, points: TrackPoint[]) {
|
replace(segment: number, start: number, end: number, points: TrackPoint[]) {
|
||||||
return produce(this, (draft: Draft<GPXTreeNode<T>>) => {
|
return produce(this, (draft: Draft<GPXTreeNode<T>>) => {
|
||||||
|
let og = getOriginal(draft);
|
||||||
let cumul = 0;
|
let cumul = 0;
|
||||||
for (let i = 0; i < draft.children.length; i++) {
|
for (let i = 0; i < og.children.length; i++) {
|
||||||
let childSegments = draft.children[i].getSegments();
|
let childSegments = og.children[i].getSegments();
|
||||||
if (segment < cumul + childSegments.length) {
|
if (segment < cumul + childSegments.length) {
|
||||||
draft.children[i] = draft.children[i].replace(segment - cumul, start, end, points);
|
draft.children[i] = draft.children[i].replace(segment - cumul, start, end, points);
|
||||||
break;
|
break;
|
||||||
|
@ -411,7 +412,10 @@ export class TrackSegment extends GPXTreeLeaf {
|
||||||
// Producers
|
// Producers
|
||||||
replace(segment: number, start: number, end: number, points: TrackPoint[]) {
|
replace(segment: number, start: number, end: number, points: TrackPoint[]) {
|
||||||
return produce(this, (draft) => {
|
return produce(this, (draft) => {
|
||||||
draft.trkpt.splice(start, end - start + 1, ...points);
|
let og = getOriginal(draft);
|
||||||
|
let trkpt = og.trkpt.slice();
|
||||||
|
trkpt.splice(start, end - start + 1, ...points);
|
||||||
|
draft.trkpt = freeze(trkpt);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue