# tag: cpp
"""
PYTHON setup.py build_ext --inplace
PYTHON -c "from call_stack_allocated import test; test()"
"""
######## setup.py ########
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('*.pyx', language='c++'))
######## call.cpp ########
class wint {
public:
long long val;
wint() { val = 0; }
wint(long long val) { this->val = val; }
long long &operator()() { return this->val; }
long long operator()(long long i) { return this->val + i; }
long long operator()(long long i, long long j) { return this->val + i + j; }
};
######## call.pxd ########
cdef extern from "call.cpp" nogil:
cppclass wint:
long long val
wint()
wint(long long val)
long long& operator()()
long long operator()(long long i)
long long operator()(long long i, long long j)
######## call_stack_allocated.pyx ########
from call cimport wint
def test():
cdef wint a = wint(4)
cdef long long b = 3
b = a()
assert b == 4
b = a(1ll)
assert b == 5
b = a(1ll, 1ll)
assert b == 6