projects
/
SXSI
/
XMLTree.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rewrite printing function to make it faster. Now also handles
[SXSI/XMLTree.git]
/
bpcore.c
diff --git
a/bpcore.c
b/bpcore.c
index
acb37bf
..
df39e2c
100644
(file)
--- a/
bpcore.c
+++ b/
bpcore.c
@@
-1,11
+1,13
@@
#include <stdio.h>
#include <stdlib.h>
#include "bp.h"
#include <stdio.h>
#include <stdlib.h>
#include "bp.h"
+
#ifndef min
#ifndef min
-
#define min(x,y) ((x)<(y)?(x):(y))
+#define min(x,y) ((x)<(y)?(x):(y))
#endif
#endif
+
#ifndef max
#ifndef max
-
#define max(x,y) ((x)>(y)?(x):(y))
+#define max(x,y) ((x)>(y)?(x):(y))
#endif
#define NOTFOUND -2
#endif
#define NOTFOUND -2
@@
-177,59
+179,42
@@
int fwd_excess(bp *b,int s, int rel)
n = b->n; B = b->B;
i = s+1;
n = b->n; B = b->B;
i = s+1;
-#if 1
+
d = search_SB_r(b,i,rel);
if (d >= NOTFOUND) return d;
d = search_SB_r(b,i,rel);
if (d >= NOTFOUND) return d;
- i = min((SBid(i) + 1) << logSB,n);
+ i = min((SBid(i) + 1) << logSB,
n);
td = depth(b,s) + rel;
d = search_MB_r(b,i,td);
if (d >= NOTFOUND) return d;
td = depth(b,s) + rel;
d = search_MB_r(b,i,td);
if (d >= NOTFOUND) return d;
-#else
- if (i != SBfirst(i)) {
- d = search_SB_r(b,i,rel);
- if (d >= NOTFOUND) return d;
- }
-
- td = depth(b,s) + rel;
-
- i = SBid(i+SB-1) << logSB;
-
- if (i != MBfirst(i)) {
- d = search_MB_r(b,i,td);
- if (d >= NOTFOUND) return d;
- }
-#endif
m_ofs = b->m_ofs;
m_ofs = b->m_ofs;
+
i = MBid(s) + m_ofs;
i = MBid(s) + m_ofs;
+
while (i > 0) {
if ((i&1) == 0) {
i++;
m = b->mm[i];
M = b->mM[i];
while (i > 0) {
if ((i&1) == 0) {
i++;
m = b->mm[i];
M = b->mM[i];
- if (m <= td && td <= M) break;
- }
- i >>= 1;
- }
- if (i == 0) return NOTFOUND;
- while (i < m_ofs) {
- i <<= 1;
- m = b->mm[i];
- M = b->mM[i];
- if (!(m <= td && td <= M)) i++;
- }
- i -= m_ofs;
- i <<= logMB;
+ if (m <= td && td <= M) {
+ while (i < m_ofs) {
+ i <<= 1;
+ m = b->mm[i];
+ M = b->mM[i];
+ if (!(m <= td && td <= M)) i++;
+ }
+ i -= m_ofs;
+ i <<= logMB;
- d = search_MB_r(b,i,td);
- if (d >= NOTFOUND) return d;
-
- // unexpected (bug)
- printf("fwd_excess: ???\n");
- return -99;
+ return search_MB_r(b,i,td);
+ };
+ }
+ i >>= 1;
+ }
+ return NOTFOUND;
}
}