File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -701,8 +701,21 @@ class sqlite_index_blaster : public btree_handler<sqlite_index_blaster> {
701701 return ret;
702702 }
703703
704- double read_double (const uint8_t *ptr) {
705- return (double ) *ptr; // TODO: assuming little endian?
704+ double read_double (const uint8_t *data) {
705+ uint64_t value;
706+ std::memcpy (&value, data, sizeof (uint64_t )); // read 8 bytes from data pointer
707+ // SQLite stores 64-bit reals as big-endian integers
708+ value = ((value & 0xff00000000000000ull ) >> 56 ) | // byte 1 -> byte 8
709+ ((value & 0x00ff000000000000ull ) >> 40 ) | // byte 2 -> byte 7
710+ ((value & 0x0000ff0000000000ull ) >> 24 ) | // byte 3 -> byte 6
711+ ((value & 0x000000ff00000000ull ) >> 8 ) | // byte 4 -> byte 5
712+ ((value & 0x00000000ff000000ull ) << 8 ) | // byte 5 -> byte 4
713+ ((value & 0x0000000000ff0000ull ) << 24 ) | // byte 6 -> byte 3
714+ ((value & 0x000000000000ff00ull ) << 40 ) | // byte 7 -> byte 2
715+ ((value & 0x00000000000000ffull ) << 56 ); // byte 8 -> byte 1
716+ double result;
717+ std::memcpy (&result, &value, sizeof (double )); // convert the integer to a double
718+ return result;
706719 }
707720
708721 // See .h file for API description
You can’t perform that action at this time.
0 commit comments