diff --git a/src/components/expr2.vue b/src/components/expr2.vue
index 878c8db..d175486 100644
--- a/src/components/expr2.vue
+++ b/src/components/expr2.vue
@@ -15,10 +15,15 @@ provide("disk",new Disk());
-
+
+
+
\ No newline at end of file
diff --git a/src/components/expr2/DISK.vue b/src/components/expr2/DISK.vue
index 6b22cbc..660a897 100644
--- a/src/components/expr2/DISK.vue
+++ b/src/components/expr2/DISK.vue
@@ -6,7 +6,16 @@ import {storeToRefs} from "pinia";
import useExpr2Store from "@/store/expr2/expr2Store.ts";
//18 <-> -12
const duration = 1, animationCount = 40;
-const {currentTrack, trackCount, trackFromIndex, trackToIndex, operations, startTrack,selectTrackFromIndex,selectTrackToIndex} = storeToRefs(useExpr2Store());
+const {
+ currentTrack,
+ trackCount,
+ trackFromIndex,
+ trackToIndex,
+ operations,
+ startTrack,
+ selectTrackFromIndex,
+ selectTrackToIndex
+} = storeToRefs(useExpr2Store());
const degree = computed(() =>
6 - (currentTrack.value / trackCount.value * (30) - 12)
);
@@ -17,17 +26,16 @@ const cssVars = computed(() => {
});
const trackDelta = computed(() => {
let start = trackFromIndex.value === -1 ? startTrack.value : operations.value[trackFromIndex.value].track;
- let end = trackToIndex.value === -1 ? startTrack.value : operations.value[trackToIndex.value].track;
+ let end = trackToIndex.value === -1 ? startTrack.value : (trackToIndex.value >= operations.value.length ? 0 : operations.value[trackToIndex.value].track);
return end - start;
});
-const selectTrackSum = computed(()=>{
- if(selectTrackFromIndex.value === selectTrackToIndex.value)
+const selectTrackSum = computed(() => {
+ if (selectTrackFromIndex.value === selectTrackToIndex.value)
return 0;
let t = 0;
- let last = selectTrackFromIndex.value === -1? selectTrackToIndex.value: operations.value[selectTrackFromIndex.value].track;
- console.log(selectTrackFromIndex.value,selectTrackToIndex.value,t);
- for(let i = Math.max(0,selectTrackFromIndex.value);i<=selectTrackToIndex.value;i++)
- {
+ let last = selectTrackFromIndex.value === -1 ? startTrack.value : operations.value[selectTrackFromIndex.value].track;
+ console.log(selectTrackFromIndex.value, selectTrackToIndex.value, t);
+ for (let i = Math.max(0, selectTrackFromIndex.value); i <= selectTrackToIndex.value; i++) {
console.log(operations.value[i].track);
t += Math.abs(operations.value[i].track - last);
last = operations.value[i].track;
@@ -122,6 +130,7 @@ watch(degree, (newDeg) => {
top: 396px;
left: 210px;
}
+
#track-sum {
z-index: 2;
position: absolute;
diff --git a/src/components/expr2/OperationTable.vue b/src/components/expr2/OperationTable.vue
index 44590db..1fbd0cc 100644
--- a/src/components/expr2/OperationTable.vue
+++ b/src/components/expr2/OperationTable.vue
@@ -2,7 +2,7 @@
import {storeToRefs} from "pinia";
import {Input} from "tdesign-vue-next";
-import {computed} from "vue";
+import {Ref, ref, watch} from "vue";
import useExpr2Store from "@/store/expr2/expr2Store.ts";
import {Operation} from "@/store/expr2/defaultOperation.ts";
@@ -16,17 +16,32 @@ let {
trackFromIndex,
trackToIndex,
selectTrackFromIndex,
- selectTrackToIndex
+ selectTrackToIndex,
+ tableUpdate
} = storeToRefs(expr2Store);
-let data = computed(() => {
- console.log(startTrack.value);
- return [{track: startTrack.value, id: 0}, ...operations.value].map((operation: Operation, index: number) => {
+let data: Ref<{ key: string, id: number, track: number }[]> = ref<{
+ key: string,
+ id: number,
+ track: number
+}[]>([{track: startTrack.value, id: 0}, ...operations.value].map((operation: Operation, index: number) => {
+ return {
+ key: String(index + 1),
+ id: operation.id,
+ track: operation.track,
+ }
+}));
+
+watch(tableUpdate, (newVal) => {
+ if (newVal === false)
+ return;
+ data.value = [{track: startTrack.value, id: 0}, ...operations.value].map((operation: Operation, index: number) => {
return {
key: String(index + 1),
id: operation.id,
track: operation.track,
}
});
+ tableUpdate.value = false;
});
let beforeKey = -1;
let beforeFromKey = -1;
@@ -158,14 +173,28 @@ function ActiveChange(rows: string[]) {
return;
selectTrackFromIndex.value = parseInt(rows[0]) - 2;
selectTrackToIndex.value = parseInt(rows[rows.length - 1]) - 2;
+ if (selectTrackToIndex.value === selectTrackFromIndex.value) {
+ if (selectTrackFromIndex.value >= 0 && selectTrackFromIndex.value < operations.value.length)
+ beforeKey = operations.value[selectTrackFromIndex.value].track;
+ else if (selectTrackFromIndex.value === -1)
+ beforeKey = startTrack.value;
+ else
+ beforeKey = currentTrack.value;
+ }
}
// row Error
function InsertBefore(row: number) {
- originOperations.value.splice(row - 1, 0, {
- id: 0,
- track: -1
- });
+ if (row === 1)
+ originOperations.value.splice(0, 0, {
+ id: 0,
+ track: -1
+ });
+ else
+ originOperations.value.splice(row - 2, 0, {
+ id: 0,
+ track: -1
+ });
tableChanged.value = true;
}
@@ -179,7 +208,9 @@ function InsertEnd() {
// row Error
function Delete(row: number) {
- originOperations.value.splice(row - 1, 1);
+ let key = data.value[row - 1].key;
+ let index = FindOriginOperationIndex(key);
+ originOperations.value.splice(index, 1);
tableChanged.value = true;
}
diff --git a/src/logical/expr2/disk.ts b/src/logical/expr2/disk.ts
index 2457708..3f9b8b6 100644
--- a/src/logical/expr2/disk.ts
+++ b/src/logical/expr2/disk.ts
@@ -20,7 +20,8 @@ export class Disk {
trackCount,
failInfo,
tableChanged,
- dataChanged
+ dataChanged,
+ tableUpdate
} = storeToRefs(useExpr2Store());
watch(tableChanged, (newVal) => {
if(newVal === false)
@@ -46,6 +47,7 @@ export class Disk {
}
}
dataChanged.value = true;
+ tableUpdate.value = true;
tableChanged.value = false;
});
}
@@ -77,7 +79,7 @@ export class Disk {
let track = FindTrack();
ans.push(operations[track])
set.add(track);
- //O(n)
+ //O(n^2)
while (set.size < operations.length) {
let candidate: number[] = [];
@@ -99,14 +101,16 @@ export class Disk {
}
}
let min = Number.MAX_VALUE;
+ let targetTrack = 0;
for (let t of candidate) {
if (Math.abs(operations[t].track - operations[track].track) < min) {
min = Math.abs(operations[t].track - operations[track].track);
- track = t;
+ targetTrack = t;
}
}
- ans.push(operations[track]);
- set.add(track);
+ ans.push(operations[targetTrack]);
+ set.add(targetTrack);
+ track = targetTrack;
}
return ans;
}
diff --git a/src/store/expr1/defaultOperation.ts b/src/store/expr1/defaultOperation.ts
index 8c4c509..552c6e2 100644
--- a/src/store/expr1/defaultOperation.ts
+++ b/src/store/expr1/defaultOperation.ts
@@ -1,14 +1,28 @@
+// const operations: Operation[] = [
+// { id: 1, memorySize: 200, type: 'request' },
+// { id: 2, memorySize: 200, type: 'request' },
+// { id: 3, memorySize: 300, type: 'request' },
+// { id: 4, memorySize: 200, type: 'request' },
+// { id: 5, memorySize: 100, type: 'request' },
+// { id: 1, memorySize: 200, type: 'release' },
+// { id: 3, memorySize: 300, type: 'release' },
+// { id: 5, memorySize: 100, type: 'release' },
+// { id: 6, memorySize: 50, type: 'request' },
+// ];
const operations: Operation[] = [
- { id: 1, memorySize: 200, type: 'request' },
- { id: 2, memorySize: 200, type: 'request' },
- { id: 3, memorySize: 300, type: 'request' },
+ { id: 0, memorySize: 40, type: 'request' },
+ { id: 1, memorySize: 130, type: 'request' },
+ { id: 2, memorySize: 60, type: 'request' },
+ { id: 3, memorySize: 100, type: 'request' },
+ { id: 2, memorySize: 60, type: 'release' },
{ id: 4, memorySize: 200, type: 'request' },
- { id: 5, memorySize: 100, type: 'request' },
- { id: 1, memorySize: 200, type: 'release' },
- { id: 3, memorySize: 300, type: 'release' },
- { id: 5, memorySize: 100, type: 'release' },
- { id: 6, memorySize: 50, type: 'request' },
-];
+ { id: 3, memorySize: 100, type: 'release' },
+ { id: 1, memorySize: 130, type: 'release' },
+ { id: 5, memorySize: 140, type: 'request' },
+ { id: 6, memorySize: 60, type: 'request' },
+ { id: 7, memorySize: 50, type: 'request' },
+ { id: 6, memorySize: 60, type: 'release' },
+ ];
export default operations;
export interface Operation {
id: number;
diff --git a/src/store/expr1/expr1Store.ts b/src/store/expr1/expr1Store.ts
index 4d71869..94dcaa0 100644
--- a/src/store/expr1/expr1Store.ts
+++ b/src/store/expr1/expr1Store.ts
@@ -4,7 +4,7 @@ import operations from '@/store/expr1/defaultOperation.ts'
const useExpr1Store = defineStore('expr1', {
state: () => ({
operations: operations,
- memSize: 1000,
+ memSize: 640,
currentState: operations.length,
tableChanged: false,
failInfo: ''
diff --git a/src/store/expr2/defaultOperation.ts b/src/store/expr2/defaultOperation.ts
index d6d67d2..1843c82 100644
--- a/src/store/expr2/defaultOperation.ts
+++ b/src/store/expr2/defaultOperation.ts
@@ -1,13 +1,11 @@
const operations: Operation[] = [
- {id: 1, track: 80},
+ {id: 1, track: 90},
{id: 2, track: 60},
- {id: 3, track: 90},
- {id: 4, track: 70},
- {id: 5, track: 10},
- {id: 6, track: 30},
- {id: 7, track: 20},
- {id: 8, track: 99},
- {id: 9, track: 50},
+ {id: 3, track: 10},
+ {id: 4, track: 30},
+ {id: 5, track: 20},
+ {id: 6, track: 99},
+ {id: 7, track: 50},
];
export default operations;
diff --git a/src/store/expr2/expr2Store.ts b/src/store/expr2/expr2Store.ts
index 7587bae..ba7244b 100644
--- a/src/store/expr2/expr2Store.ts
+++ b/src/store/expr2/expr2Store.ts
@@ -17,7 +17,8 @@ const useExpr2Store = defineStore('expr2', {
trackFromIndex: 0,
trackToIndex: 0,
selectTrackFromIndex: 0,
- selectTrackToIndex: 0
+ selectTrackToIndex: 0,
+ tableUpdate: false
}),
getters: {},
actions: {}