]> git.donarmstrong.com Git - biopieces.git/blobdiff - code_c/Maasha/src/lib/barray.c
added bed2tag_contigs.c
[biopieces.git] / code_c / Maasha / src / lib / barray.c
index 68ee72e145895d2da9693d94314dd43215e1e5af..474e56ddff0874f426d58e5b292f81dcce800d50 100644 (file)
@@ -3,7 +3,8 @@
 #include "common.h"
 #include "mem.h"
 #include "barray.h"
-
+#define SIZE_BLOCK 10000000
 
 barray *barray_new( size_t nmemb )
 {
@@ -32,9 +33,11 @@ size_t barray_new_size( size_t nmemb_old )
     size_t nmemb_new = 1;
 
     while ( nmemb_new < nmemb_old ) {
-        nmemb_new <<= 1;
+        nmemb_new += SIZE_BLOCK;
     }
 
+//    fprintf( stderr, "New size: %zu\n", nmemb_new );
+
     return nmemb_new;
 }
 
@@ -61,7 +64,7 @@ void barray_print( barray *ba )
 
     int i;
 
-    printf( "\nnmemb: %zu   end: %zu\n", ba->nmemb, ba->end );
+    printf( "\nba->nmemb: %zu   ba->end: %zu\n", ba->nmemb, ba->end );
 
     for ( i = 0; i < ba->nmemb; i++ ) {
         printf( "%d: %d\n", i, ba->array[ i ] );
@@ -79,6 +82,7 @@ void barray_interval_inc( barray *ba, size_t beg, size_t end, ushort score )
     assert( beg >= 0 );
     assert( end >= 0 );
     assert( end >= beg );
+    assert( score > 0 );
 
     if ( end > ba->nmemb ) {
         barray_resize( ba, barray_new_size( end ) );
@@ -105,7 +109,7 @@ bool barray_interval_scan( barray *ba, size_t *pos_pt, size_t *beg_pt, size_t *e
     size_t beg = *beg_pt;
     size_t end = *end_pt;
 
-    if ( pos > ba->end ) {
+    if ( pos > ba->end || ba->end == 0 ) {
         return FALSE;
     }
 
@@ -135,6 +139,23 @@ bool barray_interval_scan( barray *ba, size_t *pos_pt, size_t *beg_pt, size_t *e
 }
 
 
+ushort barray_interval_max( barray *ba, size_t beg, size_t end )
+{
+    /* Martin A. Hansen, December 2008. */
+
+    /* Locate the max value in an interval within a byte array. */ 
+
+    size_t i   = 0;
+    ushort max = 0;
+
+    for ( i = beg; i <= end; i++ ) {
+        max = MAX( max, ba->array[ i ] );
+    }
+
+    return max;
+}
+
+
 void barray_destroy( barray **ba_ppt )
 {
     /* Martin A. Hansen, November 2008. */