aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorZufu Liu <unknown>2024-01-27 19:51:31 +1100
committerZufu Liu <unknown>2024-01-27 19:51:31 +1100
commit7e32149ab735019ad029c0559b99998b2d525053 (patch)
tree79c43d3b45eb7f2b4d5f23a81bbb96e133a0cb42
parent2ca7a15a1bd45d306775b2757ee17884f2c14320 (diff)
downloadscintilla-mirror-7e32149ab735019ad029c0559b99998b2d525053.tar.gz
Feature [feature-requests:#1458] Reduce memory used for undo actions.
-rw-r--r--doc/ScintillaHistory.html4
-rw-r--r--src/CellBuffer.cxx13
-rw-r--r--src/CellBuffer.h10
3 files changed, 13 insertions, 14 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 67f26fb3d..9b842e278 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -591,6 +591,10 @@
Released 27 December 2023.
</li>
<li>
+ Reduce memory used for undo actions.
+ <a href="https://sourceforge.net/p/scintilla/feature-requests/1458/">Feature #1458</a>.
+ </li>
+ <li>
For ScintillaEdit on Qt, fix reference from ScintillaDocument to Document to match change in 5.4.1
using IDocumentEditable for SCI_GETDOCPOINTER and SCI_SETDOCPOINTER.
</li>
diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx
index 32cc9d730..575aae584 100644
--- a/src/CellBuffer.cxx
+++ b/src/CellBuffer.cxx
@@ -329,23 +329,18 @@ public:
}
};
-Action::Action() noexcept {
- at = ActionType::start;
- position = 0;
- lenData = 0;
- mayCoalesce = false;
-}
+Action::Action() noexcept = default;
void Action::Create(ActionType at_, Sci::Position position_, const char *data_, Sci::Position lenData_, bool mayCoalesce_) {
- data = nullptr;
position = position_;
at = at_;
+ mayCoalesce = mayCoalesce_;
+ lenData = lenData_;
+ data = nullptr;
if (lenData_) {
data = std::make_unique<char[]>(lenData_);
memcpy(&data[0], data_, lenData_);
}
- lenData = lenData_;
- mayCoalesce = mayCoalesce_;
}
void Action::Clear() noexcept {
diff --git a/src/CellBuffer.h b/src/CellBuffer.h
index f0aacf8ec..b46b582c1 100644
--- a/src/CellBuffer.h
+++ b/src/CellBuffer.h
@@ -26,18 +26,18 @@ class ChangeHistory;
*/
class ILineVector;
-enum class ActionType { insert, remove, start, container };
+enum class ActionType : unsigned char { insert, remove, start, container };
/**
* Actions are used to store all the information required to perform one undo/redo step.
*/
class Action {
public:
- ActionType at;
- Sci::Position position;
+ ActionType at = ActionType::insert;
+ bool mayCoalesce = false;
+ Sci::Position position = 0;
std::unique_ptr<char[]> data;
- Sci::Position lenData;
- bool mayCoalesce;
+ Sci::Position lenData = 0;
Action() noexcept;
void Create(ActionType at_, Sci::Position position_=0, const char *data_=nullptr, Sci::Position lenData_=0, bool mayCoalesce_=true);