mirror of https://github.com/vitalif/openscad
Add class to determine the current stack size.
parent
ba4c50c631
commit
756f8079d8
|
@ -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 \
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
};
|
Loading…
Reference in New Issue