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