src/N.Basic.cpp

00001 #include <symbolism/N.h>
00002 #include <string>
00003 #include <sstream>
00004 
00005 using namespace std;
00006 
00007 namespace symbolism {
00008 namespace ring {
00009 
00010 // newsize != size => newsize > 0
00011 void N::reserve_small(size_t newsize)
00012 {
00013     size = newsize;
00014     void* space = malloc((size + 1)  * sizeof(limb_t));
00015     data = reinterpret_cast<limb_t*>(space);
00016 }
00017 
00018 void N::reserve_large(size_t newsize)
00019 {
00020     if(newsize)
00021     {
00022         size = newsize;
00023         void* space = realloc(data, (size + 1)  * sizeof(limb_t));
00024         data = reinterpret_cast<limb_t*>(space);
00025     }
00026     else
00027     {
00028         size = 0;
00029         free(data);
00030     }
00031 }
00032 
00033 void N::resize_small(size_t newsize)
00034 {
00035     limb_t value = limb;
00036     size = newsize;
00037     void* space = malloc((size + 1)  * sizeof(limb_t));
00038     data = reinterpret_cast<limb_t*>(space);
00039     data[0] = value;
00040     for(size_t i = 1; i <= size; i++)
00041     {
00042         data[i] = 0;
00043     }
00044 }
00045 
00046 void N::resize_large(size_t newsize)
00047 {
00048     size_t oldsize = size;
00049     size = newsize;
00050     void* space = realloc(data, (size + 1)  * sizeof(limb_t));
00051     data = reinterpret_cast<limb_t*>(space);
00052     for(size_t i = oldsize + 1; i <= size; i++)
00053     {
00054         data[i] = 0;
00055     }
00056 }
00057 
00060 void N::truncate_large(size_t newsize)
00061 {
00062     // newsize < size > 0
00063     if(newsize)
00064     {
00065         size = newsize;
00066         void* space = realloc(data, (size + 1)  * sizeof(limb_t));
00067         data = reinterpret_cast<limb_t*>(space);
00068     }
00069     else
00070     {
00071         size = 0;
00072         limb_t value = data[0];
00073         free(data);
00074         limb = value;
00075     }
00076 }
00077 
00078 void N::normalize_large()
00079 {
00080     size_t newsize = size;
00081     while(data[newsize] == 0 && --newsize);
00082     if(newsize)
00083     {
00084         size = newsize;
00085         void* space = realloc(data, (size + 1)  * sizeof(limb_t));
00086         data = reinterpret_cast<limb_t*>(space);
00087     }
00088     else
00089     {
00090         limb_t value = data[0];
00091         size = 0;
00092         free(data);
00093         limb = value;
00094     }
00095 }
00096 
00097 }}

Copyright © 2007-2008 Remco Bloemen.

Generated on Tue Jan 22 17:35:31 2008 for symbolism by doxygen 1.5.4

Hosted by SourceForge.net Logo