diff options
author | drh <drh@noemail.net> | 2019-04-17 12:07:08 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-04-17 12:07:08 +0000 |
commit | 698c86f40de408b954381c7a42f0417704e491a9 (patch) | |
tree | 3a77766b3e672c05ad4f422b30a2475ae16c1fb0 /src/util.c | |
parent | 7e427337fe5df62439b980e2e091a89b36001d79 (diff) | |
download | sqlite-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.c | 24 |
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)) |