Changeset 1463b2e in tol
- Timestamp:
- Dec 10, 2009, 11:03:28 AM (17 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- f7f325b
- Parents:
- cbeed2c
- File:
-
- 1 edited
-
tol/btol/matrix_type/matgra.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/matrix_type/matgra.cpp
rcbeed2c r1463b2e 6553 6553 static const BArray<int>* criterium_; 6554 6554 public: 6555 static int Compare(const void* v1, const void* v2) 6556 { 6557 int i1 = *(int*)v1; 6558 int i2 = *(int*)v2; 6555 static int CompareValue(int i1, int i2) 6556 { 6559 6557 int k,j,h; 6560 6558 for(k=0; k<criterium_->Size(); k++) … … 6580 6578 return(0); 6581 6579 } 6580 static int Compare(int i1, int i2) 6581 { 6582 int cmp = CompareValue(i1,i2); 6583 if(!cmp) { cmp = i1-i2;} 6584 return(cmp); 6585 } 6586 6587 static int Compare(const void* v1, const void* v2) 6588 { 6589 return(Compare(*(int*)v1,*(int*)v2)); 6590 } 6582 6591 static void Sort(const BMatrix<BDat>& mat, 6583 6592 const BArray<int>& criterium, … … 6601 6610 //-------------------------------------------------------------------- 6602 6611 DeclareContensClass(BMat, BMatTemporary, BMatSort); 6603 DefExtOpr(1, BMatSort, "Sort", 2, 2, "Matrix Set",6604 "(Matrix mat, Set criterium )",6612 DefExtOpr(1, BMatSort, "Sort", 2, 3, "Matrix Set Real", 6613 "(Matrix mat, Set criterium [, Real unique])", 6605 6614 I2("Sorts rows of a matrix given a mixed criterium of ascent or " 6606 6615 "descent columns. For example, criterium=[[-2,3]] sorts by 2-nd " … … 6620 6629 BMat& m = Mat(Arg(1)); 6621 6630 BSet& c = Set(Arg(2)); 6631 bool unique = false; 6632 if(Arg(3)) 6633 { 6634 unique = Real(Arg(3))!=0.0; 6635 } 6622 6636 BArray<int> c_(c.Card()); 6623 6637 BArray<int> p(m.Rows()); 6624 contens_.Alloc(m.Rows(),1);6625 6638 int j,k; 6626 6639 bool ok=true; … … 6646 6659 } 6647 6660 BMatOrder::Sort(m,c_,p); 6648 for(k=0;k<m.Rows();k++) 6649 { 6650 contens_(k,0)=p[k]+1; 6651 } 6652 } 6661 if(!unique) 6662 { 6663 contens_.Alloc(m.Rows(),1); 6664 for(k=0;k<m.Rows();k++) 6665 { 6666 contens_(k,0)=p[k]+1; 6667 } 6668 } 6669 else 6670 { 6671 int d=1; 6672 BArray<int> cmp(m.Rows()); 6673 cmp[0]=1; 6674 for(k=1;k<m.Rows();k++) 6675 { 6676 if(cmp[k]=BMatOrder::CompareValue(p[k-1],p[k])) { d++; } 6677 } 6678 contens_.Alloc(d,1); 6679 for(k=d=0;k<m.Rows();k++) 6680 { 6681 if(cmp[k]) 6682 { 6683 contens_(d,0)=p[k]+1; 6684 d++; 6685 } 6686 } 6687 } 6688 } 6689 6653 6690 6654 6691 //--------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.
