summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2009-06-07 18:37:20 +0200
committerAlbert Astals Cid <aacid@kde.org>2009-06-07 18:37:20 +0200
commit831288c13c3a7502bbccd1313c6e376283be367c (patch)
tree88227fad17ab28a3ae09e275c81c67376cd5bdc9
parent3d40dcad850a2bc0e28845a15722db0c79920135 (diff)
Optimize roll() a bit
If the number of times to roll is > than half the number of items rotate in the reverse direction Makes it be 33% of exec() instead of 42%
-rw-r--r--poppler/Function.cc19
1 files changed, 14 insertions, 5 deletions
diff --git a/poppler/Function.cc b/poppler/Function.cc
index f81f0fdc..9c53cecb 100644
--- a/poppler/Function.cc
+++ b/poppler/Function.cc
@@ -1001,12 +1001,21 @@ void PSStack::roll(int n, int j) {
if (n <= 0 || j == 0) {
return;
}
- for (i = 0; i < j; ++i) {
- obj = stack[sp];
- for (k = sp; k < sp + n - 1; ++k) {
- stack[k] = stack[k+1];
+ if (j <= n / 2) {
+ for (i = 0; i < j; ++i) {
+ obj = stack[sp];
+ for (k = sp; k < sp + n - 1; ++k) {
+ stack[k] = stack[k+1];
+ }
+ stack[sp + n - 1] = obj;
+ }
+ } else {
+ j = n - j;
+ obj = stack[sp + n - 1];
+ for (k = sp + n - 1; k > sp; --k) {
+ stack[k] = stack[k-1];
}
- stack[sp + n - 1] = obj;
+ stack[sp] = obj;
}
}