algebramix_doc 0.3
crt_naive_transformer< C, S, V > Struct Template Reference

#include <crt_naive.hpp>

List of all members.

Public Types

Public Member Functions

Public Attributes


Detailed Description

template<typename C, typename S = std_crt_naive<C>, typename V = typename crt_naive_variant_helper< C >::CV>
struct mmx::crt_naive_transformer< C, S, V >

Examples:

crt_test.cpp.

Definition at line 208 of file crt_naive.hpp.


Member Typedef Documentation

typedef implementation<crt_transform,V> Crt

Definition at line 214 of file crt_naive.hpp.

typedef S::modulus_base I

Definition at line 210 of file crt_naive.hpp.

typedef modulus<I, typename S::modulus_base_variant> M

Definition at line 211 of file crt_naive.hpp.

typedef modulus<C, typename S::modulus_variant> Modulus

Definition at line 212 of file crt_naive.hpp.

typedef implementation<vector_linear, vector_naive> Vec

Definition at line 213 of file crt_naive.hpp.


Constructor & Destructor Documentation

crt_naive_transformer ( const vector< NV, VV > &  v,
bool  lazy = true 
) [inline]

Definition at line 254 of file crt_naive.hpp.

References mmx::C.

    : n(N(v)) {
    l_p= default_aligned_size<M> (n);
    l_m= default_aligned_size<I> (n);
    l_q= default_aligned_size<C> (n);
    p= mmx_formatted_new<M> (l_p, format<M> (/*FIXME*/));
    for (nat i= 0; i < n; i++) p[i]= as<M> (v[i]);
    q= NULL; m= NULL; P= C(1);
    product_done= false; comoduli_done= false; inverse_done= false;
    if (! lazy) setup_inverse (); }
~crt_naive_transformer ( ) [inline]

Definition at line 265 of file crt_naive.hpp.

                                   {
    mmx_delete<M> (p, l_p);
    if (q != NULL) mmx_delete<C> (q, l_q);
    if (m != NULL) mmx_delete<I> (m, l_m); }

Member Function Documentation

void combine ( C a,
const I c 
) [inline]

Definition at line 288 of file crt_naive.hpp.

                                         {
    setup_comoduli ();
    Crt::combine (a, c, q, n); }
C comodulus ( nat  i) [inline]

Definition at line 280 of file crt_naive.hpp.

                             {
    VERIFY (i < n, "index out of range");
    setup_comoduli (); return q[i]; }
void direct_transform ( I c,
const C a 
) const [inline]

Definition at line 284 of file crt_naive.hpp.

References mmx::C.

                                                        {
    C b= Crt::encode (a, P);
    Crt::direct (c, b, p, n); }
void inverse_transform ( C a,
const I c 
) [inline]

Definition at line 292 of file crt_naive.hpp.

                                                   {
    setup_inverse ();
    Crt::inverse (a, c, p, P, q, m, n);
    a= Crt::decode (a, P, H); }
M operator[] ( nat  i) const [inline]

Definition at line 270 of file crt_naive.hpp.

                                    {
    VERIFY (i < n, "index out of range");
    return p[i]; }
Modulus product ( ) [inline]

Definition at line 277 of file crt_naive.hpp.

                            {
    setup_product (); return P; }
void setup_comoduli ( ) [inline]

Definition at line 232 of file crt_naive.hpp.

                                {
    if (comoduli_done) return;
    setup_product ();
    for (nat i= 0; i < n; i++) q[i]= * P / * p[i];
    comoduli_done= true; }
void setup_inverse ( ) [inline]

Definition at line 238 of file crt_naive.hpp.

                               {
    if (inverse_done) return;
    setup_comoduli ();
    H= Crt::half (P);
    m= mmx_formatted_new<I> (l_m, format<I> (/*FIXME*/));
    for (nat i= 0; i < n; i++) {
      I a (1), b;
      for (nat j= 0; j < n; j++) {
        reduce_mod (b, * p[j], p[i]);
        if (j != i) mul_mod (a, b, p[i]);
      }
      inv_mod (m[i], a, p[i]);
      ASSERT (m[i] != 0, "moduli must be pairwise coprime"); }
    inverse_done= true; }
void setup_product ( ) [inline]

Definition at line 225 of file crt_naive.hpp.

                               {
    if (product_done) return;
    q= mmx_formatted_new<C> (l_q, format<C> (/*FIXME*/));
    for (nat i= 0; i < n; i++) q[i]= * p[i];
    P= Vec::template vec_unary_big<mul_op> (q, n);
    product_done= true; }
nat size ( ) const [inline]

Definition at line 274 of file crt_naive.hpp.

Referenced by mmx::N().

                           {
    return n; }

Member Data Documentation

Definition at line 223 of file crt_naive.hpp.

Definition at line 223 of file crt_naive.hpp.

nat l_m

Definition at line 217 of file crt_naive.hpp.

nat l_p

Definition at line 217 of file crt_naive.hpp.

nat l_q

Definition at line 217 of file crt_naive.hpp.

nat n

Definition at line 216 of file crt_naive.hpp.

M* p

Definition at line 218 of file crt_naive.hpp.

Definition at line 223 of file crt_naive.hpp.


The documentation for this struct was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines