diff options
author | Albert Astals Cid <aacid@kde.org> | 2009-06-07 18:37:20 +0200 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2009-06-07 18:37:20 +0200 |
commit | 831288c13c3a7502bbccd1313c6e376283be367c (patch) | |
tree | 88227fad17ab28a3ae09e275c81c67376cd5bdc9 | |
parent | 3d40dcad850a2bc0e28845a15722db0c79920135 (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.cc | 19 |
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; } } |