aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface.h
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2015-02-23 02:54:41 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2015-02-23 02:54:41 +0100
commitb40fe867e021bc365df1a904c2b1ed2068208f13 (patch)
tree94fa618661bec5e25980bde2cb01249c5c3e2c35 /src/interface.h
parent611bb221a96e50fd8561886ec34d8a42e136b5ce (diff)
downloadsciteco-b40fe867e021bc365df1a904c2b1ed2068208f13.tar.gz
implemented to undo stack memory limiting
* acts as a safe-guard against uninterrupted infinite loops or other operations that are costly to undo in interactive mode. If we're out of memory, it is usually too late to react properly. This implementation tries to avoid OOMs due to SciTECO behaviour. We cannot fully exclude the chance of an OOM error. * The undo stack size is only approximated using the UndoToken::get_size() method. Other ways to measure the exact amount of allocated heap (including size fields in every heap object or using sbrk(0) and similar) are either costly in terms of memory or platform-specific. This implementation does not need any additional memory per heap object or undo token but exploits the fact that undo tokens are virtual already. The size of an undo token is determined at compile time. * Default memory limit of 500mb should be OK for most people. * The current limit can be queried with "2EJ" and set with <x>,2EJ. This also works interactively (a bit tricky!) * Limiting can be disabled. In this case, undo token processing is a bit faster. * closes #3
Diffstat (limited to 'src/interface.h')
-rw-r--r--src/interface.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/interface.h b/src/interface.h
index cf9aef6..8f37668 100644
--- a/src/interface.h
+++ b/src/interface.h
@@ -64,7 +64,7 @@ class View {
return *(ViewImpl *)this;
}
- class UndoTokenMessage : public UndoToken {
+ class UndoTokenMessage : public UndoTokenWithSize<UndoTokenMessage> {
ViewImpl &view;
unsigned int iMessage;
@@ -74,8 +74,7 @@ class View {
public:
UndoTokenMessage(ViewImpl &_view, unsigned int _iMessage,
uptr_t _wParam = 0, sptr_t _lParam = 0)
- : UndoToken(), view(_view),
- iMessage(_iMessage),
+ : view(_view), iMessage(_iMessage),
wParam(_wParam), lParam(_lParam) {}
void
@@ -85,7 +84,8 @@ class View {
}
};
- class UndoTokenSetRepresentations : public UndoToken {
+ class UndoTokenSetRepresentations : public
+ UndoTokenWithSize<UndoTokenSetRepresentations> {
ViewImpl &view;
public:
@@ -158,7 +158,7 @@ class Interface {
return *(InterfaceImpl *)this;
}
- class UndoTokenShowView : public UndoToken {
+ class UndoTokenShowView : public UndoTokenWithSize<UndoTokenShowView> {
ViewImpl *view;
public:
@@ -169,7 +169,7 @@ class Interface {
};
template <class Type>
- class UndoTokenInfoUpdate : public UndoToken {
+ class UndoTokenInfoUpdate : public UndoTokenWithSize< UndoTokenInfoUpdate<Type> > {
Type *obj;
public: