#ifndef SOURCE_UTIL_ILIST_NODE_H_
#define SOURCE_UTIL_ILIST_NODE_H_
#include <cassert>
namespace spvtools {
namespace utils {
template <class NodeType>
class IntrusiveList;
template <class NodeType>
class IntrusiveNodeBase { … };
template <class NodeType>
inline IntrusiveNodeBase<NodeType>::IntrusiveNodeBase()
: … { … }
template <class NodeType>
inline IntrusiveNodeBase<NodeType>::IntrusiveNodeBase(
const IntrusiveNodeBase&) { … }
template <class NodeType>
inline IntrusiveNodeBase<NodeType>& IntrusiveNodeBase<NodeType>::operator=(
const IntrusiveNodeBase&) { … }
template <class NodeType>
inline IntrusiveNodeBase<NodeType>::IntrusiveNodeBase(IntrusiveNodeBase&& that)
: … { … }
template <class NodeType>
IntrusiveNodeBase<NodeType>::~IntrusiveNodeBase() { … }
template <class NodeType>
IntrusiveNodeBase<NodeType>& IntrusiveNodeBase<NodeType>::operator=(
IntrusiveNodeBase&& that) { … }
template <class NodeType>
inline bool IntrusiveNodeBase<NodeType>::IsInAList() const { … }
template <class NodeType>
inline NodeType* IntrusiveNodeBase<NodeType>::NextNode() const { … }
template <class NodeType>
inline NodeType* IntrusiveNodeBase<NodeType>::PreviousNode() const { … }
template <class NodeType>
inline void IntrusiveNodeBase<NodeType>::InsertBefore(NodeType* pos) { … }
template <class NodeType>
inline void IntrusiveNodeBase<NodeType>::InsertAfter(NodeType* pos) { … }
template <class NodeType>
inline void IntrusiveNodeBase<NodeType>::RemoveFromList() { … }
template <class NodeType>
void IntrusiveNodeBase<NodeType>::ReplaceWith(NodeType* target) { … }
template <class NodeType>
bool IntrusiveNodeBase<NodeType>::IsEmptyList() { … }
}
}
#endif