Skip to content

Commit 5d03d24

Browse files
committed
Fixed a major leak in MFDistanceMatrix and its subclass. MFDistanceMatrixOperation is now allowed to be cancelled.
1 parent 4c863ce commit 5d03d24

File tree

4 files changed

+27
-17
lines changed

4 files changed

+27
-17
lines changed

Seqotron/MFDistanceMatrix.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ -(void)dealloc{
5454
- (float)calculatePairwiseDistanceBetween:(MFSequence*)sequence1 and:(MFSequence*)sequence2{
5555
NSUInteger d = 0;
5656
NSUInteger n = 0;
57-
const char *c1 = [[sequence1 sequence]UTF8String];
58-
const char *c2 = [[sequence2 sequence]UTF8String];
5957
MFDataType *dataType = sequence1.dataType;
6058
NSUInteger dimension = [sequence1 length];
61-
59+
char c1,c2;
6260
for ( NSUInteger k = 0; k < dimension; k++ ) {
63-
if( [dataType isKnownChar:c1[k]] && [dataType isKnownChar:c2[k]] ){
64-
if(c1[k] != c2[k] ){
61+
c1 = [[sequence1 sequence ]characterAtIndex:k];
62+
c2 = [[sequence2 sequence ]characterAtIndex:k];
63+
if( [dataType isKnownChar:c1] && [dataType isKnownChar:c2] ){
64+
if(c1 != c2 ){
6565
d++;
6666
}
6767
n++;

Seqotron/MFDistanceMatrixOperation.m

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,18 @@ -(void)main{
8383
// [self.delegate operation:self setDescription:self.description];
8484
// });
8585
// }
86-
87-
[_matrix calculateDistances];
86+
float **matrix = [_matrix floatMatrix];
87+
NSUInteger dimension = [_sequences count];
88+
for ( NSUInteger i = 0; i < dimension; i++ ) {
89+
MFSequence *seq1 = [_sequences objectAtIndex:i];
90+
91+
for ( NSUInteger j = i+1; j < dimension; j++ ) {
92+
MFSequence *seq2 = [_sequences objectAtIndex:j];
93+
matrix[i][j] = matrix[j][i] = [_matrix calculatePairwiseDistanceBetween:seq1 and:seq2];
94+
}
95+
if( [self isCancelled] )break;
96+
}
97+
//[_matrix calculateDistances];
8898

8999
// [(NSObject *)self.delegate performSelectorOnMainThread: @selector(distanceMatrixDidFinish:)
90100
// withObject: self

Seqotron/MFJukeCantorDistanceMatrix.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ @implementation MFJukeCantorDistanceMatrix
2828
- (float)calculatePairwiseDistanceBetween:(MFSequence*)sequence1 and:(MFSequence*)sequence2{
2929
NSUInteger d = 0;
3030
NSUInteger n = 0;
31-
const char *c1 = [[sequence1 sequence]UTF8String];
32-
const char *c2 = [[sequence2 sequence]UTF8String];
3331
MFDataType *dataType = sequence1.dataType;
3432
NSUInteger dimension = [sequence1 length];
35-
33+
char c1,c2;
3634
for ( NSUInteger k = 0; k < dimension; k++ ) {
37-
if( [dataType isKnownChar:c1[k]] && [dataType isKnownChar:c2[k]] ){
38-
if( c1[k] != c2[k] ){
35+
c1 = [[sequence1 sequence ]characterAtIndex:k];
36+
c2 = [[sequence2 sequence ]characterAtIndex:k];
37+
if( [dataType isKnownChar:c1] && [dataType isKnownChar:c2] ){
38+
if( c1 != c2 ){
3939
d++;
4040
}
4141
n++;

Seqotron/MFK83DistanceMatrix.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ @implementation MFK83DistanceMatrix
2828
- (float)calculatePairwiseDistanceBetween:(MFSequence*)sequence1 and:(MFSequence*)sequence2{
2929
float d = 0;
3030
NSUInteger n = 0;
31-
const char *c1 = [[sequence1 sequence]UTF8String];
32-
const char *c2 = [[sequence2 sequence]UTF8String];
3331
MFDataType *dataType = sequence1.dataType;
3432
NSUInteger dimension = [sequence1 length];
35-
33+
char c1,c2;
3634
for ( NSUInteger k = 0; k < dimension; k++ ) {
37-
if( [dataType isKnownChar:c1[k]] && [dataType isKnownChar:c2[k]] ){
38-
if( c1[k] != c2[k] ){
35+
c1 = [[sequence1 sequence ]characterAtIndex:k];
36+
c2 = [[sequence2 sequence ]characterAtIndex:k];
37+
if( [dataType isKnownChar:c1] && [dataType isKnownChar:c2] ){
38+
if( c1 != c2 ){
3939
d++;
4040
}
4141
n++;

0 commit comments

Comments
 (0)