make AddProgressCallback signature plain
authorVictor Grishchenko <victor.grishchenko@gmail.com>
Fri, 4 Jun 2010 12:00:48 +0000 (14:00 +0200)
committerVictor Grishchenko <victor.grishchenko@gmail.com>
Fri, 4 Jun 2010 12:00:48 +0000 (14:00 +0200)
httpgw.cpp
sendrecv.cpp
swift.h
tests/binstest2.cpp
transfer.cpp

index 103ac4b..6ad86e2 100644 (file)
@@ -103,7 +103,7 @@ void HttpGwFirstProgressCallback (int transfer, bin64_t bin) {
     if (bin!=bin64_t(0,0)) // need the first packet
         return;
     swift::RemoveProgressCallback(transfer,&HttpGwFirstProgressCallback);
-    swift::AddProgressCallback(transfer,&HttpGwSwiftProgressCallback);
+    swift::AddProgressCallback(transfer,&HttpGwSwiftProgressCallback,0);
     for (int httpc=0; httpc<http_gw_reqs_open; httpc++) {
         http_gw_t * req = http_requests + httpc;
         if (req->transfer==transfer && req->tosend==0) { // FIXME states
@@ -181,7 +181,7 @@ void HttpGwNewRequestCallback (SOCKET http_conn){
     if (swift::Size(file)) {
         HttpGwFirstProgressCallback(file,bin64_t(0,0));
     } else {
-        swift::AddProgressCallback(file,&HttpGwFirstProgressCallback);
+        swift::AddProgressCallback(file,&HttpGwFirstProgressCallback,0);
         sckrwecb_t install (http_conn,NULL,NULL,HttpGwCloseConnection);
         swift::Datagram::Listen3rdPartySocket(install);
     }
index 045abb3..1aaa5de 100644 (file)
@@ -327,8 +327,8 @@ bin64_t Channel::OnData (Datagram& dgram) {  // TODO: HAVE NONE for corrupted da
         return bin64_t::NONE;
     bin64_t cover = transfer().ack_out().cover(pos);
     for(int i=0; i<transfer().cb_installed; i++)
-        if (cover.layer()>=transfer().callbacks[i].agg)
-            transfer().callbacks[i].cb(transfer().fd(),pos);  // FIXME
+        if (cover.layer()>=transfer().cb_agg[i])
+            transfer().callbacks[i](transfer().fd(),pos);  // FIXME
     data_in_.bin = pos;
     if (pos!=bin64_t::NONE) {
         if (last_data_in_time_) {
diff --git a/swift.h b/swift.h
index e87332e..5472a94 100644 (file)
--- a/swift.h
+++ b/swift.h
@@ -123,16 +123,7 @@ namespace swift {
     class PiecePicker;
     class CongestionController;
     class PeerSelector;
-    struct TransferProgressCallback {
-        typedef void (*callback_t) (int transfer, bin64_t bin);
-        /** The function to invoke. */
-        callback_t  cb;
-        /** aggregation level (do not report smaller events). */
-        uint8_t     agg;
-        TransferProgressCallback(callback_t callback, uint8_t aggregate=0) 
-            : cb(callback), agg(aggregate) {}
-        TransferProgressCallback() : cb(NULL), agg(0) {}
-    };
+    typedef void (*ProgressCallback) (int transfer, bin64_t bin);
 
 
     /** A class representing single file transfer. */
@@ -197,7 +188,8 @@ namespace swift {
         tint            init_time_;
 
         #define SWFT_MAX_TRANSFER_CB 8
-        TransferProgressCallback    callbacks[SWFT_MAX_TRANSFER_CB];
+        ProgressCallback callbacks[SWFT_MAX_TRANSFER_CB];
+        uint8_t         cb_agg[SWFT_MAX_TRANSFER_CB];
         int             cb_installed;
 
     public:
@@ -211,8 +203,8 @@ namespace swift {
         friend uint64_t  SeqComplete (int fdes);
         friend int     Open (const char* filename, const Sha1Hash& hash) ;
         friend void    Close (int fd) ;
-        friend void AddProgressCallback (int transfer,TransferProgressCallback cb);
-        friend void RemoveProgressCallback (int transfer,TransferProgressCallback cb);
+        friend void AddProgressCallback (int transfer,ProgressCallback cb,uint8_t agg);
+        friend void RemoveProgressCallback (int transfer,ProgressCallback cb);
         friend void ExternallyRetrieved (int transfer,bin64_t piece);
     };
 
@@ -465,8 +457,8 @@ namespace swift {
     /***/
     int       Find (Sha1Hash hash);
 
-    void AddProgressCallback (int transfer,TransferProgressCallback cb);
-    void RemoveProgressCallback (int transfer,TransferProgressCallback cb);
+    void AddProgressCallback (int transfer,ProgressCallback cb,uint8_t agg);
+    void RemoveProgressCallback (int transfer,ProgressCallback cb);
     void ExternallyRetrieved (int transfer,bin64_t piece);
 
     //uint32_t Width (const tbinvec& v);
index db5da55..1906406 100644 (file)
@@ -447,6 +447,13 @@ TEST(BinsTest,CoarseBitmap) {
     i32 = 0;
     bin.to_coarse_bitmap(i16,bin64_t(2,0),1);
     EXPECT_EQ(3,i32&3);
+
+    uint64_t bigint;
+    bigint = 0;
+    binmap_t bm;
+    bm.set(bin64_t(6,0));
+    bm.to_coarse_bitmap((uint16_t*)&bigint,bin64_t(6,0),0);
+    EXPECT_EQ( 0xffffffffffffffffULL, bigint );
     
 }
 
index 827b2cb..34e51ec 100644 (file)
@@ -40,10 +40,11 @@ void    Channel::CloseTransfer (FileTransfer* trans) {
 }
 
 
-void swift::AddProgressCallback (int transfer, TransferProgressCallback cb) {
+void swift::AddProgressCallback (int transfer,ProgressCallback cb,uint8_t agg) {
     FileTransfer* trans = FileTransfer::file(transfer);
     if (!trans)
         return;
+    trans->cb_agg[trans->cb_installed] = agg;
     trans->callbacks[trans->cb_installed++] = cb;
 }
 
@@ -56,12 +57,12 @@ void swift::ExternallyRetrieved (int transfer,bin64_t piece) {
 }
 
 
-void swift::RemoveProgressCallback (int transfer, TransferProgressCallback cb) {
+void swift::RemoveProgressCallback (int transfer, ProgressCallback cb) {
     FileTransfer* trans = FileTransfer::file(transfer);
     if (!trans)
         return;
     for(int i=0; i<trans->cb_installed; i++)
-        if (trans->callbacks[i].cb==cb.cb)
+        if (trans->callbacks[i]==cb)
             trans->callbacks[i]=trans->callbacks[--trans->cb_installed];
 }