Open josefnpat opened 11 years ago
Not so much as overlooked as (currently) avoided. I've yet to find an (easy) way to coerce Lua to encode/decode little endian ordered doubles. I left the function undefined so there is no ambiguity as to what will happen when you try to encode a double.
Have a look at my code at https://github.com/daurnimator/mongol/blob/master/mongol/ll.lua which is what most people end up using
Clever :) I've resisted luaJIT/ffi because I wanted to keep the implementation pure (I've got some embedded hosts I'm using), but I never thought of exploiting the Lua bytecode!
However, this approach would be a problem with big-endian machines, wouldn't it? Hmm... BSON specifies little-endian encoding and I guess just about all modern CPUs are little endian these days (ARM defaults to this, Intel, etc), so it should be portable most everywhere...
Mind if I incorporate your technique?
sure/go for it.
IEEE754 floating point numbers do not have an endianess.
FWIW you can steal any of the code I wrote here: https://github.com/daurnimator/mongol/blob/master/mongol/bson.lua
For the record, I abandoned mongo/bson when I realise that bson "dictionarys" are ordered; i.e. they are an ordered array of key/value pairs, and can't actually represent a hash.
IEEE754 floating point numbers do not have an endianess.
Yes. Of course. Duh on my part.
For the record, I abandoned mongo/bson when I realise that bson "dictionarys" are ordered;
Hmm... the spec doesn't exactly make that obvious, but I do see some rather vocal replies (that, "of course", it is ordered) on the mailing list.
I don't use mongo. I use bson as a less verbose json for some simple payload encoding (where the doc is picked apart via hash indexes).
Thanks for pointing that out though.
It seems that double values don't work! I don't see
function bson.to_double
defined anywhere.https://github.com/tcoram/bson-lua/blob/master/bson.lua#L81
Any chance you can clean this up, as I am not familiar with the bson spec sheet.