vg
tools for working with variation graphs
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
vg::ZipCodeTree::reverse_iterator Class Reference

#include <zip_code_tree.hpp>

Public Types

enum  State {
  S_START, S_SCAN_CHAIN, S_STACK_SNARL, S_SCAN_SNARL,
  S_SKIP_CHAIN
}
 

Public Member Functions

 reverse_iterator (vector< tree_item_t >::const_reverse_iterator rbegin, vector< tree_item_t >::const_reverse_iterator rend, size_t distance_limit=std::numeric_limits< size_t >::max())
 
 reverse_iterator (const reverse_iterator &other)
 
 reverse_iterator (reverse_iterator &&other)
 
reverse_iteratoroperator= (const reverse_iterator &other)
 
reverse_iteratoroperator= (reverse_iterator &&other)
 
reverse_iteratoroperator++ ()
 Move left. More...
 
bool operator== (const reverse_iterator &other) const
 Compare for equality to see if we hit end (the past-the-left position) More...
 
bool operator!= (const reverse_iterator &other) const
 Compare for inequality. More...
 
seed_result_t operator* () const
 Get the index and orientation of the seed we are currently at, and the distance to it. More...
 

Private Member Functions

std::stack< size_t > & stack ()
 Accessor to lazily initialize a stack for the iterator. More...
 
void push (size_t value)
 Push a value to the stack. More...
 
size_t pop ()
 Pop a value from the stack and return it. More...
 
size_t & top ()
 Get a mutable reference to the value on top of the stack. More...
 
void dup ()
 Duplicate the top item on the stack. More...
 
size_t depth () const
 Check stack depth. More...
 
void swap ()
 Reverse the top two elements of the stack. More...
 
void state (State new_state)
 Adopt a new state. More...
 
void halt ()
 
bool tick ()
 

Private Attributes

vector< tree_item_t >::const_reverse_iterator it
 Where we are in the stored tree. More...
 
vector< tree_item_t >::const_reverse_iterator rend
 Where the rend is where we have to stop. More...
 
size_t distance_limit
 Distance limit we will go up to. More...
 
std::unique_ptr< std::stack< size_t > > stack_data
 
State current_state
 Current state of the automaton. More...
 

Detailed Description

Iterator that looks left in the tree from a seed, possibly up to a maximum base distance.

See https://github.com/benedictpaten/long_read_giraffe_chainer_prototype/blob/b590c34055474b0c901a681a1aa99f1651abb6a4/zip_tree_iterator.py.

Member Enumeration Documentation

◆ State

Type for the state of the I-can't-believe-it's-not-a-pushdown-automaton

Enumerator
S_START 
S_SCAN_CHAIN 
S_STACK_SNARL 
S_SCAN_SNARL 
S_SKIP_CHAIN 

Constructor & Destructor Documentation

◆ reverse_iterator() [1/3]

vg::ZipCodeTree::reverse_iterator::reverse_iterator ( vector< tree_item_t >::const_reverse_iterator  rbegin,
vector< tree_item_t >::const_reverse_iterator  rend,
size_t  distance_limit = std::numeric_limits<size_t>::max() 
)

Make a reverse iterator wrapping the given reverse iterator, until the given rend, with the given distance limit.

◆ reverse_iterator() [2/3]

vg::ZipCodeTree::reverse_iterator::reverse_iterator ( const reverse_iterator other)

◆ reverse_iterator() [3/3]

vg::ZipCodeTree::reverse_iterator::reverse_iterator ( reverse_iterator &&  other)

Member Function Documentation

◆ depth()

auto vg::ZipCodeTree::reverse_iterator::depth ( ) const
private

Check stack depth.

◆ dup()

auto vg::ZipCodeTree::reverse_iterator::dup ( )
private

Duplicate the top item on the stack.

◆ halt()

auto vg::ZipCodeTree::reverse_iterator::halt ( )
private

Stop parsing because nothing else can be below the distance limit. This moves the current iterator it.

◆ operator!=()

bool vg::ZipCodeTree::reverse_iterator::operator!= ( const reverse_iterator other) const
inline

Compare for inequality.

◆ operator*()

auto vg::ZipCodeTree::reverse_iterator::operator* ( ) const

Get the index and orientation of the seed we are currently at, and the distance to it.

◆ operator++()

auto vg::ZipCodeTree::reverse_iterator::operator++ ( )

Move left.

◆ operator=() [1/2]

auto vg::ZipCodeTree::reverse_iterator::operator= ( const reverse_iterator other)

◆ operator=() [2/2]

auto vg::ZipCodeTree::reverse_iterator::operator= ( reverse_iterator &&  other)

◆ operator==()

auto vg::ZipCodeTree::reverse_iterator::operator== ( const reverse_iterator other) const

Compare for equality to see if we hit end (the past-the-left position)

◆ pop()

auto vg::ZipCodeTree::reverse_iterator::pop ( )
private

Pop a value from the stack and return it.

◆ push()

auto vg::ZipCodeTree::reverse_iterator::push ( size_t  value)
private

Push a value to the stack.

◆ stack()

std::stack<size_t>& vg::ZipCodeTree::reverse_iterator::stack ( )
inlineprivate

Accessor to lazily initialize a stack for the iterator.

◆ state()

auto vg::ZipCodeTree::reverse_iterator::state ( State  new_state)
private

Adopt a new state.

◆ swap()

auto vg::ZipCodeTree::reverse_iterator::swap ( )
private

Reverse the top two elements of the stack.

◆ tick()

auto vg::ZipCodeTree::reverse_iterator::tick ( )
private

Tick the automaton, looking at the symbol at *it and updating the stack and current_state. Returns true to yield a value at the current symbol, or to halt, and false otherwise.

◆ top()

auto vg::ZipCodeTree::reverse_iterator::top ( )
private

Get a mutable reference to the value on top of the stack.

Member Data Documentation

◆ current_state

State vg::ZipCodeTree::reverse_iterator::current_state
private

Current state of the automaton.

◆ distance_limit

size_t vg::ZipCodeTree::reverse_iterator::distance_limit
private

Distance limit we will go up to.

◆ it

vector<tree_item_t>::const_reverse_iterator vg::ZipCodeTree::reverse_iterator::it
private

Where we are in the stored tree.

◆ rend

vector<tree_item_t>::const_reverse_iterator vg::ZipCodeTree::reverse_iterator::rend
private

Where the rend is where we have to stop.

◆ stack_data

std::unique_ptr<std::stack<size_t> > vg::ZipCodeTree::reverse_iterator::stack_data
private

Stack for computing distances. Not allocated unless we actually go to use it, so rend() deosn't need to carry one.


The documentation for this class was generated from the following files: