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 >

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.

00255     : n(N(v)) {
00256     l_p= default_aligned_size<M> (n);
00257     l_m= default_aligned_size<I> (n);
00258     l_q= default_aligned_size<C> (n);
00259     p= mmx_formatted_new<M> (l_p, format<M> (/*FIXME*/));
00260     for (nat i= 0; i < n; i++) p[i]= as<M> (v[i]);
00261     q= NULL; m= NULL; P= C(1);
00262     product_done= false; comoduli_done= false; inverse_done= false;
00263     if (! lazy) setup_inverse (); }

~crt_naive_transformer (  )  [inline]

Definition at line 265 of file crt_naive.hpp.

00265                                    {
00266     mmx_delete<M> (p, l_p);
00267     if (q != NULL) mmx_delete<C> (q, l_q);
00268     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.

00288                                          {
00289     setup_comoduli ();
00290     Crt::combine (a, c, q, n); }

C comodulus ( nat  i  )  [inline]

Definition at line 280 of file crt_naive.hpp.

00280                              {
00281     VERIFY (i < n, "index out of range");
00282     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.

00284                                                         {
00285     C b= Crt::encode (a, P);
00286     Crt::direct (c, b, p, n); }

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

Definition at line 292 of file crt_naive.hpp.

00292                                                    {
00293     setup_inverse ();
00294     Crt::inverse (a, c, p, P, q, m, n);
00295     a= Crt::decode (a, P, H); }

M operator[] ( nat  i  )  const [inline]

Definition at line 270 of file crt_naive.hpp.

00270                                     {
00271     VERIFY (i < n, "index out of range");
00272     return p[i]; }

Modulus product (  )  [inline]

Definition at line 277 of file crt_naive.hpp.

00277                             {
00278     setup_product (); return P; }

void setup_comoduli (  )  [inline]

Definition at line 232 of file crt_naive.hpp.

00232                                 {
00233     if (comoduli_done) return;
00234     setup_product ();
00235     for (nat i= 0; i < n; i++) q[i]= * P / * p[i];
00236     comoduli_done= true; }

void setup_inverse (  )  [inline]

Definition at line 238 of file crt_naive.hpp.

References I, inv_mod(), mul_mod(), and reduce_mod().

00238                                {
00239     if (inverse_done) return;
00240     setup_comoduli ();
00241     H= Crt::half (P);
00242     m= mmx_formatted_new<I> (l_m, format<I> (/*FIXME*/));
00243     for (nat i= 0; i < n; i++) {
00244       I a (1), b;
00245       for (nat j= 0; j < n; j++) {
00246         reduce_mod (b, * p[j], p[i]);
00247         if (j != i) mul_mod (a, b, p[i]);
00248       }
00249       inv_mod (m[i], a, p[i]);
00250       ASSERT (m[i] != 0, "moduli must be pairwise coprime"); }
00251     inverse_done= true; }

void setup_product (  )  [inline]

Definition at line 225 of file crt_naive.hpp.

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

nat size (  )  const [inline]

Definition at line 274 of file crt_naive.hpp.

Referenced by mmx::N().

00274                            {
00275     return n; }


Member Data Documentation

Definition at line 223 of file crt_naive.hpp.

C H

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.

I* m
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.

C* q

The documentation for this struct was generated from the following file:

Generated on 6 Dec 2012 for algebramix by  doxygen 1.6.1