Up to Main Index Up to Journal for January, 2014
JOURNAL FOR FRIDAY 17TH JANUARY, 2014
______________________________________________________________________________
SUBJECT: Decoders and Encoders
DATE: Fri 17 Jan 23:17:34 GMT 2014
What a busy old week it's been. Ended up working late on Wednesday so WolfMUD
Wednesday was bumped to Thursday instead.
While working on the account creation code I realise I still hadn't written
the missing half of recordjar. We have a decoder but not an encoder -
something I'd been ignoring until now.
The recordjar decoder was written quite early on and I knew I hadn't got it
right even then. Which is probably why the opposing half was never done.
Before I could start work on the encoder the decoder obviously needed sorting
out first.
While going over the decoder code and trying to decide on the best way to
improve it I found some extreme ugliness in the basic.Init() code. So I became
a little side tracked while I sorted that out. The result is a new helper in
the decoder called decoder.PairList, this little helper will take a whitespace
separated list of pairs - which are delimited by any non-letter or non-digit.
For example exits are defined as:
Exits: E→L3 SE→L4 S→L2
PairList will return a slice of 2 element string arrays, [][2]string. If there
is more than one non-letter or non-digit the pair will only be split on the
first of them. In the above example we would get a slice of 3 arrays:
[][2]string{
{"E","L3"},
{"SE","L4"},
{"S","L2"},
}
Easy to range over and simplified basic.Init() quite a bit.
After that distraction I went back to going over the decoder code. Currently
the decoder helpers take a Record which is not good. For example to decode a
list of pairs we have:
recordjar.Record.PairList()
Now we also want that for encoding as well! What I have decided to do is
define Decoder and Encoder as an alias of Record. Now we can have:
recordjar.Decoder.PairList(property string) [][2]string
recordjar.Encoder.PairList(property string, [][2]string)
Which makes things nice and symmetrical. Also you don't have to use the
helpers, you can still access properties directly in the record slice if you
want to. For example:
d.PairList("exits") // Using decoder helper
d["exits"] // Direct raw string
So now I'm just switching the unmarshalers over to using decoders and then I
can write the marshalers which will use the encoders. At that point we should
be able to load and save things. This includes saving a player with all their
gear as well - the recursiveness for saving will just be there the same as
loading is now ;)
--
Diddymus
Up to Main Index Up to Journal for January, 2014