Add class to determine the current stack size.

master
Torsten Paul 2014-11-24 23:36:29 +01:00
parent ba4c50c631
commit 756f8079d8
3 changed files with 60 additions and 0 deletions

View File

@ -245,6 +245,7 @@ HEADERS += src/typedefs.h \
src/dxfdim.h \
src/export.h \
src/expression.h \
src/stackcheck.h \
src/function.h \
src/grid.h \
src/highlighter.h \
@ -321,6 +322,7 @@ SOURCES += src/version_check.cc \
src/handle_dep.cc \
src/value.cc \
src/expr.cc \
src/stackcheck.cc \
src/func.cc \
src/localscope.cc \
src/module.cc \

37
src/stackcheck.cc Normal file
View File

@ -0,0 +1,37 @@
#include <cstdlib>
#include "stackcheck.h"
#include "PlatformUtils.h"
StackCheck * StackCheck::self = 0;
StackCheck::StackCheck() : ptr(0)
{
}
StackCheck::~StackCheck()
{
}
void StackCheck::init()
{
ptr = sp();
}
unsigned long StackCheck::size()
{
return std::labs(ptr - sp());
}
bool StackCheck::check()
{
return size() >= PlatformUtils::stackLimit();
}
StackCheck * StackCheck::inst()
{
if (self == 0) {
self = new StackCheck();
}
return self;
}

21
src/stackcheck.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
class StackCheck
{
public:
StackCheck();
virtual ~StackCheck();
static StackCheck * inst();
void init();
bool check();
unsigned long size();
private:
unsigned char * sp() { unsigned char c; return &c; };
unsigned char * ptr;
static StackCheck *self;
};