retdec
Public Types | Public Member Functions | Private Attributes | Friends | List of all members
retdec::common::RangeContainer< T > Class Template Reference

#include <range.h>

Collaboration diagram for retdec::common::RangeContainer< T >:
Collaboration graph
[legend]

Public Types

using RangeType = Range< T >
 
using RangeElementType = T
 
using iterator = typename std::vector< RangeType >::iterator
 
using const_iterator = typename std::vector< RangeType >::const_iterator
 
typedef RangeType value_type
 

Public Member Functions

 RangeContainer ()=default
 
 RangeContainer (const RangeContainer &)=default
 
 RangeContainer (RangeContainer &&)=default
 
RangeContaineroperator= (const RangeContainer &)=default
 
RangeContaineroperator= (RangeContainer &&)=default
 
bool operator== (const RangeContainer &o) const
 
bool operator!= (const RangeContainer &o) const
 
auto begin ()
 
auto end ()
 
auto begin () const
 
auto end () const
 
std::size_t size () const
 
bool empty () const
 
void clear ()
 
auto front ()
 
auto front () const
 
auto back ()
 
auto back () const
 
decltype(auto) operator[] (std::size_t index)
 
decltype(auto) operator[] (std::size_t index) const
 
template<typename RangeT >
std::pair< iterator, bool > insert (RangeT &&range)
 
template<typename RangeT >
std::pair< iterator, bool > insert (const_iterator, RangeT &&range)
 
std::pair< iterator, bool > insert (const RangeElementType &s, const RangeElementType &e)
 
const RangeTypegetRange (const RangeElementType &e) const
 
bool contains (const RangeElementType &e) const
 
bool containsExact (const RangeType &r) const
 
void remove (const RangeType &r)
 
void remove (const RangeElementType &s, const RangeElementType &e)
 

Private Attributes

std::vector< RangeType_ranges
 

Friends

std::ostream & operator<< (std::ostream &out, const RangeContainer< RangeElementType > &r)
 

Detailed Description

template<typename T>
class retdec::common::RangeContainer< T >

Range container provides storing multiple ranges in one container while keeping the ranges disjoint. This container also looks for continuous ranges and merges them together into one range. All ranges are kept in ascending order.

Template Parameters
TRange element type.

Member Typedef Documentation

◆ const_iterator

template<typename T >
using retdec::common::RangeContainer< T >::const_iterator = typename std::vector<RangeType>::const_iterator

◆ iterator

template<typename T >
using retdec::common::RangeContainer< T >::iterator = typename std::vector<RangeType>::iterator

◆ RangeElementType

template<typename T >
using retdec::common::RangeContainer< T >::RangeElementType = T

◆ RangeType

template<typename T >
using retdec::common::RangeContainer< T >::RangeType = Range<T>

◆ value_type

template<typename T >
typedef RangeType retdec::common::RangeContainer< T >::value_type

Constructor & Destructor Documentation

◆ RangeContainer() [1/3]

template<typename T >
retdec::common::RangeContainer< T >::RangeContainer ( )
default

◆ RangeContainer() [2/3]

template<typename T >
retdec::common::RangeContainer< T >::RangeContainer ( const RangeContainer< T > &  )
default

◆ RangeContainer() [3/3]

template<typename T >
retdec::common::RangeContainer< T >::RangeContainer ( RangeContainer< T > &&  )
default

Member Function Documentation

◆ back() [1/2]

template<typename T >
auto retdec::common::RangeContainer< T >::back ( )
inline

◆ back() [2/2]

template<typename T >
auto retdec::common::RangeContainer< T >::back ( ) const
inline

◆ begin() [1/2]

template<typename T >
auto retdec::common::RangeContainer< T >::begin ( )
inline

◆ begin() [2/2]

template<typename T >
auto retdec::common::RangeContainer< T >::begin ( ) const
inline

◆ clear()

template<typename T >
void retdec::common::RangeContainer< T >::clear ( )
inline

◆ contains()

template<typename T >
bool retdec::common::RangeContainer< T >::contains ( const RangeElementType e) const
inline

◆ containsExact()

template<typename T >
bool retdec::common::RangeContainer< T >::containsExact ( const RangeType r) const
inline

◆ empty()

template<typename T >
bool retdec::common::RangeContainer< T >::empty ( ) const
inline

◆ end() [1/2]

template<typename T >
auto retdec::common::RangeContainer< T >::end ( )
inline

◆ end() [2/2]

template<typename T >
auto retdec::common::RangeContainer< T >::end ( ) const
inline

◆ front() [1/2]

template<typename T >
auto retdec::common::RangeContainer< T >::front ( )
inline

◆ front() [2/2]

template<typename T >
auto retdec::common::RangeContainer< T >::front ( ) const
inline

◆ getRange()

template<typename T >
const RangeType* retdec::common::RangeContainer< T >::getRange ( const RangeElementType e) const
inline

◆ insert() [1/3]

template<typename T >
std::pair<iterator,bool> retdec::common::RangeContainer< T >::insert ( const RangeElementType s,
const RangeElementType e 
)
inline

◆ insert() [2/3]

template<typename T >
template<typename RangeT >
std::pair<iterator,bool> retdec::common::RangeContainer< T >::insert ( const_iterator  ,
RangeT &&  range 
)
inline

◆ insert() [3/3]

template<typename T >
template<typename RangeT >
std::pair<iterator,bool> retdec::common::RangeContainer< T >::insert ( RangeT &&  range)
inline

Adds new range into the container. Range is merged with other ranges if it overlaps it or is continuous with it. This method invalidates iterators.

Template Parameters
RangeTRange type.
Parameters
rangeRange to insert.
Returns
Iterator to the inserted (or existing) range, and bool flag if range was inserted or it already existed. Iterator may become invalid after the next insertion or other operation modifying the underlying container.

◆ operator!=()

template<typename T >
bool retdec::common::RangeContainer< T >::operator!= ( const RangeContainer< T > &  o) const
inline

◆ operator=() [1/2]

template<typename T >
RangeContainer& retdec::common::RangeContainer< T >::operator= ( const RangeContainer< T > &  )
default

◆ operator=() [2/2]

template<typename T >
RangeContainer& retdec::common::RangeContainer< T >::operator= ( RangeContainer< T > &&  )
default

◆ operator==()

template<typename T >
bool retdec::common::RangeContainer< T >::operator== ( const RangeContainer< T > &  o) const
inline

◆ operator[]() [1/2]

template<typename T >
decltype(auto) retdec::common::RangeContainer< T >::operator[] ( std::size_t  index)
inline

◆ operator[]() [2/2]

template<typename T >
decltype(auto) retdec::common::RangeContainer< T >::operator[] ( std::size_t  index) const
inline

◆ remove() [1/2]

template<typename T >
void retdec::common::RangeContainer< T >::remove ( const RangeElementType s,
const RangeElementType e 
)
inline

◆ remove() [2/2]

template<typename T >
void retdec::common::RangeContainer< T >::remove ( const RangeType r)
inline

◆ size()

template<typename T >
std::size_t retdec::common::RangeContainer< T >::size ( ) const
inline

Friends And Related Function Documentation

◆ operator<<

template<typename T >
std::ostream& operator<< ( std::ostream &  out,
const RangeContainer< RangeElementType > &  r 
)
friend

Member Data Documentation

◆ _ranges

template<typename T >
std::vector<RangeType> retdec::common::RangeContainer< T >::_ranges
private

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