From 36fa4a4152cf9dbe9cbb4bcf56cf5d40e3877302 Mon Sep 17 00:00:00 2001 From: Laury Date: Mon, 9 May 2022 18:39:02 +0200 Subject: [PATCH 1/4] Revert "[storage] Possibility to store metadata with records (cursor in scripts)" --- apps/code/editor_controller.cpp | 8 +- apps/code/script.cpp | 15 --- apps/code/script.h | 2 - ion/include/ion/internal_storage.h | 24 +---- ion/include/ion/storage.h | 1 - ion/src/shared/internal_storage.cpp | 152 ++-------------------------- ion/src/shared/storage.cpp | 2 +- 7 files changed, 9 insertions(+), 195 deletions(-) diff --git a/apps/code/editor_controller.cpp b/apps/code/editor_controller.cpp index d286b92cf..be09c9662 100644 --- a/apps/code/editor_controller.cpp +++ b/apps/code/editor_controller.cpp @@ -65,19 +65,13 @@ void EditorController::viewWillAppear() { ViewController::viewWillAppear(); m_editorView.loadSyntaxHighlighter(); if(GlobalPreferences::sharedGlobalPreferences()->cursorSaving()) { - int offset = m_script.cursorOffset(); - if (offset != -1) { - m_editorView.setCursorLocation(m_editorView.text() + offset); - } else { - m_editorView.setCursorLocation(m_editorView.text() + strlen(m_editorView.text())); - } + m_editorView.setCursorLocation(m_editorView.text() + strlen(m_editorView.text())); } else { m_editorView.setCursorLocation(m_editorView.text() + strlen(m_editorView.text())); } } void EditorController::viewDidDisappear() { - m_script.setCursorOffset(m_editorView.cursorLocation() - m_script.content()); m_editorView.resetSelection(); m_menuController->scriptContentEditionDidFinish(); } diff --git a/apps/code/script.cpp b/apps/code/script.cpp index 3b73d54bd..4b39b3452 100644 --- a/apps/code/script.cpp +++ b/apps/code/script.cpp @@ -65,21 +65,6 @@ bool Script::nameCompliant(const char * name) { return false; } -uint16_t Script::cursorOffset() { - assert(!isNull()); - Ion::Storage::MetadataRowHeader * metadataForRecord = Ion::Storage::sharedStorage()->metadataForRecord(*this); - if (metadataForRecord != nullptr) { - assert(metadataForRecord->metadataSize == 2); - return *((uint16_t*) metadataForRecord->data()); - } - - return -1; -} -void Script::setCursorOffset(uint16_t position) { - assert(!isNull()); - Ion::Storage::sharedStorage()->setMetadataForRecord(*this, sizeof(uint16_t), &position); -} - uint8_t * StatusFromData(Script::Data d) { return const_cast(static_cast(d.buffer)); } diff --git a/apps/code/script.h b/apps/code/script.h index ffa8038bc..6f7df9cda 100644 --- a/apps/code/script.h +++ b/apps/code/script.h @@ -50,8 +50,6 @@ public: void toggleAutoimportationStatus(); const char * content() const; size_t contentSize() { return value().size - k_statusSize; } - void setCursorOffset(uint16_t position); // -1 if no metadata - uint16_t cursorOffset(); /* Fetched status */ bool fetchedFromConsole() const; diff --git a/ion/include/ion/internal_storage.h b/ion/include/ion/internal_storage.h index c85282df2..257d243ce 100644 --- a/ion/include/ion/internal_storage.h +++ b/ion/include/ion/internal_storage.h @@ -64,7 +64,6 @@ public: return m_fullNameCRC32 == 0; } const char * fullName() const; - uint32_t fullNameCRC32() const { return m_fullNameCRC32; } ErrorStatus setBaseNameWithExtension(const char * baseName, const char * extension); ErrorStatus setName(const char * fullName); Data value() const; @@ -75,19 +74,11 @@ public: uint32_t m_fullNameCRC32; }; - struct MetadataRowHeader { // In fact, it's a struct with a method to get data - public: - char * data() const { return (char *) this + sizeof(MetadataRowHeader); } - uint32_t size() const { return sizeof(MetadataRowHeader) + metadataSize; } - uint32_t fullNameCRC32; - uint32_t metadataSize; // To fullfill alignment - MetadataRowHeader * nextRow; - }; #if ION_STORAGE_LOG void log(); #endif - size_t availableSize(char ** endBufferReturn = nullptr); + size_t availableSize(); size_t putAvailableSpaceAtEndOfRecord(Record r); void getAvailableSpaceFromEndOfRecord(Record r, size_t recordAvailableSpace); uint32_t checksum(); @@ -123,11 +114,6 @@ public: // Used by Python OS module int numberOfRecords(); Record recordAtIndex(int index); - - // Metadata - MetadataRowHeader * metadataForRecord(Record r); - bool setMetadataForRecord(Record r, int size, const void * metadata); - void removeMetadataForRecord(Record r); protected: InternalStorage(); /* Getters on address in buffer */ @@ -137,13 +123,6 @@ protected: const void * valueOfRecordStarting(char * start) const; void destroyRecord(const Record record); - struct MetadataMapHeader { - char * startOfMetadataMap() { return (char *) this - metadataMapSize + sizeof(MetadataMapHeader); } - uint8_t metadataMapSize; - uint8_t numberOfRows; - MetadataRowHeader * firstRow; - }; - class RecordIterator { public: RecordIterator(char * start) : m_recordStart(start) {} @@ -196,7 +175,6 @@ private: protected: mutable Record m_lastRecordRetrieved; mutable char * m_lastRecordRetrievedPointer; - MetadataMapHeader * m_metadataMapHeader; }; /* Some apps memoize records and need to be notified when a record might have diff --git a/ion/include/ion/storage.h b/ion/include/ion/storage.h index 300e77d39..5385f4608 100644 --- a/ion/include/ion/storage.h +++ b/ion/include/ion/storage.h @@ -8,7 +8,6 @@ namespace Ion { class Storage : public InternalStorage { public: using InternalStorage::Record; - using InternalStorage::MetadataRowHeader; using InternalStorage::expExtension; using InternalStorage::funcExtension; diff --git a/ion/src/shared/internal_storage.cpp b/ion/src/shared/internal_storage.cpp index eade3a611..5fc4a90d1 100644 --- a/ion/src/shared/internal_storage.cpp +++ b/ion/src/shared/internal_storage.cpp @@ -112,138 +112,11 @@ void InternalStorage::log() { } #endif -InternalStorage::MetadataRowHeader * InternalStorage::metadataForRecord(Record r) { - MetadataRowHeader * header = m_metadataMapHeader->firstRow; - for (int i = 0; i < m_metadataMapHeader->numberOfRows; i++) { - if (header->fullNameCRC32 == r.fullNameCRC32()) { - return header; - } - header = header->nextRow; - } - - return nullptr; -} - -void InternalStorage::removeMetadataForRecord(Record r) { - if (r.isNull()) { - return; - } - - MetadataRowHeader ** rowPointer = &m_metadataMapHeader->firstRow; - MetadataRowHeader * headerToRemove = nullptr; - size_t headerToRemoveSize = 0; // We compute it now as it will be more difficult later - for (int i = 0; i < m_metadataMapHeader->numberOfRows; i++) { - if ((*rowPointer)->fullNameCRC32 == r.fullNameCRC32()) { - headerToRemove = *rowPointer; - headerToRemoveSize = headerToRemove->size(); - if ((*rowPointer)->nextRow != nullptr) { - *rowPointer = (MetadataRowHeader *) ((char *) (*rowPointer)->nextRow + headerToRemove->size()); - } else { - *rowPointer = nullptr; - } - break; - } - - rowPointer = &(*rowPointer)->nextRow; - } - - if (headerToRemove == nullptr) { - return; - } - - MetadataRowHeader * header = headerToRemove->nextRow; - if (header != nullptr) { - while (header->nextRow) { - MetadataRowHeader * nextRow = header->nextRow; - header->nextRow = (MetadataRowHeader *) ((char *) header->nextRow +headerToRemoveSize); - header = nextRow; - } - } - - char * startOfMetadataMap = m_metadataMapHeader->startOfMetadataMap(); - uint8_t sizeToMove = (char *) headerToRemove - startOfMetadataMap; - - memmove(startOfMetadataMap + headerToRemoveSize, startOfMetadataMap, sizeToMove); - m_metadataMapHeader->numberOfRows--; - m_metadataMapHeader->metadataMapSize -= headerToRemoveSize; -} - -bool InternalStorage::setMetadataForRecord(Record r, int size, const void * metadata) { - int neededSize = 0; - char * endBufferPointer = nullptr; - MetadataRowHeader * headerToUpdate = nullptr; - MetadataRowHeader ** headerToUpdatePointer = nullptr; - int headerToUpdateIndex = -1; - - // We find the metadata row header for this record - MetadataRowHeader ** headerPointer = &m_metadataMapHeader->firstRow; - for (int i = 0; i < m_metadataMapHeader->numberOfRows; i++) { - if ((*headerPointer)->fullNameCRC32 == r.fullNameCRC32()) { - neededSize = size - (*headerPointer)->metadataSize; - headerToUpdate = (*headerPointer); - headerToUpdatePointer = headerPointer; - headerToUpdateIndex = i; - if (neededSize > 0 && neededSize > availableSize(&endBufferPointer)) { - return false; - } - break; - } - - headerPointer = &((*headerPointer)->nextRow); - } - - char * startOfMetadataMap = m_metadataMapHeader->startOfMetadataMap(); // Me must compute it now because it may change - - if (headerToUpdate == nullptr) { // If we didn't find a header, we need to create one - if (size != 0) { - uint8_t newRowSize = sizeof(MetadataRowHeader) + size; - - if (endBufferPointer < m_buffer + k_storageSize - m_metadataMapHeader->metadataMapSize - newRowSize) { - m_metadataMapHeader->numberOfRows++; - m_metadataMapHeader->metadataMapSize += newRowSize; - headerToUpdate = (MetadataRowHeader *) ((char *) startOfMetadataMap - newRowSize); - headerToUpdate->fullNameCRC32 = r.fullNameCRC32(); - headerToUpdate->nextRow = nullptr; - - if (m_metadataMapHeader->numberOfRows == 0) { - m_metadataMapHeader->firstRow = headerToUpdate; - } else { - ((MetadataRowHeader *) startOfMetadataMap)->nextRow = headerToUpdate; - } - - } else { - return false; - } - } else { - return true; - } - } - - if (neededSize != 0) { // If we must move some data to make or fill empty space - m_metadataMapHeader->metadataMapSize += neededSize; - memmove(startOfMetadataMap - neededSize, startOfMetadataMap, (char *) headerToUpdate + sizeof(MetadataRowHeader) - startOfMetadataMap); - - headerToUpdate = (MetadataRowHeader *) ((char *) headerToUpdate - neededSize); - MetadataRowHeader ** headerAfterPointer = headerToUpdatePointer; // Now we update each header below the one we just updated - for (int i = headerToUpdateIndex; i < m_metadataMapHeader->numberOfRows; i++) { - (*headerAfterPointer) = (MetadataRowHeader *) ((char *) (*headerAfterPointer) - neededSize); - headerAfterPointer = &((*headerAfterPointer)->nextRow); - } - } - - headerToUpdate->metadataSize = size; - memcpy(headerToUpdate->data(), metadata, size); - - return true; -} - -size_t InternalStorage::availableSize(char ** endBufferReturn) { - char * endBufferPointer = endBuffer(); - if (endBufferReturn) { - *endBufferReturn = endBufferPointer; - } - assert(k_storageSize >= (endBufferPointer - m_buffer) + sizeof(record_size_t) + m_metadataMapHeader->metadataMapSize); - return k_storageSize-(endBufferPointer-m_buffer)-sizeof(record_size_t) - m_metadataMapHeader->metadataMapSize; +size_t InternalStorage::availableSize() { + /* TODO maybe do: availableSize(char ** endBuffer) to get the endBuffer if it + * is needed after calling availableSize */ + assert(k_storageSize >= (endBuffer() - m_buffer) + sizeof(record_size_t)); + return k_storageSize-(endBuffer()-m_buffer)-sizeof(record_size_t); } size_t InternalStorage::putAvailableSpaceAtEndOfRecord(InternalStorage::Record r) { @@ -253,7 +126,7 @@ size_t InternalStorage::putAvailableSpaceAtEndOfRecord(InternalStorage::Record r char * nextRecord = p + previousRecordSize; memmove(nextRecord + availableStorageSize, nextRecord, - (m_buffer + k_storageSize - m_metadataMapHeader->metadataMapSize - availableStorageSize) - nextRecord); + (m_buffer + k_storageSize - availableStorageSize) - nextRecord); size_t newRecordSize = previousRecordSize + availableStorageSize; overrideSizeAtPosition(p, (record_size_t)newRecordSize); return newRecordSize; @@ -475,12 +348,6 @@ InternalStorage::InternalStorage() : assert(m_magicFooter == Magic); // Set the size of the first record to 0 overrideSizeAtPosition(m_buffer, 0); - - // Set the metadata map header at the end of the buffer - m_metadataMapHeader = (MetadataMapHeader*) (m_buffer + k_storageSize - sizeof(MetadataMapHeader)); - m_metadataMapHeader->numberOfRows = 0; - m_metadataMapHeader->firstRow = nullptr; - m_metadataMapHeader->metadataMapSize = sizeof(MetadataMapHeader); } // PRIVATE @@ -514,11 +381,6 @@ InternalStorage::Record::ErrorStatus InternalStorage::setFullNameOfRecord(const notifyChangeToDelegate(record); m_lastRecordRetrieved = record; m_lastRecordRetrievedPointer = p; - // Update metadata map - MetadataRowHeader * row = metadataForRecord(record); - if (row != nullptr) { - row->fullNameCRC32 = Record(fullName).fullNameCRC32(); - } return Record::ErrorStatus::None; } return Record::ErrorStatus::RecordDoesNotExist; @@ -590,8 +452,6 @@ void InternalStorage::destroyRecord(Record record) { } char * p = pointerOfRecord(record); if (p != nullptr) { - // Erase metadata - InternalStorage::removeMetadataForRecord(record); record_size_t previousRecordSize = sizeOfRecordStarting(p); slideBuffer(p+previousRecordSize, -previousRecordSize); notifyChangeToDelegate(); diff --git a/ion/src/shared/storage.cpp b/ion/src/shared/storage.cpp index 3a90f51ad..50a8a4c70 100644 --- a/ion/src/shared/storage.cpp +++ b/ion/src/shared/storage.cpp @@ -21,7 +21,7 @@ size_t Storage::availableSize() { bufferSize += sizeOfRecordStarting(p); } } - return k_storageSize-bufferSize-sizeof(record_size_t)-InternalStorage::m_metadataMapHeader->metadataMapSize; + return k_storageSize-bufferSize-sizeof(record_size_t); } else { return InternalStorage::availableSize(); } From be3c8fce9c76c1ac1701c4a2af950edb18be0e7c Mon Sep 17 00:00:00 2001 From: emanuel <76693837+emsquid@users.noreply.github.com> Date: Tue, 10 May 2022 18:06:46 +0200 Subject: [PATCH 2/4] Update config.mak (#230) [build/config.mak] Set OMEGA_VERSION to 2.0.2 --- build/config.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/config.mak b/build/config.mak index 3b6ce62f6..a912bd170 100644 --- a/build/config.mak +++ b/build/config.mak @@ -5,7 +5,7 @@ DEBUG ?= 0 HOME_DISPLAY_EXTERNALS ?= 1 EPSILON_VERSION ?= 15.5.0 -OMEGA_VERSION ?= 2.0.0 +OMEGA_VERSION ?= 2.0.2 UPSILON_VERSION ?= 1.0.0 # OMEGA_USERNAME ?= N/A OMEGA_STATE ?= public From 2ee7b67af16c39b239832c5f61eae4abe466a8fa Mon Sep 17 00:00:00 2001 From: Andrej Date: Wed, 11 May 2022 20:27:12 +0200 Subject: [PATCH 3/4] [bootloader/menu] Fix typo (#231) --- bootloader/interface/src/menu.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bootloader/interface/src/menu.h b/bootloader/interface/src/menu.h index ba8bae77c..0e88ba7c6 100644 --- a/bootloader/interface/src/menu.h +++ b/bootloader/interface/src/menu.h @@ -9,10 +9,10 @@ namespace Bootloader { class Menu { public: Menu() : Menu(KDColorBlack, KDColorWhite, Messages::mainTitle) { }; - Menu(KDColor forground, KDColor background, const char * title) : Menu(forground, background, title, nullptr) {}; - Menu(KDColor forground, KDColor background, const char * title, const char * bottom) : Menu(forground, background, title, bottom, false) {}; - Menu(KDColor forground, KDColor background, const char * title, const char * bottom, bool centerY) : Menu(forground, background, title, bottom, centerY, k_columns_margin) {}; - Menu(KDColor forground, KDColor background, const char * title, const char * bottom, bool centerY, int margin) : m_columns(), m_defaultColumns(), m_slotColumns(), m_background(background), m_title(title), m_foreground(forground), m_bottom(bottom), m_centerY(centerY), m_forced_exit(false), m_margin(margin) { + Menu(KDColor foreground, KDColor background, const char * title) : Menu(foreground, background, title, nullptr) {}; + Menu(KDColor foreground, KDColor background, const char * title, const char * bottom) : Menu(foreground, background, title, bottom, false) {}; + Menu(KDColor foreground, KDColor background, const char * title, const char * bottom, bool centerY) : Menu(foreground, background, title, bottom, centerY, k_columns_margin) {}; + Menu(KDColor foreground, KDColor background, const char * title, const char * bottom, bool centerY, int margin) : m_columns(), m_defaultColumns(), m_slotColumns(), m_background(background), m_title(title), m_foreground(foreground), m_bottom(bottom), m_centerY(centerY), m_forced_exit(false), m_margin(margin) { setup(); } static const int k_columns_margin = 5; From 2a6d110f2fbaf71cd3ccd10dbfdb5a4f19174139 Mon Sep 17 00:00:00 2001 From: Yaya-Cout Date: Wed, 18 May 2022 13:02:41 +0200 Subject: [PATCH 4/4] Change Upsilon version from 1.0.0 to 1.0.1-dev --- build/config.mak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/config.mak b/build/config.mak index a912bd170..cf91239fe 100644 --- a/build/config.mak +++ b/build/config.mak @@ -6,9 +6,9 @@ DEBUG ?= 0 HOME_DISPLAY_EXTERNALS ?= 1 EPSILON_VERSION ?= 15.5.0 OMEGA_VERSION ?= 2.0.2 -UPSILON_VERSION ?= 1.0.0 +UPSILON_VERSION ?= 1.0.1-dev # OMEGA_USERNAME ?= N/A -OMEGA_STATE ?= public +OMEGA_STATE ?= dev EPSILON_APPS ?= calculation graph rpn code statistics probability solver atomic sequence regression reader settings external SUBMODULES_APPS = atomic rpn EPSILON_I18N ?= en fr nl pt it de es hu