1/*
2    Title:  arb.h - exports signature for arb.c
3
4    Copyright (c) 2000
5        Cambridge University Technical Services Limited
6
7    Further modification Copyright 2015-16 David C. J. Matthews
8
9    This library is free software; you can redistribute it and/or
10    modify it under the terms of the GNU Lesser General Public
11    License version 2.1 as published by the Free Software Foundation.
12
13    This library is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public
19    License along with this library; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21
22*/
23
24#ifndef ARB_H_INCLUDED
25#define ARB_H_INCLUDED
26
27class SaveVecEntry;
28typedef SaveVecEntry *Handle;
29class TaskData;
30
31// These functions create values of type int from signed or unsigned values.
32extern Handle Make_arbitrary_precision(TaskData *taskData, long);
33extern Handle Make_arbitrary_precision(TaskData *taskData, unsigned long);
34
35extern Handle Make_arbitrary_precision(TaskData *taskData, int);
36extern Handle Make_arbitrary_precision(TaskData *taskData, unsigned);
37
38#ifdef HAVE_LONG_LONG
39extern Handle Make_arbitrary_precision(TaskData *taskData, long long);
40extern Handle Make_arbitrary_precision(TaskData *taskData, unsigned long long);
41#endif
42
43extern Handle Make_arb_from_32bit_pair(TaskData *taskData, uint32_t hi, uint32_t lo);
44extern Handle Make_arb_from_pair_scaled(TaskData *taskData, unsigned hi, unsigned lo, unsigned scale);
45
46#if defined(_WIN32)
47extern Handle Make_arb_from_Filetime(TaskData *taskData, const FILETIME &ft);
48#endif
49
50// This is currently used in the interpreter.
51extern Handle mult_longc(TaskData *taskData, Handle,Handle);
52// Currently used in basicio.cpp
53extern Handle div_longc(TaskData *taskData, Handle,Handle);
54extern Handle rem_longc(TaskData *taskData, Handle,Handle);
55
56// Return a uintptr_t/intptr_t value.
57extern POLYUNSIGNED     getPolyUnsigned(TaskData *taskData, PolyWord);
58extern POLYSIGNED       getPolySigned(TaskData *taskData, PolyWord);
59
60#define get_C_ulong     getPolyUnsigned
61extern unsigned short   get_C_ushort(TaskData *taskData, PolyWord);
62extern unsigned         get_C_unsigned(TaskData *taskData, PolyWord);
63
64#define get_C_long      getPolySigned
65extern short            get_C_short(TaskData *taskData, PolyWord);
66extern int              get_C_int(TaskData *taskData, PolyWord);
67
68extern double           get_arbitrary_precision_as_real(PolyWord x);
69
70#if defined(_WIN32)
71void getFileTimeFromArb(TaskData *taskData, Handle numHandle, PFILETIME ft);
72#endif
73
74extern struct _entrypts arbitraryPrecisionEPT[];
75
76#endif
77