Changeset d7cb52 in git
- Timestamp:
- Feb 25, 2007, 7:09:43 AM (16 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '23b0a9c07070b684aa12355009488dc00d9501e3')
- Children:
- 74802b0c748389d7b2662b157bcd57bbbe13eb0d
- Parents:
- 101775c32e4f8f7cd743c23b9822bc53abca1792
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/tgb_internal.h
r101775 rd7cb52 5 5 * Computer Algebra System SINGULAR * 6 6 ****************************************/ 7 /* $Id: tgb_internal.h,v 1.6 1 2007-02-23 13:30:35bricken Exp $ */7 /* $Id: tgb_internal.h,v 1.62 2007-02-25 06:09:43 bricken Exp $ */ 8 8 /* 9 9 * ABSTRACT: tgb internal .h file … … 20 20 #include <modulop.h> 21 21 //#define USE_NORO 1 22 23 22 24 #ifdef USE_NORO 23 25 #define NORO_CACHE 1 … … 750 752 } 751 753 */ 754 #ifdef __GNUC__ 755 #define LIKELY(expression) (__builtin_expect(!!(expression), 1)) 756 #define UNLIKELY(expression) (__builtin_expect(!!(expression), 0)) 757 #else 758 #define LIKELY(expression) (expression) 759 #define UNLIKELY(expression) (expression) 760 #endif 761 762 template<class number_type> SparseRow<number_type>* convert_to_sparse_row(number_type* temp_array,int temp_size,int non_zeros){ 763 SparseRow<number_type>* res=new SparseRow<number_type>(non_zeros); 764 int pos=0; 765 #if 0 766 for(i=0;i<cache->nIrreducibleMonomials;i++){ 767 if (!(0==temp_array[i])){ 768 769 res->idx_array[pos]=i; 770 res->coef_array[pos]=temp_array[i]; 771 772 pos++; 773 non_zeros--; 774 if (non_zeros==0) break; 775 } 776 777 } 778 #else 779 int64* start=(int64*) ((void*)temp_array); 780 int64* end; 781 const int multiple=sizeof(int64)/sizeof(number_type); 782 if (temp_size==0) end=start; 783 784 else 785 { 786 int temp_size_rounded=temp_size+(multiple-(temp_size%multiple)); 787 assume(temp_size_rounded>=temp_size); 788 assume(temp_size_rounded%multiple==0); 789 assume(temp_size_rounded<temp_size+multiple); 790 number_type* nt_end=temp_array+temp_size_rounded; 791 end=(int64*)((void*)nt_end); 792 } 793 int64* it=start; 794 while(it!=end){ 795 if UNLIKELY((*it)!=0){ 796 int small_i; 797 const int temp_index=((number_type*)((void*) it))-temp_array; 798 const int bound=temp_index+multiple; 799 for(small_i=temp_index;small_i<bound;small_i++){ 800 if(temp_array[small_i]!=0){ 801 res->idx_array[pos]=small_i; 802 res->coef_array[pos]=temp_array[small_i]; 803 804 pos++; 805 non_zeros--; 806 807 } 808 if (non_zeros==0) break; 809 } 810 811 } 812 ++it; 813 } 814 #endif 815 return res; 816 } 817 752 818 template<class number_type> SparseRow<number_type> * noro_red_to_non_poly_t(poly p, int &len, NoroCache<number_type>* cache,slimgb_alg* c){ 753 819 assume(len==pLength(p)); … … 785 851 int temp_size=cache->nIrreducibleMonomials; 786 852 memset(temp_array,0,temp_size_bytes); 853 number minus_one=npInit(-1); 787 854 for(i=0;i<len;i++){ 788 855 MonRedResNP<number_type> red=mon[i]; … … 792 859 number coef=red.coef; 793 860 int j; 794 if (!( npIsOne(coef))){861 if (!((coef==(number) 1)||(coef==minus_one))){ 795 862 for(j=0;j<row->len;j++){ 796 863 int idx=row->idx_array[j]; … … 800 867 assume(idx<temp_size); 801 868 }}else{ 869 if (coef==(number) 1){ 802 870 for(j=0;j<row->len;j++){ 803 871 int idx=row->idx_array[j]; … … 805 873 assume(idx<temp_size); 806 874 } 875 } else { 876 for(j=0;j<row->len;j++){ 877 int idx=row->idx_array[j]; 878 temp_array[idx]=F4mat_to_number_type( npSubM((number) temp_array[idx],(number) row->coef_array[j])); 879 assume(idx<temp_size); 880 }} 807 881 } 808 882 } … … 829 903 return NULL; 830 904 } 831 SparseRow<number_type>* res=new SparseRow<number_type>(non_zeros); 832 int pos=0; 833 #if 0 834 for(i=0;i<cache->nIrreducibleMonomials;i++){ 835 if (!(0==temp_array[i])){ 836 837 res->idx_array[pos]=i; 838 res->coef_array[pos]=temp_array[i]; 839 840 pos++; 841 non_zeros--; 842 if (non_zeros==0) break; 843 } 844 845 } 846 #else 847 int64* start=(int64*) ((void*)temp_array); 848 int64* end; 849 const int multiple=sizeof(int64)/sizeof(number_type); 850 if (temp_size==0) end=start; 851 852 else 853 { 854 int temp_size_rounded=temp_size+(multiple-(temp_size%multiple)); 855 assume(temp_size_rounded>=temp_size); 856 assume(temp_size_rounded%multiple==0); 857 assume(temp_size_rounded<temp_size+multiple); 858 number_type* nt_end=temp_array+temp_size_rounded; 859 end=(int64*)((void*)nt_end); 860 } 861 int64* it=start; 862 while(it!=end){ 863 if ((*it)!=0){ 864 int small_i; 865 const int temp_index=((number_type*)((void*) it))-temp_array; 866 const int bound=temp_index+multiple; 867 for(small_i=temp_index;small_i<bound;small_i++){ 868 if(temp_array[small_i]!=0){ 869 res->idx_array[pos]=small_i; 870 res->coef_array[pos]=temp_array[small_i]; 871 872 pos++; 873 non_zeros--; 874 875 } 876 if (non_zeros==0) break; 877 } 878 879 } 880 ++it; 881 } 882 #endif 905 SparseRow<number_type>* res=convert_to_sparse_row(temp_array,temp_size, non_zeros); 906 883 907 //omfree(temp_array); 884 908
Note: See TracChangeset
for help on using the changeset viewer.