aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-04-17 12:07:08 +0000
committerdrh <drh@noemail.net>2019-04-17 12:07:08 +0000
commit698c86f40de408b954381c7a42f0417704e491a9 (patch)
tree3a77766b3e672c05ad4f422b30a2475ae16c1fb0 /src/util.c
parent7e427337fe5df62439b980e2e091a89b36001d79 (diff)
downloadsqlite-698c86f40de408b954381c7a42f0417704e491a9.tar.gz
sqlite-698c86f40de408b954381c7a42f0417704e491a9.zip
Small performance improvement on the variable-length integer decoder:
sqlite3GetVarint(). FossilOrigin-Name: 5df2bf62fcd4dfdaa195062dddbd5ce5420bc239b2649ac8f547e0db34e7f0bb
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/src/util.c b/src/util.c
index dad2dba3f..d12e55516 100644
--- a/src/util.c
+++ b/src/util.c
@@ -918,23 +918,12 @@ int sqlite3PutVarint(unsigned char *p, u64 v){
u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
u32 a,b,s;
- a = *p;
- /* a: p0 (unmasked) */
- if (!(a&0x80))
- {
- *v = a;
+ if( ((signed char*)p)[0]>=0 ){
+ *v = *p;
return 1;
}
-
- p++;
- b = *p;
- /* b: p1 (unmasked) */
- if (!(b&0x80))
- {
- a &= 0x7f;
- a = a<<7;
- a |= b;
- *v = a;
+ if( ((signed char*)p)[1]>=0 ){
+ *v = ((u32)(p[0]&0x7f)<<7) | p[1];
return 2;
}
@@ -942,8 +931,9 @@ u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
- p++;
- a = a<<14;
+ a = ((u32)p[0])<<14;
+ b = p[1];
+ p += 2;
a |= *p;
/* a: p0<<14 | p2 (unmasked) */
if (!(a&0x80))