(root)/
Python-3.12.0/
Modules/
_decimal/
libmpdec/
numbertheory.h
       1  /*
       2   * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
       3   *
       4   * Redistribution and use in source and binary forms, with or without
       5   * modification, are permitted provided that the following conditions
       6   * are met:
       7   *
       8   * 1. Redistributions of source code must retain the above copyright
       9   *    notice, this list of conditions and the following disclaimer.
      10   *
      11   * 2. Redistributions in binary form must reproduce the above copyright
      12   *    notice, this list of conditions and the following disclaimer in the
      13   *    documentation and/or other materials provided with the distribution.
      14   *
      15   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
      16   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      17   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      18   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
      19   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      20   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      21   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      22   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      23   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      24   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      25   * SUCH DAMAGE.
      26   */
      27  
      28  
      29  #ifndef LIBMPDEC_NUMBERTHEORY_H_
      30  #define LIBMPDEC_NUMBERTHEORY_H_
      31  
      32  
      33  #include "mpdecimal.h"
      34  #include "constants.h"
      35  
      36  
      37  /* Internal header file: all symbols have local scope in the DSO */
      38  MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
      39  
      40  
      41  /* transform parameters */
      42  struct fnt_params {
      43      int modnum;
      44      mpd_uint_t modulus;
      45      mpd_uint_t kernel;
      46      mpd_uint_t wtable[];
      47  };
      48  
      49  
      50  mpd_uint_t _mpd_getkernel(mpd_uint_t n, int sign, int modnum);
      51  struct fnt_params *_mpd_init_fnt_params(mpd_size_t n, int sign, int modnum);
      52  void _mpd_init_w3table(mpd_uint_t w3table[3], int sign, int modnum);
      53  
      54  
      55  #ifdef PPRO
      56  static inline void
      57  ppro_setmodulus(int modnum, mpd_uint_t *umod, double *dmod, uint32_t dinvmod[3])
      58  {
      59      *dmod = *umod =  mpd_moduli[modnum];
      60      dinvmod[0] = mpd_invmoduli[modnum][0];
      61      dinvmod[1] = mpd_invmoduli[modnum][1];
      62      dinvmod[2] = mpd_invmoduli[modnum][2];
      63  }
      64  #else
      65  static inline void
      66  std_setmodulus(int modnum, mpd_uint_t *umod)
      67  {
      68      *umod =  mpd_moduli[modnum];
      69  }
      70  #endif
      71  
      72  
      73  MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
      74  
      75  
      76  #endif /* LIBMPDEC_NUMBERTHEORY_H_ */