[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/filters/kspread/excel/sidewinder
From:       Marijn Kruisselbrink <m.kruisselbrink () student ! tue ! nl>
Date:       2010-09-01 4:38:44
Message-ID: 20100901043844.60D60AC871 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1170482 by mkruisselbrink:

some minor speedups in pole, constructing a std::vector over and over again for each \
block actually turned out to take quite some time in big xls files

 M  +25 -20    pole.cpp  


--- trunk/koffice/filters/kspread/excel/sidewinder/pole.cpp #1170481:1170482
@@ -156,11 +156,13 @@
     void load();
     void create();
 
-    unsigned long loadBigBlocks(std::vector<unsigned long> blocks, unsigned char* \
buffer, unsigned long maxlen); +    unsigned long loadBigBlocks(const \
std::vector<unsigned long>& blocks, unsigned char* buffer, unsigned long maxlen); +   \
unsigned long loadBigBlocks(const unsigned long* blocks, unsigned blockCount, \
unsigned char* buffer, unsigned long maxlen);  
     unsigned long loadBigBlock(unsigned long block, unsigned char* buffer, unsigned \
long maxlen);  
-    unsigned long loadSmallBlocks(std::vector<unsigned long> blocks, unsigned char* \
buffer, unsigned long maxlen); +    unsigned long loadSmallBlocks(const \
std::vector<unsigned long>& blocks, unsigned char* buffer, unsigned long maxlen); +   \
unsigned long loadSmallBlocks(const unsigned long* blocks, unsigned blockCount, \
unsigned char* buffer, unsigned long maxlen);  
     unsigned long loadSmallBlock(unsigned long block, unsigned char* buffer, \
unsigned long maxlen);  
@@ -996,18 +998,25 @@
     return result;
 }
 
-unsigned long StorageIO::loadBigBlocks(std::vector<unsigned long> blocks,
+unsigned long StorageIO::loadBigBlocks(const std::vector<unsigned long>& blocks,
                                        unsigned char* data, unsigned long maxlen)
 {
+    return loadBigBlocks(blocks.data(), blocks.size(), data, maxlen);
+}
+
+unsigned long StorageIO::loadBigBlocks(const unsigned long *blocks, unsigned \
blockCount, +                                       unsigned char *data, unsigned \
long maxlen) +{
     // sentinel
     if (!data) return 0;
     if (!file.good()) return 0;
-    if (blocks.size() < 1) return 0;
+    if (!blocks) return 0;
+    if (blockCount < 1) return 0;
     if (maxlen == 0) return 0;
 
     // read block one by one, seems fast enough
     unsigned long bytes = 0;
-    for (unsigned long i = 0; (i < blocks.size()) && (bytes < maxlen); i++) {
+    for (unsigned long i = 0; (i < blockCount) && (bytes < maxlen); i++) {
         unsigned long block = blocks[i];
         unsigned long pos =  bbat->blockSize * (block + 1);
         unsigned long p = (bbat->blockSize < maxlen - bytes) ? bbat->blockSize : \
maxlen - bytes; @@ -1028,22 +1037,23 @@
     if (!data) return 0;
     if (!file.good()) return 0;
 
-    // wraps call for loadBigBlocks
-    std::vector<unsigned long> blocks;
-    blocks.resize(1);
-    blocks[ 0 ] = block;
-
-    return loadBigBlocks(blocks, data, maxlen);
+    return loadBigBlocks(&block, 1, data, maxlen);
 }
 
 // return number of bytes which has been read
-unsigned long StorageIO::loadSmallBlocks(std::vector<unsigned long> blocks,
+unsigned long StorageIO::loadSmallBlocks(const std::vector<unsigned long>& blocks,
         unsigned char* data, unsigned long maxlen)
 {
+}
+
+unsigned long StorageIO::loadSmallBlocks(const unsigned long *blocks, unsigned \
blockCount, +                                         unsigned char *data, unsigned \
long maxlen) +{
     // sentinel
     if (!data) return 0;
     if (!file.good()) return 0;
-    if (blocks.size() < 1) return 0;
+    if (!blocks) return 0;
+    if (blockCount < 1) return 0;
     if (maxlen == 0) return 0;
 
     // our own local buffer
@@ -1051,7 +1061,7 @@
 
     // read small block one by one
     unsigned long bytes = 0;
-    for (unsigned long i = 0; (i < blocks.size()) && (bytes < maxlen); i++) {
+    for (unsigned long i = 0; (i < blockCount) && (bytes < maxlen); i++) {
         unsigned long block = blocks[i];
 
         // find where the small-block exactly is
@@ -1085,12 +1095,7 @@
     if (!data) return 0;
     if (!file.good()) return 0;
 
-    // wraps call for loadSmallBlocks
-    std::vector<unsigned long> blocks;
-    blocks.resize(1);
-    blocks.assign(1, block);
-
-    return loadSmallBlocks(blocks, data, maxlen);
+    return loadSmallBlocks(&block, 1, data, maxlen);
 }
 
 // =========== StreamIO ==========


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic