[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