diff options
author | tomsmeding <hallo@tomsmeding.nl> | 2015-09-10 15:38:09 +0200 |
---|---|---|
committer | tomsmeding <hallo@tomsmeding.nl> | 2015-09-10 15:38:09 +0200 |
commit | d95a42c7b299e43bfe026c0a2e8233679ccfc01c (patch) | |
tree | 22392501a3924de7962343f5f772082dcd9153e2 /functions.cpp | |
parent | 0711be4f145b3d74bc90658dd71d186716e6a72c (diff) |
add mkarrayp
Diffstat (limited to 'functions.cpp')
-rw-r--r-- | functions.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/functions.cpp b/functions.cpp index dacd194..03b8805 100644 --- a/functions.cpp +++ b/functions.cpp @@ -394,6 +394,20 @@ unordered_map<string,function<void(vector<Stackitem>&,unordered_map<string,Stack BUILTIN_GUARD_STACKSIZE("mkarray",0) S.emplace_back(Stackitem(vector<Stackitem>())); }}, + //mkarray prefill + {"mkarrayp",[](vector<Stackitem> &S,unordered_map<string,Stackitem> &variables){ + BUILTIN_GUARD_STACKSIZE("mkarrayp",1) + const Stackitem nitems=move(S.back()); S.pop_back(); + if(nitems.type!=SIT_INT)throw string("Argument to 'mkarrayp' not a number"); + if(nitems.intval<0)throw string("Negative argument to 'mkarrayp'"); + BUILTIN_GUARD_STACKSIZE("mkarrayp: prefill",nitems.intval); + Stackitem res((vector<Stackitem>())); + res.arrval.reserve(nitems.intval); + const int sz=S.size(); + for(int i=sz-nitems.intval;i<sz;i++)res.arrval.push_back(move(S[i])); + S.erase(S.end()-nitems.intval,S.end()); + S.push_back(move(res)); + }}, //leaves the array on the stack {"arridx",[](vector<Stackitem> &S,unordered_map<string,Stackitem> &variables){ BUILTIN_GUARD_STACKSIZE("arridx",2) |