]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multiprecision/test/skeleton_backend.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / multiprecision / test / skeleton_backend.hpp
CommitLineData
f67539c2
TL
1///////////////////////////////////////////////////////////////
2// Copyright 2020 John Maddock. Distributed under the Boost
3// Software License, Version 1.0. (See accompanying file
4// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
5
6#ifndef BOOST_MATH_SKELETON_BACKEND_HPP
7#define BOOST_MATH_SKELETON_BACKEND_HPP
8
9#include <boost/multiprecision/number.hpp>
10#include <boost/container_hash/hash.hpp>
11
12namespace boost {
13namespace multiprecision {
14namespace backends {
15
16/*
17This header defines one type - skeleton_backend - which declares the minimal
18interface to qualify as a backend for class number. In addition you'll find
19optional interfaces declared commented out - you can enable these or not as
20needed.
21
22The process of writing a new backend for class number then reduces to a search
23and replace to change the name of this class to something meaningful, followed
24by "filling in the blanks" of each of the methods.
25
26NOTE: all of the methods shown below are simple declarations, be sure to make them
27inline, constexpr and/or noexcept as appropriate - as these annotations propogate
28upwards to operations on number<>'s.
29
30If the backend is to be itself a template, thn you will have rather more editing to
31do to add all the "template<...>" prefixes to the functions.
32
33*/
34
35
36struct skeleton_backend
37{
38 //
39 // Each backend need to declare 3 type lists which declare the types
40 // with which this can interoperate. These lists must at least contain
41 // the widest type in each category - so "long long" must be the final
42 // type in the signed_types list for example. Any narrower types if not
43 // present in the list will get promoted to the next wider type that is
44 // in the list whenever mixed arithmetic involving that type is encountered.
45 //
1e59de90
TL
46 typedef std::tuple</*signed char, short, int, long,*/ long long> signed_types;
47 typedef std::tuple</* unsigned char, unsigned short, unsigned, unsigned long,*/ unsigned long long> unsigned_types;
48 typedef std::tuple</*float, double,*/ long double> float_types;
f67539c2
TL
49 //
50 // This typedef is only required if this is a floating point type, it is the type
51 // which holds the exponent:
52 //
53 typedef int exponent_type;
54
55 // We must have a default constructor:
56 skeleton_backend();
57 skeleton_backend(const skeleton_backend& o);
f67539c2 58 skeleton_backend(skeleton_backend&& o);
f67539c2
TL
59
60 // Optional constructors, we can make this type slightly more efficient
61 // by providing constructors from any type we can handle natively.
62 // These will also cause number<> to be implicitly constructible
63 // from these types unless we make such constructors explicit.
64 //
65 // skeleton_backend(int o); // If there's an efficient initialisation from int for example.
66
67 //
68 // In the absense of converting constructors, operator= takes the strain.
69 // In addition to the usual suspects, there must be one operator= for each type
70 // listed in signed_types, unsigned_types, and float_types plus a string constructor.
71 //
72 skeleton_backend& operator=(const skeleton_backend& o);
f67539c2 73 skeleton_backend& operator=(skeleton_backend&& o);
f67539c2
TL
74 skeleton_backend& operator=(unsigned long long i);
75 skeleton_backend& operator=(long long i);
76 skeleton_backend& operator=(long double i);
77 skeleton_backend& operator=(const char* s);
78
79 void swap(skeleton_backend& o);
80 std::string str(std::streamsize digits, std::ios_base::fmtflags f) const;
81 void negate();
82 int compare(const skeleton_backend& o) const;
83 //
84 // Comparison with arithmetic types, default just constructs a temporary:
85 //
86 template <class A>
1e59de90 87 typename std::enable_if<boost::multiprecision::detail::is_arithmetic<A>::value, int>::type compare(A i) const
f67539c2
TL
88 {
89 skeleton_backend t;
90 t = i; // Note: construct directly from i if supported.
91 return compare(t);
92 }
93};
94
95//
96// Required non-members:
97//
98void eval_add(skeleton_backend& a, const skeleton_backend& b);
99void eval_subtract(skeleton_backend& a, const skeleton_backend& b);
100void eval_multiply(skeleton_backend& a, const skeleton_backend& b);
101void eval_divide(skeleton_backend& a, const skeleton_backend& b);
102//
103// Required only for integer types:
104//
105void eval_modulus(skeleton_backend& a, const skeleton_backend& b);
106void eval_bitwise_and(skeleton_backend& a, const skeleton_backend& b);
107void eval_bitwise_or(skeleton_backend& a, const skeleton_backend& b);
108void eval_bitwise_xor(skeleton_backend& a, const skeleton_backend& b);
109void eval_complement(skeleton_backend& a, const skeleton_backend& b);
110void eval_left_shift(skeleton_backend& a, unsigned shift);
111void eval_right_shift(skeleton_backend& a, unsigned shift);
112//
113// Conversions: must include at least unsigned long long, long long and long double.
114// Everything else is entirely optional:
115//
116void eval_convert_to(unsigned long long* result, const skeleton_backend& backend);
117void eval_convert_to(long long* result, const skeleton_backend& backend);
118void eval_convert_to(long double* result, const skeleton_backend& backend);
119
120//void eval_convert_to(unsigned long* result, const skeleton_backend& backend);
121//void eval_convert_to(unsigned* result, const skeleton_backend& backend);
122//void eval_convert_to(unsigned short* result, const skeleton_backend& backend);
123//void eval_convert_to(unsigned char* result, const skeleton_backend& backend);
124
125//void eval_convert_to(char* result, const skeleton_backend& backend);
126
127//void eval_convert_to(long* result, const skeleton_backend& backend);
128//void eval_convert_to(int* result, const skeleton_backend& backend);
129//void eval_convert_to(short* result, const skeleton_backend& backend);
130//void eval_convert_to(signed char* result, const skeleton_backend& backend);
131
132//void eval_convert_to(double* result, const skeleton_backend& backend);
133//void eval_convert_to(float* result, const skeleton_backend& backend);
134
135//
136// Operations which are required *only* if we have a floating point type:
137//
138void eval_frexp(skeleton_backend& result, const skeleton_backend& arg, skeleton_backend::exponent_type* p_exponent);
139void eval_frexp(skeleton_backend& result, const skeleton_backend& arg, int* p_exponent); // throws a runtime_error if the exponent is too large for an int
140void eval_ldexp(skeleton_backend& result, const skeleton_backend& arg, skeleton_backend::exponent_type exponent);
141void eval_ldexp(skeleton_backend& result, const skeleton_backend& arg, int exponent);
142void eval_floor(skeleton_backend& result, const skeleton_backend& arg);
143void eval_ceil(skeleton_backend& result, const skeleton_backend& arg);
144void eval_sqrt(skeleton_backend& result, const skeleton_backend& arg);
145//
146// Operations defined *only* if we have a complex number type, type
147// skeleton_real_type is assumed to be the real number type matching
148// this type.
149//
150void eval_conj(skeleton_backend& result, const skeleton_backend& arg);
151void eval_proj(skeleton_backend& result, const skeleton_backend& arg);
152//void eval_real(skeleton_real_type& result, const skeleton_backend& arg);
153//void eval_set_real(skeleton_real_type& result, const skeleton_backend& arg);
154//void eval_imag(skeleton_real_type& result, const skeleton_backend& arg);
155//void eval_set_real(skeleton_type& result, const skeleton_real_type& arg);
156//void eval_set_imag(skeleton_type& result, const skeleton_real_type& arg);
157
158//
159// Hashing support, not strictly required, but it is used in our tests:
160//
161std::size_t hash_value(const skeleton_backend& arg);
162//
163// We're now into strictly optional requirements, everything that follows is
164// nice to have, but can be synthesised from the operators above if required.
165// Typically these operations are here to improve performance and reduce the
166// number of temporaries created.
167//
168// assign_components: required number types with 2 seperate components (rationals and complex numbers).
169// Type skeleton_component_type is whatever the corresponding backend type for the components is:
170//
171//void assign_conponents(skeleton_backend& result, skeleton_component_type const& a, skeleton_component_type const& b);
172//
173// Again for arithmetic types, overload for whatever arithmetic types are directly supported:
174//
175//void assign_conponents(skeleton_backend& result, double a, double b);
176//
177// Optional comparison operators:
178//
179#if 0
180
181bool eval_is_zero(const skeleton_backend& arg);
182int eval_get_sign(const skeleton_backend& arg);
183
184bool eval_eq(const skeleton_backend& a, const skeleton_backend& b);
185bool eval_eq(const skeleton_backend& a, unsigned long long b);
186bool eval_eq(const skeleton_backend& a, unsigned long b);
187bool eval_eq(const skeleton_backend& a, unsigned b);
188bool eval_eq(const skeleton_backend& a, unsigned short b);
189bool eval_eq(const skeleton_backend& a, unsigned char b);
190bool eval_eq(const skeleton_backend& a, long long b);
191bool eval_eq(const skeleton_backend& a, long b);
192bool eval_eq(const skeleton_backend& a, int b);
193bool eval_eq(const skeleton_backend& a, short b);
194bool eval_eq(const skeleton_backend& a, signed char b);
195bool eval_eq(const skeleton_backend& a, char b);
196bool eval_eq(const skeleton_backend& a, long double b);
197bool eval_eq(const skeleton_backend& a, double b);
198bool eval_eq(const skeleton_backend& a, float b);
199
200bool eval_eq(unsigned long long a, const skeleton_backend& b);
201bool eval_eq(unsigned long a, const skeleton_backend& b);
202bool eval_eq(unsigned a, const skeleton_backend& b);
203bool eval_eq(unsigned short a, const skeleton_backend& b);
204bool eval_eq(unsigned char a, const skeleton_backend& b);
205bool eval_eq(long long a, const skeleton_backend& b);
206bool eval_eq(long a, const skeleton_backend& b);
207bool eval_eq(int a, const skeleton_backend& b);
208bool eval_eq(short a, const skeleton_backend& b);
209bool eval_eq(signed char a, const skeleton_backend& b);
210bool eval_eq(char a, const skeleton_backend& b);
211bool eval_eq(long double a, const skeleton_backend& b);
212bool eval_eq(double a, const skeleton_backend& b);
213bool eval_eq(float a, const skeleton_backend& b);
214
215bool eval_lt(const skeleton_backend& a, const skeleton_backend& b);
216bool eval_lt(const skeleton_backend& a, unsigned long long b);
217bool eval_lt(const skeleton_backend& a, unsigned long b);
218bool eval_lt(const skeleton_backend& a, unsigned b);
219bool eval_lt(const skeleton_backend& a, unsigned short b);
220bool eval_lt(const skeleton_backend& a, unsigned char b);
221bool eval_lt(const skeleton_backend& a, long long b);
222bool eval_lt(const skeleton_backend& a, long b);
223bool eval_lt(const skeleton_backend& a, int b);
224bool eval_lt(const skeleton_backend& a, short b);
225bool eval_lt(const skeleton_backend& a, signed char b);
226bool eval_lt(const skeleton_backend& a, char b);
227bool eval_lt(const skeleton_backend& a, long double b);
228bool eval_lt(const skeleton_backend& a, double b);
229bool eval_lt(const skeleton_backend& a, float b);
230
231bool eval_lt(unsigned long long a, const skeleton_backend& b);
232bool eval_lt(unsigned long a, const skeleton_backend& b);
233bool eval_lt(unsigned a, const skeleton_backend& b);
234bool eval_lt(unsigned short a, const skeleton_backend& b);
235bool eval_lt(unsigned char a, const skeleton_backend& b);
236bool eval_lt(long long a, const skeleton_backend& b);
237bool eval_lt(long a, const skeleton_backend& b);
238bool eval_lt(int a, const skeleton_backend& b);
239bool eval_lt(short a, const skeleton_backend& b);
240bool eval_lt(signed char a, const skeleton_backend& b);
241bool eval_lt(char a, const skeleton_backend& b);
242bool eval_lt(long double a, const skeleton_backend& b);
243bool eval_lt(double a, const skeleton_backend& b);
244bool eval_lt(float a, const skeleton_backend& b);
245
246bool eval_gt(const skeleton_backend& a, const skeleton_backend& b);
247bool eval_gt(const skeleton_backend& a, unsigned long long b);
248bool eval_gt(const skeleton_backend& a, unsigned long b);
249bool eval_gt(const skeleton_backend& a, unsigned b);
250bool eval_gt(const skeleton_backend& a, unsigned short b);
251bool eval_gt(const skeleton_backend& a, unsigned char b);
252bool eval_gt(const skeleton_backend& a, long long b);
253bool eval_gt(const skeleton_backend& a, long b);
254bool eval_gt(const skeleton_backend& a, int b);
255bool eval_gt(const skeleton_backend& a, short b);
256bool eval_gt(const skeleton_backend& a, signed char b);
257bool eval_gt(const skeleton_backend& a, char b);
258bool eval_gt(const skeleton_backend& a, long double b);
259bool eval_gt(const skeleton_backend& a, double b);
260bool eval_gt(const skeleton_backend& a, float b);
261
262bool eval_gt(unsigned long long a, const skeleton_backend& b);
263bool eval_gt(unsigned long a, const skeleton_backend& b);
264bool eval_gt(unsigned a, const skeleton_backend& b);
265bool eval_gt(unsigned short a, const skeleton_backend& b);
266bool eval_gt(unsigned char a, const skeleton_backend& b);
267bool eval_gt(long long a, const skeleton_backend& b);
268bool eval_gt(long a, const skeleton_backend& b);
269bool eval_gt(int a, const skeleton_backend& b);
270bool eval_gt(short a, const skeleton_backend& b);
271bool eval_gt(signed char a, const skeleton_backend& b);
272bool eval_gt(char a, const skeleton_backend& b);
273bool eval_gt(long double a, const skeleton_backend& b);
274bool eval_gt(double a, const skeleton_backend& b);
275bool eval_gt(float a, const skeleton_backend& b);
276#endif
277
278//
279// Arithmetic operations, starting with addition:
280//
281#if 0
282void eval_add(skeleton_backend& result, unsigned long long arg);
283void eval_add(skeleton_backend& result, unsigned long arg);
284void eval_add(skeleton_backend& result, unsigned arg);
285void eval_add(skeleton_backend& result, unsigned short arg);
286void eval_add(skeleton_backend& result, unsigned char arg);
287void eval_add(skeleton_backend& result, char arg);
288void eval_add(skeleton_backend& result, long long arg);
289void eval_add(skeleton_backend& result, long arg);
290void eval_add(skeleton_backend& result, int arg);
291void eval_add(skeleton_backend& result, short arg);
292void eval_add(skeleton_backend& result, signed char arg);
293void eval_add(skeleton_backend& result, long double arg);
294void eval_add(skeleton_backend& result, double arg);
295void eval_add(skeleton_backend& result, float arg);
296
297void eval_add(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
298void eval_add(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
299void eval_add(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
300void eval_add(skeleton_backend& result, const skeleton_backend& a, unsigned b);
301void eval_add(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
302void eval_add(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
303void eval_add(skeleton_backend& result, const skeleton_backend& a, long long b);
304void eval_add(skeleton_backend& result, const skeleton_backend& a, long b);
305void eval_add(skeleton_backend& result, const skeleton_backend& a, int b);
306void eval_add(skeleton_backend& result, const skeleton_backend& a, short b);
307void eval_add(skeleton_backend& result, const skeleton_backend& a, signed char b);
308void eval_add(skeleton_backend& result, const skeleton_backend& a, char b);
309void eval_add(skeleton_backend& result, const skeleton_backend& a, long double b);
310void eval_add(skeleton_backend& result, const skeleton_backend& a, double b);
311void eval_add(skeleton_backend& result, const skeleton_backend& a, float b);
312
313void eval_add(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
314void eval_add(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
315void eval_add(skeleton_backend& result, unsigned b, const skeleton_backend& a);
316void eval_add(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
317void eval_add(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
318void eval_add(skeleton_backend& result, long long b, const skeleton_backend& a);
319void eval_add(skeleton_backend& result, long b, const skeleton_backend& a);
320void eval_add(skeleton_backend& result, int b, const skeleton_backend& a);
321void eval_add(skeleton_backend& result, short b, const skeleton_backend& a);
322void eval_add(skeleton_backend& result, signed char b, const skeleton_backend& a);
323void eval_add(skeleton_backend& result, char b, const skeleton_backend& a);
324void eval_add(skeleton_backend& result, long double b, const skeleton_backend& a);
325void eval_add(skeleton_backend& result, double b, const skeleton_backend& a);
326void eval_add(skeleton_backend& result, float b, const skeleton_backend& a);
327#endif
328
329//
330// Subtraction:
331//
332#if 0
333void eval_subtract(skeleton_backend& result, unsigned long long arg);
334void eval_subtract(skeleton_backend& result, unsigned long arg);
335void eval_subtract(skeleton_backend& result, unsigned arg);
336void eval_subtract(skeleton_backend& result, unsigned short arg);
337void eval_subtract(skeleton_backend& result, unsigned char arg);
338void eval_subtract(skeleton_backend& result, char arg);
339void eval_subtract(skeleton_backend& result, long long arg);
340void eval_subtract(skeleton_backend& result, long arg);
341void eval_subtract(skeleton_backend& result, int arg);
342void eval_subtract(skeleton_backend& result, short arg);
343void eval_subtract(skeleton_backend& result, signed char arg);
344void eval_subtract(skeleton_backend& result, long double arg);
345void eval_subtract(skeleton_backend& result, double arg);
346void eval_subtract(skeleton_backend& result, float arg);
347
348void eval_subtract(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
349void eval_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
350void eval_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
351void eval_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned b);
352void eval_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
353void eval_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
354void eval_subtract(skeleton_backend& result, const skeleton_backend& a, long long b);
355void eval_subtract(skeleton_backend& result, const skeleton_backend& a, long b);
356void eval_subtract(skeleton_backend& result, const skeleton_backend& a, int b);
357void eval_subtract(skeleton_backend& result, const skeleton_backend& a, short b);
358void eval_subtract(skeleton_backend& result, const skeleton_backend& a, signed char b);
359void eval_subtract(skeleton_backend& result, const skeleton_backend& a, char b);
360void eval_subtract(skeleton_backend& result, const skeleton_backend& a, long double b);
361void eval_subtract(skeleton_backend& result, const skeleton_backend& a, double b);
362void eval_subtract(skeleton_backend& result, const skeleton_backend& a, float b);
363
364void eval_subtract(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
365void eval_subtract(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
366void eval_subtract(skeleton_backend& result, unsigned b, const skeleton_backend& a);
367void eval_subtract(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
368void eval_subtract(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
369void eval_subtract(skeleton_backend& result, long long b, const skeleton_backend& a);
370void eval_subtract(skeleton_backend& result, long b, const skeleton_backend& a);
371void eval_subtract(skeleton_backend& result, int b, const skeleton_backend& a);
372void eval_subtract(skeleton_backend& result, short b, const skeleton_backend& a);
373void eval_subtract(skeleton_backend& result, signed char b, const skeleton_backend& a);
374void eval_subtract(skeleton_backend& result, char b, const skeleton_backend& a);
375void eval_subtract(skeleton_backend& result, long double b, const skeleton_backend& a);
376void eval_subtract(skeleton_backend& result, double b, const skeleton_backend& a);
377void eval_subtract(skeleton_backend& result, float b, const skeleton_backend& a);
378#endif
379
380//
381// Multiplication:
382//
383#if 0
384void eval_multiply(skeleton_backend& result, unsigned long long arg);
385void eval_multiply(skeleton_backend& result, unsigned long arg);
386void eval_multiply(skeleton_backend& result, unsigned arg);
387void eval_multiply(skeleton_backend& result, unsigned short arg);
388void eval_multiply(skeleton_backend& result, unsigned char arg);
389void eval_multiply(skeleton_backend& result, char arg);
390void eval_multiply(skeleton_backend& result, long long arg);
391void eval_multiply(skeleton_backend& result, long arg);
392void eval_multiply(skeleton_backend& result, int arg);
393void eval_multiply(skeleton_backend& result, short arg);
394void eval_multiply(skeleton_backend& result, signed char arg);
395void eval_multiply(skeleton_backend& result, long double arg);
396void eval_multiply(skeleton_backend& result, double arg);
397void eval_multiply(skeleton_backend& result, float arg);
398
399void eval_multiply(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
400void eval_multiply(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
401void eval_multiply(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
402void eval_multiply(skeleton_backend& result, const skeleton_backend& a, unsigned b);
403void eval_multiply(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
404void eval_multiply(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
405void eval_multiply(skeleton_backend& result, const skeleton_backend& a, long long b);
406void eval_multiply(skeleton_backend& result, const skeleton_backend& a, long b);
407void eval_multiply(skeleton_backend& result, const skeleton_backend& a, int b);
408void eval_multiply(skeleton_backend& result, const skeleton_backend& a, short b);
409void eval_multiply(skeleton_backend& result, const skeleton_backend& a, signed char b);
410void eval_multiply(skeleton_backend& result, const skeleton_backend& a, char b);
411void eval_multiply(skeleton_backend& result, const skeleton_backend& a, long double b);
412void eval_multiply(skeleton_backend& result, const skeleton_backend& a, double b);
413void eval_multiply(skeleton_backend& result, const skeleton_backend& a, float b);
414
415void eval_multiply(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
416void eval_multiply(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
417void eval_multiply(skeleton_backend& result, unsigned b, const skeleton_backend& a);
418void eval_multiply(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
419void eval_multiply(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
420void eval_multiply(skeleton_backend& result, long long b, const skeleton_backend& a);
421void eval_multiply(skeleton_backend& result, long b, const skeleton_backend& a);
422void eval_multiply(skeleton_backend& result, int b, const skeleton_backend& a);
423void eval_multiply(skeleton_backend& result, short b, const skeleton_backend& a);
424void eval_multiply(skeleton_backend& result, signed char b, const skeleton_backend& a);
425void eval_multiply(skeleton_backend& result, char b, const skeleton_backend& a);
426void eval_multiply(skeleton_backend& result, long double b, const skeleton_backend& a);
427void eval_multiply(skeleton_backend& result, double b, const skeleton_backend& a);
428void eval_multiply(skeleton_backend& result, float b, const skeleton_backend& a);
429#endif
430
431//
432// Division:
433//
434#if 0
435void eval_divide(skeleton_backend& result, unsigned long long arg);
436void eval_divide(skeleton_backend& result, unsigned long arg);
437void eval_divide(skeleton_backend& result, unsigned arg);
438void eval_divide(skeleton_backend& result, unsigned short arg);
439void eval_divide(skeleton_backend& result, unsigned char arg);
440void eval_divide(skeleton_backend& result, char arg);
441void eval_divide(skeleton_backend& result, long long arg);
442void eval_divide(skeleton_backend& result, long arg);
443void eval_divide(skeleton_backend& result, int arg);
444void eval_divide(skeleton_backend& result, short arg);
445void eval_divide(skeleton_backend& result, signed char arg);
446void eval_divide(skeleton_backend& result, long double arg);
447void eval_divide(skeleton_backend& result, double arg);
448void eval_divide(skeleton_backend& result, float arg);
449
450void eval_divide(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
451void eval_divide(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
452void eval_divide(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
453void eval_divide(skeleton_backend& result, const skeleton_backend& a, unsigned b);
454void eval_divide(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
455void eval_divide(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
456void eval_divide(skeleton_backend& result, const skeleton_backend& a, long long b);
457void eval_divide(skeleton_backend& result, const skeleton_backend& a, long b);
458void eval_divide(skeleton_backend& result, const skeleton_backend& a, int b);
459void eval_divide(skeleton_backend& result, const skeleton_backend& a, short b);
460void eval_divide(skeleton_backend& result, const skeleton_backend& a, signed char b);
461void eval_divide(skeleton_backend& result, const skeleton_backend& a, char b);
462void eval_divide(skeleton_backend& result, const skeleton_backend& a, long double b);
463void eval_divide(skeleton_backend& result, const skeleton_backend& a, double b);
464void eval_divide(skeleton_backend& result, const skeleton_backend& a, float b);
465
466void eval_divide(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
467void eval_divide(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
468void eval_divide(skeleton_backend& result, unsigned b, const skeleton_backend& a);
469void eval_divide(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
470void eval_divide(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
471void eval_divide(skeleton_backend& result, long long b, const skeleton_backend& a);
472void eval_divide(skeleton_backend& result, long b, const skeleton_backend& a);
473void eval_divide(skeleton_backend& result, int b, const skeleton_backend& a);
474void eval_divide(skeleton_backend& result, short b, const skeleton_backend& a);
475void eval_divide(skeleton_backend& result, signed char b, const skeleton_backend& a);
476void eval_divide(skeleton_backend& result, char b, const skeleton_backend& a);
477void eval_divide(skeleton_backend& result, long double b, const skeleton_backend& a);
478void eval_divide(skeleton_backend& result, double b, const skeleton_backend& a);
479void eval_divide(skeleton_backend& result, float b, const skeleton_backend& a);
480#endif
481//
482// Multiply and add/subtract as one:
483//
484#if 0
485void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
486void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
487void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
488void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, unsigned b);
489void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
490void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
491void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, long long b);
492void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, long b);
493void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, int b);
494void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, short b);
495void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, signed char b);
496void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, char b);
497void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, long double b);
498void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, double b);
499void eval_multiply_add(skeleton_backend& result, const skeleton_backend& a, float b);
500
501void eval_multiply_add(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
502void eval_multiply_add(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
503void eval_multiply_add(skeleton_backend& result, unsigned b, const skeleton_backend& a);
504void eval_multiply_add(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
505void eval_multiply_add(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
506void eval_multiply_add(skeleton_backend& result, long long b, const skeleton_backend& a);
507void eval_multiply_add(skeleton_backend& result, long b, const skeleton_backend& a);
508void eval_multiply_add(skeleton_backend& result, int b, const skeleton_backend& a);
509void eval_multiply_add(skeleton_backend& result, short b, const skeleton_backend& a);
510void eval_multiply_add(skeleton_backend& result, signed char b, const skeleton_backend& a);
511void eval_multiply_add(skeleton_backend& result, char b, const skeleton_backend& a);
512void eval_multiply_add(skeleton_backend& result, long double b, const skeleton_backend& a);
513void eval_multiply_add(skeleton_backend& result, double b, const skeleton_backend& a);
514void eval_multiply_add(skeleton_backend& result, float b, const skeleton_backend& a);
515
516void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
517void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
518void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
519void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned b);
520void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
521void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
522void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, long long b);
523void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, long b);
524void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, int b);
525void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, short b);
526void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, signed char b);
527void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, char b);
528void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, long double b);
529void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, double b);
530void eval_multiply_subtract(skeleton_backend& result, const skeleton_backend& a, float b);
531
532void eval_multiply_subtract(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
533void eval_multiply_subtract(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
534void eval_multiply_subtract(skeleton_backend& result, unsigned b, const skeleton_backend& a);
535void eval_multiply_subtract(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
536void eval_multiply_subtract(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
537void eval_multiply_subtract(skeleton_backend& result, long long b, const skeleton_backend& a);
538void eval_multiply_subtract(skeleton_backend& result, long b, const skeleton_backend& a);
539void eval_multiply_subtract(skeleton_backend& result, int b, const skeleton_backend& a);
540void eval_multiply_subtract(skeleton_backend& result, short b, const skeleton_backend& a);
541void eval_multiply_subtract(skeleton_backend& result, signed char b, const skeleton_backend& a);
542void eval_multiply_subtract(skeleton_backend& result, char b, const skeleton_backend& a);
543void eval_multiply_subtract(skeleton_backend& result, long double b, const skeleton_backend& a);
544void eval_multiply_subtract(skeleton_backend& result, double b, const skeleton_backend& a);
545void eval_multiply_subtract(skeleton_backend& result, float b, const skeleton_backend& a);
546#endif
547//
548// Increment and decrement:
549//
550//void eval_increment(skeleton_backend& arg);
551//void eval_decrement(skeleton_backend& arg);
552//
553// abs/fabs:
554//
555// void eval_abs(skeleton_backend& result, const skeleton_backend& arg);
556// void eval_fabs(skeleton_backend& result, const skeleton_backend& arg);
557//
558
559
560//
561// Now operations on Integer types, starting with modulus:
562//
563#if 0
564void eval_modulus(skeleton_backend& result, unsigned long long arg);
565void eval_modulus(skeleton_backend& result, unsigned long arg);
566void eval_modulus(skeleton_backend& result, unsigned arg);
567void eval_modulus(skeleton_backend& result, unsigned short arg);
568void eval_modulus(skeleton_backend& result, unsigned char arg);
569void eval_modulus(skeleton_backend& result, char arg);
570void eval_modulus(skeleton_backend& result, long long arg);
571void eval_modulus(skeleton_backend& result, long arg);
572void eval_modulus(skeleton_backend& result, int arg);
573void eval_modulus(skeleton_backend& result, short arg);
574void eval_modulus(skeleton_backend& result, signed char arg);
575void eval_modulus(skeleton_backend& result, long double arg);
576void eval_modulus(skeleton_backend& result, double arg);
577void eval_modulus(skeleton_backend& result, float arg);
578
579void eval_modulus(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
580void eval_modulus(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
581void eval_modulus(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
582void eval_modulus(skeleton_backend& result, const skeleton_backend& a, unsigned b);
583void eval_modulus(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
584void eval_modulus(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
585void eval_modulus(skeleton_backend& result, const skeleton_backend& a, long long b);
586void eval_modulus(skeleton_backend& result, const skeleton_backend& a, long b);
587void eval_modulus(skeleton_backend& result, const skeleton_backend& a, int b);
588void eval_modulus(skeleton_backend& result, const skeleton_backend& a, short b);
589void eval_modulus(skeleton_backend& result, const skeleton_backend& a, signed char b);
590void eval_modulus(skeleton_backend& result, const skeleton_backend& a, char b);
591void eval_modulus(skeleton_backend& result, const skeleton_backend& a, long double b);
592void eval_modulus(skeleton_backend& result, const skeleton_backend& a, double b);
593void eval_modulus(skeleton_backend& result, const skeleton_backend& a, float b);
594
595void eval_modulus(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
596void eval_modulus(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
597void eval_modulus(skeleton_backend& result, unsigned b, const skeleton_backend& a);
598void eval_modulus(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
599void eval_modulus(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
600void eval_modulus(skeleton_backend& result, long long b, const skeleton_backend& a);
601void eval_modulus(skeleton_backend& result, long b, const skeleton_backend& a);
602void eval_modulus(skeleton_backend& result, int b, const skeleton_backend& a);
603void eval_modulus(skeleton_backend& result, short b, const skeleton_backend& a);
604void eval_modulus(skeleton_backend& result, signed char b, const skeleton_backend& a);
605void eval_modulus(skeleton_backend& result, char b, const skeleton_backend& a);
606void eval_modulus(skeleton_backend& result, long double b, const skeleton_backend& a);
607void eval_modulus(skeleton_backend& result, double b, const skeleton_backend& a);
608void eval_modulus(skeleton_backend& result, float b, const skeleton_backend& a);
609#endif
610//
611// bitwise AND:
612//
613#if 0
614void eval_bitwise_and(skeleton_backend& result, unsigned long long arg);
615void eval_bitwise_and(skeleton_backend& result, unsigned long arg);
616void eval_bitwise_and(skeleton_backend& result, unsigned arg);
617void eval_bitwise_and(skeleton_backend& result, unsigned short arg);
618void eval_bitwise_and(skeleton_backend& result, unsigned char arg);
619void eval_bitwise_and(skeleton_backend& result, char arg);
620void eval_bitwise_and(skeleton_backend& result, long long arg);
621void eval_bitwise_and(skeleton_backend& result, long arg);
622void eval_bitwise_and(skeleton_backend& result, int arg);
623void eval_bitwise_and(skeleton_backend& result, short arg);
624void eval_bitwise_and(skeleton_backend& result, signed char arg);
625void eval_bitwise_and(skeleton_backend& result, long double arg);
626void eval_bitwise_and(skeleton_backend& result, double arg);
627void eval_bitwise_and(skeleton_backend& result, float arg);
628
629void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
630void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
631void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
632void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, unsigned b);
633void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
634void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
635void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, long long b);
636void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, long b);
637void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, int b);
638void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, short b);
639void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, signed char b);
640void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, char b);
641void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, long double b);
642void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, double b);
643void eval_bitwise_and(skeleton_backend& result, const skeleton_backend& a, float b);
644
645void eval_bitwise_and(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
646void eval_bitwise_and(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
647void eval_bitwise_and(skeleton_backend& result, unsigned b, const skeleton_backend& a);
648void eval_bitwise_and(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
649void eval_bitwise_and(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
650void eval_bitwise_and(skeleton_backend& result, long long b, const skeleton_backend& a);
651void eval_bitwise_and(skeleton_backend& result, long b, const skeleton_backend& a);
652void eval_bitwise_and(skeleton_backend& result, int b, const skeleton_backend& a);
653void eval_bitwise_and(skeleton_backend& result, short b, const skeleton_backend& a);
654void eval_bitwise_and(skeleton_backend& result, signed char b, const skeleton_backend& a);
655void eval_bitwise_and(skeleton_backend& result, char b, const skeleton_backend& a);
656void eval_bitwise_and(skeleton_backend& result, long double b, const skeleton_backend& a);
657void eval_bitwise_and(skeleton_backend& result, double b, const skeleton_backend& a);
658void eval_bitwise_and(skeleton_backend& result, float b, const skeleton_backend& a);
659#endif
660//
661// bitwise OR:
662//
663#if 0
664void eval_bitwise_or(skeleton_backend& result, unsigned long long arg);
665void eval_bitwise_or(skeleton_backend& result, unsigned long arg);
666void eval_bitwise_or(skeleton_backend& result, unsigned arg);
667void eval_bitwise_or(skeleton_backend& result, unsigned short arg);
668void eval_bitwise_or(skeleton_backend& result, unsigned char arg);
669void eval_bitwise_or(skeleton_backend& result, char arg);
670void eval_bitwise_or(skeleton_backend& result, long long arg);
671void eval_bitwise_or(skeleton_backend& result, long arg);
672void eval_bitwise_or(skeleton_backend& result, int arg);
673void eval_bitwise_or(skeleton_backend& result, short arg);
674void eval_bitwise_or(skeleton_backend& result, signed char arg);
675void eval_bitwise_or(skeleton_backend& result, long double arg);
676void eval_bitwise_or(skeleton_backend& result, double arg);
677void eval_bitwise_or(skeleton_backend& result, float arg);
678
679void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
680void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
681void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
682void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, unsigned b);
683void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
684void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
685void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, long long b);
686void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, long b);
687void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, int b);
688void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, short b);
689void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, signed char b);
690void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, char b);
691void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, long double b);
692void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, double b);
693void eval_bitwise_or(skeleton_backend& result, const skeleton_backend& a, float b);
694
695void eval_bitwise_or(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
696void eval_bitwise_or(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
697void eval_bitwise_or(skeleton_backend& result, unsigned b, const skeleton_backend& a);
698void eval_bitwise_or(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
699void eval_bitwise_or(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
700void eval_bitwise_or(skeleton_backend& result, long long b, const skeleton_backend& a);
701void eval_bitwise_or(skeleton_backend& result, long b, const skeleton_backend& a);
702void eval_bitwise_or(skeleton_backend& result, int b, const skeleton_backend& a);
703void eval_bitwise_or(skeleton_backend& result, short b, const skeleton_backend& a);
704void eval_bitwise_or(skeleton_backend& result, signed char b, const skeleton_backend& a);
705void eval_bitwise_or(skeleton_backend& result, char b, const skeleton_backend& a);
706void eval_bitwise_or(skeleton_backend& result, long double b, const skeleton_backend& a);
707void eval_bitwise_or(skeleton_backend& result, double b, const skeleton_backend& a);
708void eval_bitwise_or(skeleton_backend& result, float b, const skeleton_backend& a);
709#endif
710//
711// bitwise XOR:
712//
713#if 0
714void eval_bitwise_xor(skeleton_backend& result, unsigned long long arg);
715void eval_bitwise_xor(skeleton_backend& result, unsigned long arg);
716void eval_bitwise_xor(skeleton_backend& result, unsigned arg);
717void eval_bitwise_xor(skeleton_backend& result, unsigned short arg);
718void eval_bitwise_xor(skeleton_backend& result, unsigned char arg);
719void eval_bitwise_xor(skeleton_backend& result, char arg);
720void eval_bitwise_xor(skeleton_backend& result, long long arg);
721void eval_bitwise_xor(skeleton_backend& result, long arg);
722void eval_bitwise_xor(skeleton_backend& result, int arg);
723void eval_bitwise_xor(skeleton_backend& result, short arg);
724void eval_bitwise_xor(skeleton_backend& result, signed char arg);
725void eval_bitwise_xor(skeleton_backend& result, long double arg);
726void eval_bitwise_xor(skeleton_backend& result, double arg);
727void eval_bitwise_xor(skeleton_backend& result, float arg);
728
729void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
730void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
731void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
732void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, unsigned b);
733void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
734void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
735void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, long long b);
736void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, long b);
737void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, int b);
738void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, short b);
739void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, signed char b);
740void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, char b);
741void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, long double b);
742void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, double b);
743void eval_bitwise_xor(skeleton_backend& result, const skeleton_backend& a, float b);
744
745void eval_bitwise_xor(skeleton_backend& result, unsigned long long b, const skeleton_backend& a);
746void eval_bitwise_xor(skeleton_backend& result, unsigned long b, const skeleton_backend& a);
747void eval_bitwise_xor(skeleton_backend& result, unsigned b, const skeleton_backend& a);
748void eval_bitwise_xor(skeleton_backend& result, unsigned short b, const skeleton_backend& a);
749void eval_bitwise_xor(skeleton_backend& result, unsigned char b, const skeleton_backend& a);
750void eval_bitwise_xor(skeleton_backend& result, long long b, const skeleton_backend& a);
751void eval_bitwise_xor(skeleton_backend& result, long b, const skeleton_backend& a);
752void eval_bitwise_xor(skeleton_backend& result, int b, const skeleton_backend& a);
753void eval_bitwise_xor(skeleton_backend& result, short b, const skeleton_backend& a);
754void eval_bitwise_xor(skeleton_backend& result, signed char b, const skeleton_backend& a);
755void eval_bitwise_xor(skeleton_backend& result, char b, const skeleton_backend& a);
756void eval_bitwise_xor(skeleton_backend& result, long double b, const skeleton_backend& a);
757void eval_bitwise_xor(skeleton_backend& result, double b, const skeleton_backend& a);
758void eval_bitwise_xor(skeleton_backend& result, float b, const skeleton_backend& a);
759#endif
760//
761// left and right shift:
762//
763//void eval_left_shift(skeleton_backend& result, const skeleton_backend& arg, std::size_t shift);
764//void eval_right_shift(skeleton_backend& result, const skeleton_backend& arg, std::size_t shift);
765//
766// Quotient and remainder:
767//
768// void eval_qr(const skeleton_backend& numerator, const skeleton_backend& denominator, skeleton_backend& quotient, skeleteon_backend& remainder);
769//
770// Misc integer ops:
771//
772// unsigned long long eval_integer_modulus(const skeleton_backend& arg, unsigned long long modulus);
773// unsigned long eval_integer_modulus(const skeleton_backend& arg, unsigned long modulus);
774// unsigned eval_integer_modulus(const skeleton_backend& arg, unsigned modulus);
775// unsigned short eval_integer_modulus(const skeleton_backend& arg, unsigned short modulus);
776// unsigned char eval_integer_modulus(const skeleton_backend& arg, unsigned char modulus);
777//
778// std::size_t eval_lsb(const skeleton_backend& arg);
779// std::size_t eval_msb(const skeleton_backend& arg);
780// bool eval_bit_test(const skeleton_backend& arg, std::size_t bit);
781// void eval_bit_set(const skeleton_backend& arg, std::size_t bit);
782// void eval_bit_unset(const skeleton_backend& arg, std::size_t bit);
783// void eval_bit_flip(const skeleton_backend& arg, std::size_t bit);
784//
785// GCD/LCD:
786//
787#if 0
788void eval_gcd(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
789void eval_gcd(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
790void eval_gcd(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
791void eval_gcd(skeleton_backend& result, const skeleton_backend& a, unsigned b);
792void eval_gcd(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
793void eval_gcd(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
794void eval_gcd(skeleton_backend& result, const skeleton_backend& a, long long b);
795void eval_gcd(skeleton_backend& result, const skeleton_backend& a, long b);
796void eval_gcd(skeleton_backend& result, const skeleton_backend& a, int b);
797void eval_gcd(skeleton_backend& result, const skeleton_backend& a, short b);
798void eval_gcd(skeleton_backend& result, const skeleton_backend& a, signed char b);
799void eval_gcd(skeleton_backend& result, const skeleton_backend& a, char b);
800void eval_gcd(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
801void eval_gcd(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
802void eval_gcd(skeleton_backend& result, unsigned a, const skeleton_backend& b);
803void eval_gcd(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
804void eval_gcd(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
805void eval_gcd(skeleton_backend& result, long long a, const skeleton_backend& b);
806void eval_gcd(skeleton_backend& result, long a, const skeleton_backend& b);
807void eval_gcd(skeleton_backend& result, int a, const skeleton_backend& b);
808void eval_gcd(skeleton_backend& result, short a, const skeleton_backend& b);
809void eval_gcd(skeleton_backend& result, signed char a, const skeleton_backend& b);
810void eval_gcd(skeleton_backend& result, char a, const skeleton_backend& b);
811
812void eval_lcm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
813void eval_lcm(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
814void eval_lcm(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
815void eval_lcm(skeleton_backend& result, const skeleton_backend& a, unsigned b);
816void eval_lcm(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
817void eval_lcm(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
818void eval_lcm(skeleton_backend& result, const skeleton_backend& a, long long b);
819void eval_lcm(skeleton_backend& result, const skeleton_backend& a, long b);
820void eval_lcm(skeleton_backend& result, const skeleton_backend& a, int b);
821void eval_lcm(skeleton_backend& result, const skeleton_backend& a, short b);
822void eval_lcm(skeleton_backend& result, const skeleton_backend& a, signed char b);
823void eval_lcm(skeleton_backend& result, const skeleton_backend& a, char b);
824void eval_lcm(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
825void eval_lcm(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
826void eval_lcm(skeleton_backend& result, unsigned a, const skeleton_backend& b);
827void eval_lcm(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
828void eval_lcm(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
829void eval_lcm(skeleton_backend& result, long long a, const skeleton_backend& b);
830void eval_lcm(skeleton_backend& result, long a, const skeleton_backend& b);
831void eval_lcm(skeleton_backend& result, int a, const skeleton_backend& b);
832void eval_lcm(skeleton_backend& result, short a, const skeleton_backend& b);
833void eval_lcm(skeleton_backend& result, signed char a, const skeleton_backend& b);
834void eval_lcm(skeleton_backend& result, char a, const skeleton_backend& b);
835#endif
836//
837// Modular exponentiation:
838//
839#if 0
840void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, const skeleton_backend& c); // a^b % c
841void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, unsigned long long c);
842void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, unsigned long c);
843void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, unsigned c);
844void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, unsigned short c);
845void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, unsigned char c);
846void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, long long c);
847void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, long c);
848void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, int c);
849void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, short c);
850void eval_powm(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, signed char c);
851
852void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned long long b, const skeleton_backend& c);
853void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned long b, const skeleton_backend& c);
854void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned b, const skeleton_backend& c);
855void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned short b, const skeleton_backend& c);
856void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned char b, const skeleton_backend& c);
857void eval_powm(skeleton_backend& result, const skeleton_backend& a, long long b, const skeleton_backend& c);
858void eval_powm(skeleton_backend& result, const skeleton_backend& a, long b, const skeleton_backend& c);
859void eval_powm(skeleton_backend& result, const skeleton_backend& a, int b, const skeleton_backend& c);
860void eval_powm(skeleton_backend& result, const skeleton_backend& a, short b, const skeleton_backend& c);
861void eval_powm(skeleton_backend& result, const skeleton_backend& a, signed char b, const skeleton_backend& c);
862
863void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned long long b, unsigned long long c);
864void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned long b, unsigned long c);
865void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned b, unsigned c);
866void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned short b, unsigned short c);
867void eval_powm(skeleton_backend& result, const skeleton_backend& a, unsigned char b, unsigned char c);
868void eval_powm(skeleton_backend& result, const skeleton_backend& a, long long b, long long c);
869void eval_powm(skeleton_backend& result, const skeleton_backend& a, long b, long c);
870void eval_powm(skeleton_backend& result, const skeleton_backend& a, int b, int c);
871void eval_powm(skeleton_backend& result, const skeleton_backend& a, short b, short c);
872void eval_powm(skeleton_backend& result, const skeleton_backend& a, signed char b, signed char c);
873#endif
874//
875// Integer sqrt:
876//
877// void eval_integer_sqrt(skeleton_backend& result, const skeleton_backend& arg, skeleton_backend& remainder);
878
879/*********************************************************************************************
880
881 FLOATING POINT FUNCTIONS
882
883***********************************************************************************************/
884
885#if 0
886
887int eval_fpclassify(const skeleton_backend& arg);
888void eval_trunc(skeleton_backend& result, const skeleton_backend& arg);
889void eval_round(skeleton_backend& result, const skeleton_backend& arg);
890void eval_exp(skeleton_backend& result, const skeleton_backend& arg);
891void eval_exp2(skeleton_backend& result, const skeleton_backend& arg);
892void eval_log(skeleton_backend& result, const skeleton_backend& arg);
893void eval_log10(skeleton_backend& result, const skeleton_backend& arg);
894void eval_sin(skeleton_backend& result, const skeleton_backend& arg);
895void eval_cos(skeleton_backend& result, const skeleton_backend& arg);
896void eval_tan(skeleton_backend& result, const skeleton_backend& arg);
897void eval_asin(skeleton_backend& result, const skeleton_backend& arg);
898void eval_acos(skeleton_backend& result, const skeleton_backend& arg);
899void eval_atan(skeleton_backend& result, const skeleton_backend& arg);
900void eval_sinh(skeleton_backend& result, const skeleton_backend& arg);
901void eval_cosh(skeleton_backend& result, const skeleton_backend& arg);
902void eval_tanh(skeleton_backend& result, const skeleton_backend& arg);
903void eval_asinh(skeleton_backend& result, const skeleton_backend& arg);
904void eval_acosh(skeleton_backend& result, const skeleton_backend& arg);
905void eval_atanh(skeleton_backend& result, const skeleton_backend& arg);
906void eval_fmod(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
907void eval_modf(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
908void eval_pow(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
909void eval_atan2(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
910void eval_scalbn(skeleton_backend& result, const skeleton_backend& arg, skeleton_backend::exponent_type e);
911void eval_scalbln(skeleton_backend& result, const skeleton_backend& arg, skeleton_backend::exponent_type e);
912skeleton_type::exponent_type eval_ilogb(const skeleton_backend& arg);
913
914void eval_remquo(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b, int* p_n);
915void eval_remquo(skeleton_backend& result, const skeleton_backend& a, unsigned long long b, int* p_n);
916void eval_remquo(skeleton_backend& result, const skeleton_backend& a, unsigned long b, int* p_n);
917void eval_remquo(skeleton_backend& result, const skeleton_backend& a, unsigned b, int* p_n);
918void eval_remquo(skeleton_backend& result, const skeleton_backend& a, unsigned short b, int* p_n);
919void eval_remquo(skeleton_backend& result, const skeleton_backend& a, unsigned char b, int* p_n);
920void eval_remquo(skeleton_backend& result, const skeleton_backend& a, long long b, int* p_n);
921void eval_remquo(skeleton_backend& result, const skeleton_backend& a, long b, int* p_n);
922void eval_remquo(skeleton_backend& result, const skeleton_backend& a, int b, int* p_n);
923void eval_remquo(skeleton_backend& result, const skeleton_backend& a, short b, int* p_n);
924void eval_remquo(skeleton_backend& result, const skeleton_backend& a, signed char b, int* p_n);
925void eval_remquo(skeleton_backend& result, const skeleton_backend& a, long double b, int* p_n);
926void eval_remquo(skeleton_backend& result, const skeleton_backend& a, double b, int* p_n);
927void eval_remquo(skeleton_backend& result, const skeleton_backend& a, float b, int* p_n);
928void eval_remquo(skeleton_backend& result, unsigned long long a, const skeleton_backend& b, int* p_n);
929void eval_remquo(skeleton_backend& result, unsigned long a, const skeleton_backend& b, int* p_n);
930void eval_remquo(skeleton_backend& result, unsigned a, const skeleton_backend& b, int* p_n);
931void eval_remquo(skeleton_backend& result, unsigned short a, const skeleton_backend& b, int* p_n);
932void eval_remquo(skeleton_backend& result, unsigned char a, const skeleton_backend& b, int* p_n);
933void eval_remquo(skeleton_backend& result, long long a, const skeleton_backend& b, int* p_n);
934void eval_remquo(skeleton_backend& result, long a, const skeleton_backend& b, int* p_n);
935void eval_remquo(skeleton_backend& result, int a, const skeleton_backend& b, int* p_n);
936void eval_remquo(skeleton_backend& result, short a, const skeleton_backend& b, int* p_n);
937void eval_remquo(skeleton_backend& result, signed char a, const skeleton_backend& b, int* p_n);
938
939void eval_remainder(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
940void eval_remainder(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
941void eval_remainder(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
942void eval_remainder(skeleton_backend& result, const skeleton_backend& a, unsigned b);
943void eval_remainder(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
944void eval_remainder(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
945void eval_remainder(skeleton_backend& result, const skeleton_backend& a, long long b);
946void eval_remainder(skeleton_backend& result, const skeleton_backend& a, long b);
947void eval_remainder(skeleton_backend& result, const skeleton_backend& a, int b);
948void eval_remainder(skeleton_backend& result, const skeleton_backend& a, short b);
949void eval_remainder(skeleton_backend& result, const skeleton_backend& a, signed char b);
950void eval_remainder(skeleton_backend& result, const skeleton_backend& a, long double b);
951void eval_remainder(skeleton_backend& result, const skeleton_backend& a, double b);
952void eval_remainder(skeleton_backend& result, const skeleton_backend& a, float b);
953void eval_remainder(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
954void eval_remainder(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
955void eval_remainder(skeleton_backend& result, unsigned a, const skeleton_backend& b);
956void eval_remainder(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
957void eval_remainder(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
958void eval_remainder(skeleton_backend& result, long long a, const skeleton_backend& b);
959void eval_remainder(skeleton_backend& result, long a, const skeleton_backend& b);
960void eval_remainder(skeleton_backend& result, int a, const skeleton_backend& b);
961void eval_remainder(skeleton_backend& result, short a, const skeleton_backend& b);
962void eval_remainder(skeleton_backend& result, signed char a, const skeleton_backend& b);
963
964void eval_fdim(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
965void eval_fdim(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
966void eval_fdim(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
967void eval_fdim(skeleton_backend& result, const skeleton_backend& a, unsigned b);
968void eval_fdim(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
969void eval_fdim(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
970void eval_fdim(skeleton_backend& result, const skeleton_backend& a, long long b);
971void eval_fdim(skeleton_backend& result, const skeleton_backend& a, long b);
972void eval_fdim(skeleton_backend& result, const skeleton_backend& a, int b);
973void eval_fdim(skeleton_backend& result, const skeleton_backend& a, short b);
974void eval_fdim(skeleton_backend& result, const skeleton_backend& a, signed char b);
975void eval_fdim(skeleton_backend& result, const skeleton_backend& a, long double b);
976void eval_fdim(skeleton_backend& result, const skeleton_backend& a, double b);
977void eval_fdim(skeleton_backend& result, const skeleton_backend& a, float b);
978void eval_fdim(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
979void eval_fdim(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
980void eval_fdim(skeleton_backend& result, unsigned a, const skeleton_backend& b);
981void eval_fdim(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
982void eval_fdim(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
983void eval_fdim(skeleton_backend& result, long long a, const skeleton_backend& b);
984void eval_fdim(skeleton_backend& result, long a, const skeleton_backend& b);
985void eval_fdim(skeleton_backend& result, int a, const skeleton_backend& b);
986void eval_fdim(skeleton_backend& result, short a, const skeleton_backend& b);
987void eval_fdim(skeleton_backend& result, signed char a, const skeleton_backend& b);
988
989void eval_fmax(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
990void eval_fmax(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
991void eval_fmax(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
992void eval_fmax(skeleton_backend& result, const skeleton_backend& a, unsigned b);
993void eval_fmax(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
994void eval_fmax(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
995void eval_fmax(skeleton_backend& result, const skeleton_backend& a, long long b);
996void eval_fmax(skeleton_backend& result, const skeleton_backend& a, long b);
997void eval_fmax(skeleton_backend& result, const skeleton_backend& a, int b);
998void eval_fmax(skeleton_backend& result, const skeleton_backend& a, short b);
999void eval_fmax(skeleton_backend& result, const skeleton_backend& a, signed char b);
1000void eval_fmax(skeleton_backend& result, const skeleton_backend& a, long double b);
1001void eval_fmax(skeleton_backend& result, const skeleton_backend& a, double b);
1002void eval_fmax(skeleton_backend& result, const skeleton_backend& a, float b);
1003void eval_fmax(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
1004void eval_fmax(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
1005void eval_fmax(skeleton_backend& result, unsigned a, const skeleton_backend& b);
1006void eval_fmax(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
1007void eval_fmax(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
1008void eval_fmax(skeleton_backend& result, long long a, const skeleton_backend& b);
1009void eval_fmax(skeleton_backend& result, long a, const skeleton_backend& b);
1010void eval_fmax(skeleton_backend& result, int a, const skeleton_backend& b);
1011void eval_fmax(skeleton_backend& result, short a, const skeleton_backend& b);
1012void eval_fmax(skeleton_backend& result, signed char a, const skeleton_backend& b);
1013
1014void eval_fmin(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
1015void eval_fmin(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
1016void eval_fmin(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
1017void eval_fmin(skeleton_backend& result, const skeleton_backend& a, unsigned b);
1018void eval_fmin(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
1019void eval_fmin(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
1020void eval_fmin(skeleton_backend& result, const skeleton_backend& a, long long b);
1021void eval_fmin(skeleton_backend& result, const skeleton_backend& a, long b);
1022void eval_fmin(skeleton_backend& result, const skeleton_backend& a, int b);
1023void eval_fmin(skeleton_backend& result, const skeleton_backend& a, short b);
1024void eval_fmin(skeleton_backend& result, const skeleton_backend& a, signed char b);
1025void eval_fmin(skeleton_backend& result, const skeleton_backend& a, long double b);
1026void eval_fmin(skeleton_backend& result, const skeleton_backend& a, double b);
1027void eval_fmin(skeleton_backend& result, const skeleton_backend& a, float b);
1028void eval_fmin(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
1029void eval_fmin(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
1030void eval_fmin(skeleton_backend& result, unsigned a, const skeleton_backend& b);
1031void eval_fmin(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
1032void eval_fmin(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
1033void eval_fmin(skeleton_backend& result, long long a, const skeleton_backend& b);
1034void eval_fmin(skeleton_backend& result, long a, const skeleton_backend& b);
1035void eval_fmin(skeleton_backend& result, int a, const skeleton_backend& b);
1036void eval_fmin(skeleton_backend& result, short a, const skeleton_backend& b);
1037void eval_fmin(skeleton_backend& result, signed char a, const skeleton_backend& b);
1038
1039void eval_hypot(skeleton_backend& result, const skeleton_backend& a, const skeleton_backend& b);
1040void eval_hypot(skeleton_backend& result, const skeleton_backend& a, unsigned long long b);
1041void eval_hypot(skeleton_backend& result, const skeleton_backend& a, unsigned long b);
1042void eval_hypot(skeleton_backend& result, const skeleton_backend& a, unsigned b);
1043void eval_hypot(skeleton_backend& result, const skeleton_backend& a, unsigned short b);
1044void eval_hypot(skeleton_backend& result, const skeleton_backend& a, unsigned char b);
1045void eval_hypot(skeleton_backend& result, const skeleton_backend& a, long long b);
1046void eval_hypot(skeleton_backend& result, const skeleton_backend& a, long b);
1047void eval_hypot(skeleton_backend& result, const skeleton_backend& a, int b);
1048void eval_hypot(skeleton_backend& result, const skeleton_backend& a, short b);
1049void eval_hypot(skeleton_backend& result, const skeleton_backend& a, signed char b);
1050void eval_hypot(skeleton_backend& result, const skeleton_backend& a, long double b);
1051void eval_hypot(skeleton_backend& result, const skeleton_backend& a, double b);
1052void eval_hypot(skeleton_backend& result, const skeleton_backend& a, float b);
1053void eval_hypot(skeleton_backend& result, unsigned long long a, const skeleton_backend& b);
1054void eval_hypot(skeleton_backend& result, unsigned long a, const skeleton_backend& b);
1055void eval_hypot(skeleton_backend& result, unsigned a, const skeleton_backend& b);
1056void eval_hypot(skeleton_backend& result, unsigned short a, const skeleton_backend& b);
1057void eval_hypot(skeleton_backend& result, unsigned char a, const skeleton_backend& b);
1058void eval_hypot(skeleton_backend& result, long long a, const skeleton_backend& b);
1059void eval_hypot(skeleton_backend& result, long a, const skeleton_backend& b);
1060void eval_hypot(skeleton_backend& result, int a, const skeleton_backend& b);
1061void eval_hypot(skeleton_backend& result, short a, const skeleton_backend& b);
1062void eval_hypot(skeleton_backend& result, signed char a, const skeleton_backend& b);
1063
1064void eval_logb(skeleton_backend& result, const skeleton_backend& arg);
1065void eval_nearbtint(skeleton_backend& result, const skeleton_backend& arg);
1066void eval_rint(skeleton_backend& result, const skeleton_backend& arg);
1067void eval_log2(skeleton_backend& result, const skeleton_backend& arg);
1068#endif
1069
1070
1071} // namespace backends
1072
1073//
1074// Import the backend into this namespace:
1075//
1076using boost::multiprecision::backends::skeleton_backend;
1077//
1078// Typedef whatever number's make use of this backend:
1079//
1080typedef number<skeleton_backend, et_off> skeleton_number;
1081//
1082// Define a category for this number type, one of:
1083//
1084// number_kind_integer
1085// number_kind_floating_point
1086// number_kind_rational
1087// number_kind_fixed_point
1088// number_kind_complex
1089//
1090template<>
1e59de90 1091struct number_category<skeleton_backend > : public std::integral_constant<int, number_kind_floating_point>
f67539c2
TL
1092{};
1093
1094//
1095// These 2 traits classes are required for complex types only:
1096//
1097/*
1098template <expression_template_option ExpressionTemplates>
1099struct component_type<number<skeleton_backend, ExpressionTemplates> >
1100{
1101 typedef number<skeleton_real_type, ExpressionTemplates> type;
1102};
1103
1104template <expression_template_option ExpressionTemplates>
1105struct complex_result_from_scalar<number<skeleton_real_type, ExpressionTemplates> >
1106{
1107 typedef number<skeleton_backend, ExpressionTemplates> type;
1108};
1109*/
1110
1111/**************************************************************
1112
1113OVERLOADABLE FUNCTIONS - FLOATING POINT TYPES ONLY
1114
1115****************************************************************/
1116
1117#if 0
1118
1119template <boost::multiprecision::expression_template_option ExpressionTemplates>
1120int sign(const number<skeleton_backend, ExpressionTemplates>& arg);
1121template <boost::multiprecision::expression_template_option ExpressionTemplates>
1122int signbit(const number<skeleton_backend, ExpressionTemplates>& arg);
1123template <boost::multiprecision::expression_template_option ExpressionTemplates>
1124number<skeleton_backend, ExpressionTemplates> changesign(const number<skeleton_backend, ExpressionTemplates>& arg);
1125template <boost::multiprecision::expression_template_option ExpressionTemplates>
1126number<skeleton_backend, ExpressionTemplates> copysign(const number<skeleton_backend, ExpressionTemplates>& a, const number<skeleton_backend, ExpressionTemplates>& b);
1127
1128template <boost::multiprecision::expression_template_option ExpressionTemplates>
1129number<skeleton_backend, ExpressionTemplates> cbrt(const number<skeleton_backend, ExpressionTemplates>& arg);
1130template <boost::multiprecision::expression_template_option ExpressionTemplates>
1131number<skeleton_backend, ExpressionTemplates> erf(const number<skeleton_backend, ExpressionTemplates>& arg);
1132template <boost::multiprecision::expression_template_option ExpressionTemplates>
1133number<skeleton_backend, ExpressionTemplates> erfc(const number<skeleton_backend, ExpressionTemplates>& arg);
1134template <boost::multiprecision::expression_template_option ExpressionTemplates>
1135number<skeleton_backend, ExpressionTemplates> expm1(const number<skeleton_backend, ExpressionTemplates>& arg);
1136template <boost::multiprecision::expression_template_option ExpressionTemplates>
1137number<skeleton_backend, ExpressionTemplates> log1p(const number<skeleton_backend, ExpressionTemplates>& arg);
1138template <boost::multiprecision::expression_template_option ExpressionTemplates>
1139number<skeleton_backend, ExpressionTemplates> tgamma(const number<skeleton_backend, ExpressionTemplates>& arg);
1140template <boost::multiprecision::expression_template_option ExpressionTemplates>
1141number<skeleton_backend, ExpressionTemplates> lgamma(const number<skeleton_backend, ExpressionTemplates>& arg);
1142
1143template <boost::multiprecision::expression_template_option ExpressionTemplates>
1144long lrint(const number<skeleton_backend, ExpressionTemplates>& arg);
1145template <boost::multiprecision::expression_template_option ExpressionTemplates>
1146long long llrint(const number<skeleton_backend, ExpressionTemplates>& arg);
1147
1148template <boost::multiprecision::expression_template_option ExpressionTemplates>
1149number<skeleton_backend, ExpressionTemplates> nextafter(const number<skeleton_backend, ExpressionTemplates>& a, const number<skeleton_backend, ExpressionTemplates>& b);
1150template <boost::multiprecision::expression_template_option ExpressionTemplates>
1151number<skeleton_backend, ExpressionTemplates> nexttoward(const number<skeleton_backend, ExpressionTemplates>& a, const number<skeleton_backend, ExpressionTemplates>& b);
1152
1153#endif
1154
1155}} // namespace boost::multiprecision
1156
1157/**********************************************************************************
1158
1159FLOATING POINT ONLY
1160Nice to have stuff for better integration with Boost.Math.
1161
1162***********************************************************************************/
1163
1164namespace boost {
1165namespace math {
1166namespace tools {
1167
1168#if 0
1169
1170template <>
1171int digits<boost::multiprecision::number<boost::multiprecision::skeleton_number> >();
1172
1173template <>
1174boost::multiprecision::mpfr_float max_value<boost::multiprecision::skeleton_number>();
1175
1176template <>
1177boost::multiprecision::mpfr_float min_value<boost::multiprecision::skeleton_number>();
1178
1179#endif
1180
1181} // namespace tools
1182
1183namespace constants {
1184namespace detail {
1185
1186#if 0
1187template <boost::multiprecision::expression_template_option ExpressionTemplates>
1188struct constant_pi<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >
1189{
1190 typedef boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> result_type;
1191 //
1192 // Fixed N-digit precision, return reference to internal/cached object:
1193 //
1194 template <int N>
1e59de90 1195 static inline const result_type& get(const std::integral_constant<int, N>&);
f67539c2
TL
1196 //
1197 // Variable precision, returns fresh result each time (unless precision is unchanged from last call):
1198 //
1e59de90 1199 static inline const result_type get(const std::integral_constant<int, 0>&);
f67539c2
TL
1200};
1201//
1202// Plus any other constants supported natively by this type....
1203//
1204#endif
1205
1206} // namespace detail
1207} // namespace constants
1208
1209}} // namespace boost::math
1210
1211
1212namespace std {
1213
1214template <boost::multiprecision::expression_template_option ExpressionTemplates>
1215class numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >
1216{
1217 typedef boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> number_type;
1218
1219 public:
1e59de90 1220 static constexpr bool is_specialized = true;
f67539c2
TL
1221 static number_type(min)();
1222 static number_type(max)();
1223 static number_type lowest();
1e59de90
TL
1224 static constexpr int digits = 0;
1225 static constexpr int digits10 = 0;
1226 static constexpr int max_digits10 = 0;
1227 static constexpr bool is_signed = false;
1228 static constexpr bool is_integer = false;
1229 static constexpr bool is_exact = false;
1230 static constexpr int radix = 2;
f67539c2
TL
1231 static number_type epsilon();
1232 static number_type round_error();
1e59de90
TL
1233 static constexpr int min_exponent = 0;
1234 static constexpr int min_exponent10 = 0;
1235 static constexpr int max_exponent = 0;
1236 static constexpr int max_exponent10 = 0;
1237 static constexpr bool has_infinity = false;
1238 static constexpr bool has_quiet_NaN = false;
1239 static constexpr bool has_signaling_NaN = false;
1240 static constexpr float_denorm_style has_denorm = denorm_absent;
1241 static constexpr bool has_denorm_loss = false;
f67539c2
TL
1242 static number_type infinity();
1243 static number_type quiet_NaN();
1244 static number_type signaling_NaN();
1245 static number_type denorm_min();
1e59de90
TL
1246 static constexpr bool is_iec559 = false;
1247 static constexpr bool is_bounded = false;
1248 static constexpr bool is_modulo = false;
1249 static constexpr bool traps = false;
1250 static constexpr bool tinyness_before = false;
1251 static constexpr float_round_style round_style = round_toward_zero;
f67539c2
TL
1252};
1253
f67539c2 1254template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1255constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::digits;
f67539c2 1256template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1257constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::digits10;
f67539c2 1258template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1259constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::max_digits10;
f67539c2 1260template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1261constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::is_signed;
f67539c2 1262template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1263constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::is_integer;
f67539c2 1264template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1265constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::is_exact;
f67539c2 1266template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1267constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::radix;
f67539c2 1268template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1269constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::min_exponent;
f67539c2 1270template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1271constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::min_exponent10;
f67539c2 1272template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1273constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::max_exponent;
f67539c2 1274template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1275constexpr int numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::max_exponent10;
f67539c2 1276template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1277constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::has_infinity;
f67539c2 1278template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1279constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::has_quiet_NaN;
f67539c2 1280template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1281constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::has_signaling_NaN;
f67539c2 1282template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1283constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::has_denorm;
f67539c2 1284template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1285constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::has_denorm_loss;
f67539c2 1286template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1287constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::is_iec559;
f67539c2 1288template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1289constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::is_bounded;
f67539c2 1290template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1291constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::is_modulo;
f67539c2 1292template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1293constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::traps;
f67539c2 1294template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1295constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::tinyness_before;
f67539c2 1296template <boost::multiprecision::expression_template_option ExpressionTemplates>
1e59de90 1297constexpr float_round_style numeric_limits<boost::multiprecision::number<boost::multiprecision::skeleton_backend, ExpressionTemplates> >::round_style;
f67539c2
TL
1298
1299} // namespace std
1300
1301#endif