Add stack linker
This commit is contained in:
parent
a2d4b08d98
commit
86b067a606
@ -1,3 +1,3 @@
|
|||||||
Start testing: May 09 20:48 RTZ 2 (çèìà)
|
Start testing: Jun 23 16:16 RTZ 2 (çèìà)
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
End testing: May 09 20:48 RTZ 2 (çèìà)
|
End testing: Jun 23 16:16 RTZ 2 (çèìà)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 9.0.0, 2023-05-09T01:33:09. -->
|
<!-- Written by QtCreator 9.0.0, 2023-06-23T17:03:21. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
@ -375,23 +375,6 @@
|
|||||||
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
|
||||||
<value type="QString">0</value>
|
|
||||||
<value type="QString">1</value>
|
|
||||||
<value type="QString">2</value>
|
|
||||||
<value type="QString">3</value>
|
|
||||||
<value type="QString">4</value>
|
|
||||||
<value type="QString">5</value>
|
|
||||||
<value type="QString">6</value>
|
|
||||||
<value type="QString">7</value>
|
|
||||||
<value type="QString">8</value>
|
|
||||||
<value type="QString">9</value>
|
|
||||||
<value type="QString">10</value>
|
|
||||||
<value type="QString">11</value>
|
|
||||||
<value type="QString">12</value>
|
|
||||||
<value type="QString">13</value>
|
|
||||||
<value type="QString">14</value>
|
|
||||||
</valuelist>
|
|
||||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
#include "stack.h"
|
#include "stack.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
int bytesToInt (vector<vector<std::byte>> bytes) {
|
||||||
|
// (!) Сделать потом
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Stack::Stack() {
|
Stack::Stack() {
|
||||||
this->stackStorage.clear();
|
this->stackStorage.clear();
|
||||||
this->stackPointer = -1;
|
this->stackPointer = -1;
|
||||||
@ -11,11 +16,31 @@ Stack::~Stack () {
|
|||||||
|
|
||||||
vector<byte> Stack::get () {
|
vector<byte> Stack::get () {
|
||||||
if (this->stackStorage.size() == 0) return {};
|
if (this->stackStorage.size() == 0) return {};
|
||||||
else return this->stackStorage[this->stackPointer];
|
vector<byte> result = this->stackStorage[this->stackPointer];
|
||||||
|
if (this->stackLinker[this->stackPointer] != -1) {
|
||||||
|
if (
|
||||||
|
this->stackLinker.size() < bytesToInt(this->stackStorage[this->stackPointer])
|
||||||
|
) {
|
||||||
|
// (!) Выдать ошибку: такого элемента не существует
|
||||||
|
}
|
||||||
|
else if (
|
||||||
|
bytesToInt(this->stackStorage[this->stackPointer]) == this->stackPointer
|
||||||
|
) {
|
||||||
|
// (!) Выдать ошибку: ссылочный элемент не может ссылаться на самого себя
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this->stackPointer = bytesToInt(this->stackStorage[this->stackPointer]);
|
||||||
|
return this->get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Stack::push (vector<byte> data) {
|
void Stack::push (vector<byte> data) {
|
||||||
this->stackStorage.push_back(data);
|
this->stackStorage.push_back(data);
|
||||||
|
this->stackLinker.push_back(-1);
|
||||||
this->stackPointer = this->stackStorage.size() - 1;
|
this->stackPointer = this->stackStorage.size() - 1;
|
||||||
/*if (this->readMode) {
|
/*if (this->readMode) {
|
||||||
// (!) Выдать ошибку: стек открыт только для чтения
|
// (!) Выдать ошибку: стек открыт только для чтения
|
||||||
@ -35,6 +60,7 @@ void Stack::rm (byte removeMode) {
|
|||||||
else {
|
else {
|
||||||
// (!) Вот тут очистить по индексу
|
// (!) Вот тут очистить по индексу
|
||||||
this->stackStorage.pop_back();
|
this->stackStorage.pop_back();
|
||||||
|
this->stackLinker.pop_back();
|
||||||
if (this->stackStorage.size() <= this->stackPointer) {
|
if (this->stackStorage.size() <= this->stackPointer) {
|
||||||
this->stackPointer--;
|
this->stackPointer--;
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
using std::byte;
|
using std::byte;
|
||||||
using std::vector;
|
using std::vector;
|
||||||
|
|
||||||
|
int bytesToInt (vector<vector<byte>> bytes);
|
||||||
|
|
||||||
class Stack {
|
class Stack {
|
||||||
public:
|
public:
|
||||||
Stack();
|
Stack();
|
||||||
@ -20,6 +22,8 @@ private:
|
|||||||
int stackPointer = -1;
|
int stackPointer = -1;
|
||||||
int stackSize = 0;
|
int stackSize = 0;
|
||||||
vector<vector<byte>> stackStorage = {};
|
vector<vector<byte>> stackStorage = {};
|
||||||
|
// Link: -1 - Not Link; 0 - Link to stack; 1 - Link to heap
|
||||||
|
vector<int> stackLinker = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // STACK_H
|
#endif // STACK_H
|
||||||
|
Loading…
Reference in New Issue
Block a user