// Copyright 2022 Dolthub, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*
Package prolly includes:
 1. Serialize to and from the flatbuffer messages defined in go/serial
 2. Build trees of messages using a NodeStore abstraction
 2. Traverse and search NodeStore and related data structures

NodeStore is the primary interface for building/reading Tree data structures:
  - AddressMap, ProllyTreeNode, CommitClosure are the current Node flatbuffer
    message types
  - A Node contains at least keys and values
  - A Node can be referenced by an address hashed from its message contents
  - Nodes can store data besides keys/values, like address references
  - Most trees differentiate between 1) internal nodes, whose values are addresses
    that reference other nodes, and 2) leaf nodes, whose values are the main storage
    motivation
  - Leaf nodes' values can be addresses.
  - For example, blobs are stored in ProllyTreeNode leaves as value address.
    The value address reference is the Root hash of a Tree stored separated. In
    these cases, it is important to distinguish between 1) self-contained trees
    of a single type; and 2) the datastore as a whole, comprised of several types
    of trees.

// TODO ProllyTreeNode

// TODO CommitClosure

// TODO AddressMap
*/
package prolly
