File: portability.rst

package info (click to toggle)
flint 3.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 68,996 kB
  • sloc: ansic: 915,350; asm: 14,605; python: 5,340; sh: 4,512; lisp: 2,621; makefile: 787; cpp: 341
file content (36 lines) | stat: -rw-r--r-- 1,508 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
.. _portability:

**Portability**
===============================================================================

Portable FLINT types
-------------------------------------------------------------------------------

For platform independence, FLINT provides two types ``ulong``
and ``slong`` to replace ``unsigned long`` and ``long``
respectively. These are guaranteed to be the same size as GMP's
``mp_limb_t`` and ``mp_limb_signed_t`` types, respectively.

A full list of types provided by FLINT is available in
``code_conventions.md`` in the top-level source tree.

As FLINT supports Windows 64 on which the FLINT ``ulong`` and
``slong`` types are 64 bits, whilst ``unsigned long`` and
``long`` are only 32 bits, it is necessary to have a special
format specifier which is 64 bits on Windows 64 instead of the usual
``"%lu"`` and ``"%ld"``.

For this purpose FLINT provides its own I/O functions, ``flint_printf``,
``flint_fprintf``, ``flint_sprintf``, ``flint_scanf``,
``flint_fscanf`` and ``flint_sscanf``, which work exactly as the
usual system versions, but which take the ``"%wu"`` and ``"%wd"``
format specifiers, which support FLINT ``ulong`` and ``slong``
types respectively.

Also, instead of using constants ``123UL`` and ``123L``, FLINT
provides the macros ``UWORD(123)`` and ``WORD(123)`` respectively
for constants of type ``ulong`` and ``slong`` respectively.

The maximum and minimum values that can be represented by these types
are given by ``UWORD_MAX`` and ``WORD_MAX`` respectively.