#ifndef SOURCE_UTIL_ILIST_H_
#define SOURCE_UTIL_ILIST_H_
#include <cassert>
#include <memory>
#include <type_traits>
#include <vector>
#include "source/util/ilist_node.h"
namespace spvtools {
namespace utils {
template <class NodeType>
class IntrusiveList { … };
template <class NodeType>
inline IntrusiveList<NodeType>::IntrusiveList() : … { … }
template <class NodeType>
IntrusiveList<NodeType>::IntrusiveList(IntrusiveList&& list) : … { … }
template <class NodeType>
IntrusiveList<NodeType>::~IntrusiveList() { … }
template <class NodeType>
IntrusiveList<NodeType>& IntrusiveList<NodeType>::operator=(
IntrusiveList<NodeType>&& list) { … }
template <class NodeType>
inline typename IntrusiveList<NodeType>::iterator
IntrusiveList<NodeType>::begin() { … }
template <class NodeType>
inline typename IntrusiveList<NodeType>::iterator
IntrusiveList<NodeType>::end() { … }
template <class NodeType>
inline typename IntrusiveList<NodeType>::const_iterator
IntrusiveList<NodeType>::begin() const { … }
template <class NodeType>
inline typename IntrusiveList<NodeType>::const_iterator
IntrusiveList<NodeType>::end() const { … }
template <class NodeType>
inline typename IntrusiveList<NodeType>::const_iterator
IntrusiveList<NodeType>::cbegin() const { … }
template <class NodeType>
inline typename IntrusiveList<NodeType>::const_iterator
IntrusiveList<NodeType>::cend() const { … }
template <class NodeType>
void IntrusiveList<NodeType>::push_back(NodeType* node) { … }
template <class NodeType>
bool IntrusiveList<NodeType>::empty() const { … }
template <class NodeType>
void IntrusiveList<NodeType>::clear() { … }
template <class NodeType>
NodeType& IntrusiveList<NodeType>::front() { … }
template <class NodeType>
NodeType& IntrusiveList<NodeType>::back() { … }
template <class NodeType>
const NodeType& IntrusiveList<NodeType>::front() const { … }
template <class NodeType>
const NodeType& IntrusiveList<NodeType>::back() const { … }
template <class NodeType>
void IntrusiveList<NodeType>::Splice(iterator where,
IntrusiveList<NodeType>* other,
iterator first, iterator last) { … }
template <class NodeType>
void IntrusiveList<NodeType>::Check(NodeType* start) { … }
}
}
#endif