summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/builtin.cc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-07-08 01:04:31 +0000
committerKarl Berry <karl@freefriends.org>2009-07-08 01:04:31 +0000
commit17ee31b51081b8281b652fa06b997918003f7772 (patch)
treec5c1420540fe9a31454c1450ec5d96c096f91a9b /Build/source/utils/asymptote/builtin.cc
parentbf914f81a2ff8552e1438251f4b6b56f9acf0b90 (diff)
asymptote 1.80
git-svn-id: svn://tug.org/texlive/trunk@14179 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/builtin.cc')
-rw-r--r--Build/source/utils/asymptote/builtin.cc26
1 files changed, 23 insertions, 3 deletions
diff --git a/Build/source/utils/asymptote/builtin.cc b/Build/source/utils/asymptote/builtin.cc
index 9802b6d1197..ae998acf322 100644
--- a/Build/source/utils/asymptote/builtin.cc
+++ b/Build/source/utils/asymptote/builtin.cc
@@ -1341,6 +1341,10 @@ void base_venv(venv &ve)
formal(IntRealFunction(),"f"),
formal(realArray(),"a"));
+ addFunc(ve,single,primFile(),"single",formal(primFile(),"file"),
+ formal(primBoolean(),"real",true),
+ formal(primBoolean(),"int",true));
+
#ifdef HAVE_LIBFFTW3
addFunc(ve,pairArrayFFT,pairArray(),"fft",formal(pairArray(),"a"),
formal(primInt(),"sign",true));
@@ -1378,17 +1382,22 @@ namespace run {
double infinity=cbrt(DBL_MAX); // Reduced for tension atleast infinity
-void arrayDeleteHelper(vm::stack *Stack)
+void arrayDeleteHelper(stack *Stack)
{
array *a=pop<array *>(Stack);
item itj=pop(Stack);
+ bool jdefault=isdefault(itj);
item iti=pop(Stack);
+ Int i,j;
if(isdefault(iti)) {
+ if(jdefault) {
(*a).clear();
return;
+ } else i=j=get<Int>(itj);
+ } else {
+ i=get<Int>(iti);
+ j=jdefault ? i : get<Int>(itj);
}
- Int i=get<Int>(iti);
- Int j=isdefault(itj) ? i : get<Int>(itj);
size_t asize=checkArray(a);
if(a->cyclic() && asize > 0) {
@@ -1417,4 +1426,15 @@ void arrayDeleteHelper(vm::stack *Stack)
(*a).erase((*a).begin()+i,(*a).begin()+j+1);
}
+// Set file to read/write single-precision real and int XDR values.
+void single(stack *Stack)
+{
+ bool integer=pop<bool>(Stack,true);
+ bool real=pop<bool>(Stack,true);
+ file *File=pop<file *>(Stack);
+ File->SingleReal(real);
+ File->SingleInt(integer);
+ Stack->push(File);
+}
+
}