1. 03 Sep, 2018 3 commits
  2. 31 Aug, 2018 1 commit
  3. 30 Aug, 2018 6 commits
  4. 29 Aug, 2018 6 commits
  5. 27 Aug, 2018 8 commits
  6. 25 Aug, 2018 4 commits
  7. 23 Aug, 2018 4 commits
  8. 22 Aug, 2018 4 commits
  9. 20 Aug, 2018 4 commits
    • Daniel Salzman's avatar
      Merge branch 'trie_cow' · 7d3bcef1
      Daniel Salzman authored
      close #591
    • Tony Finch's avatar
      trie: support for copy-on-write transactions · 1bc09711
      Tony Finch authored
      A COW transaction allows a trie to be used for reading concurrently
      while a modified version of the trie is being prepared. The change
      can be committed by swapping the new trie root in place of the old one.
      Internally, this feature uses one bit reference counts to identify which
      parts of the trie are shared between the old and new versions, which
      parts are new-only (so can be mutated) and which parts are old-only
      (and will be free()d after commit).
    • Tony Finch's avatar
      trie: refactor to prepare for copy-on-write support · e7b7e187
      Tony Finch authored
      No functional change.
      The point of this commit is to make it possible to stash a few
      flags in leaf nodes as well as branch nodes, though we don't
      yet exercise this possibility in any meaningful way.
      This fixes a foolish mistake in the original qp trie data structure
      declarations: the combination of unions and bitfields is a complete
      disaster for portability, and it gets into dangerous territory wrt
      compiler optimization. Instead, we just use a big enough word (uint64_t)
      which is broken up into fields using accessor macros and inline functions,
      and cast it to a pointer when necessary. We don't actually care about
      the detailed layout in memory, just the numeric value, so a union was
      the wrong tool.
    • Daniel Salzman's avatar