Am 27.12.2013 20:55, schrieb Gordon:
On Friday, 27 December 2013 at 17:26:42 UTC, Benjamin Thaut wrote:
Also, gordon whats is keeping you from converting the textual
representation to a binary one? I mean, if you need to read that file
in often, you can easly preprocess it into a binary blob. You could
even modify my hashmap implementation to support binary serialization,
by just writing the entire array to a binary file and loading it again.
That would be fast...

This is intended to be a general-purpose CLI program to handle certain
text files (from other sources), not a in-house application where I can
restructure my data.

Text files are still the most ubiquitous way to share data (especially
without limiting the languages/tools other will use to process them).

But out of curiosity - how would you serialize it?

Given my hashmap implementation I would do something like

// method of hashmap
void serializeTo(FILE* f)
{
  fwrite(&m_FullCount, typeof(m_FullCount).sizeof, 1, f);
  ulong len = m_Data.length;
  fwrite(&len, typeof(len).sizeof, 1, f);
  fwrite(m_Data.ptr, Pair.sizeof, len, f);
}

// construct from file
void this(FILE* f)
{
  fread(&m_FullCount, typeof(m_FullCount).sizeof, 1, f);
  ulong len;
  fread(&len, typeof(len).sizeof, 1, f);
  m_Data = (cast(Pair*)malloc(Pair.sizeof * len))[0..len];
  fread(m_Data.ptr, Pair.sizeof, len, f);
}

The deserialization would be just one allocation and a big binary read from a file, which should be quite fast.

Kind Regards
Benjamin Thaut

Reply via email to