2019-06-20 15:12:38 +00:00
|
|
|
.. _header:
|
|
|
|
|
|
|
|
*********
|
2019-07-01 16:33:29 +00:00
|
|
|
flat-tree
|
2019-06-20 15:12:38 +00:00
|
|
|
*********
|
|
|
|
|
|
|
|
.. image:: https://img.shields.io/badge/license-MIT-brightgreen.svg
|
|
|
|
:target: LICENSE
|
|
|
|
:alt: Repository license
|
|
|
|
|
|
|
|
.. image:: https://badge.fury.io/py/flat_tree.svg
|
|
|
|
:target: https://badge.fury.io/py/flat_tree
|
|
|
|
:alt: PyPI Package
|
|
|
|
|
2019-08-03 22:57:53 +00:00
|
|
|
.. image:: https://travis-ci.com/datpy/flat-tree.svg?branch=master
|
|
|
|
:target: https://travis-ci.com/datpy/flat-tree
|
|
|
|
:alt: Travis CI result
|
|
|
|
|
2019-06-20 15:12:38 +00:00
|
|
|
.. image:: https://readthedocs.org/projects/flat-tree/badge/?version=latest
|
|
|
|
:target: https://flat-tree.readthedocs.io/en/latest/?badge=latest
|
|
|
|
:alt: Documentation Status
|
|
|
|
|
|
|
|
.. image:: https://img.shields.io/badge/support-maintainers-brightgreen.svg
|
|
|
|
:target: https://decentral1.se/
|
|
|
|
:alt: Support badge
|
|
|
|
|
|
|
|
.. _introduction:
|
|
|
|
|
|
|
|
Utilities for navigating flat trees
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
From `The Dat Protocol`_:
|
|
|
|
|
|
|
|
.. _The Dat Protocol: https://datprotocol.github.io/book/ch01-01-flat-tree.html
|
|
|
|
|
|
|
|
Flat Trees are the core data structure that power Dat's Hypercore feeds. They
|
|
|
|
allow us to deterministically represent a tree structure as a vector. This is
|
|
|
|
particularly useful because vectors map elegantly to disk and memory.
|
|
|
|
|
|
|
|
Because Flat Trees are deterministic and pre-computed, there is no overhead
|
|
|
|
to using them. In effect this means that Flat Trees are a specific way of
|
|
|
|
indexing into a vector more than they are their own data structure. This makes
|
|
|
|
them uniquely efficient and convenient to implement in a wide range of
|
|
|
|
languages.
|
|
|
|
|
2019-10-06 13:29:34 +00:00
|
|
|
.. _example:
|
|
|
|
|
|
|
|
Example
|
|
|
|
*******
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
You can represent a binary tree in a simple
|
|
|
|
flat list using the following structure:
|
|
|
|
|
|
|
|
3
|
|
|
|
1 5
|
|
|
|
0 2 4 6 ...
|
|
|
|
|
|
|
|
This module exposes a series of functions
|
|
|
|
to help you build and maintain this data structure.
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
from flat_tree import FlatTreeAccessor
|
|
|
|
|
|
|
|
tree_access = FlatTreeAccessor()
|
|
|
|
|
|
|
|
# get array index for depth: 1, offset: 0
|
|
|
|
tree_access.index(1, 0)
|
|
|
|
|
2019-06-20 15:12:38 +00:00
|
|
|
.. _documentation:
|
|
|
|
|
|
|
|
Documentation
|
|
|
|
*************
|
|
|
|
|
2019-07-01 16:33:29 +00:00
|
|
|
* https://flat-tree.readthedocs.io
|
2019-06-20 15:12:38 +00:00
|
|
|
|
|
|
|
.. _mirroring:
|
|
|
|
|
|
|
|
Mirroring
|
|
|
|
*********
|
|
|
|
|
2019-08-03 22:42:30 +00:00
|
|
|
* https://hack.decentral1.se/datpy/flat-tree (primary)
|
|
|
|
* https://github.com/datpy/flat-tree
|