#ifndef TSAN_ILIST_H
#define TSAN_ILIST_H
#include "sanitizer_common/sanitizer_internal_defs.h"
namespace __tsan {
class INode { … };
template <typename Base, INode Base::*Node, typename Elem = Base>
class IList { … };
template <typename Base, INode Base::*Node, typename Elem>
IList<Base, Node, Elem>::IList() { … }
template <typename Base, INode Base::*Node, typename Elem>
void IList<Base, Node, Elem>::PushFront(Elem* e) { … }
template <typename Base, INode Base::*Node, typename Elem>
void IList<Base, Node, Elem>::PushBack(Elem* e) { … }
template <typename Base, INode Base::*Node, typename Elem>
void IList<Base, Node, Elem>::Push(Elem* e, INode* after) { … }
template <typename Base, INode Base::*Node, typename Elem>
void IList<Base, Node, Elem>::Remove(Elem* e) { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::PopFront() { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::PopBack() { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::Front() { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::Back() { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::Prev(Elem* e) { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::Next(Elem* e) { … }
template <typename Base, INode Base::*Node, typename Elem>
uptr IList<Base, Node, Elem>::Size() const { … }
template <typename Base, INode Base::*Node, typename Elem>
bool IList<Base, Node, Elem>::Empty() const { … }
template <typename Base, INode Base::*Node, typename Elem>
bool IList<Base, Node, Elem>::Queued(Elem* e) const { … }
template <typename Base, INode Base::*Node, typename Elem>
INode* IList<Base, Node, Elem>::ToNode(Elem* e) { … }
template <typename Base, INode Base::*Node, typename Elem>
Elem* IList<Base, Node, Elem>::ToElem(INode* n) { … }
}
#endif