#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_POSITION_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_POSITION_H_
#include "base/dcheck_is_on.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/editing/editing_strategy.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
namespace blink {
class Node;
class TreeScope;
enum class PositionAnchorType : unsigned { … };
template <typename Strategy>
class PositionTemplate { … };
extern template class CORE_EXTERN_TEMPLATE_EXPORT
PositionTemplate<EditingStrategy>;
extern template class CORE_EXTERN_TEMPLATE_EXPORT
PositionTemplate<EditingInFlatTreeStrategy>;
Position;
PositionInFlatTree;
template <typename Strategy>
bool operator==(const PositionTemplate<Strategy>& a,
const PositionTemplate<Strategy>& b) { … }
template <typename Strategy>
bool operator!=(const PositionTemplate<Strategy>& a,
const PositionTemplate<Strategy>& b) { … }
CORE_EXPORT PositionInFlatTree ToPositionInFlatTree(const Position&);
CORE_EXPORT PositionInFlatTree ToPositionInFlatTree(const PositionInFlatTree&);
CORE_EXPORT Position ToPositionInDOMTree(const Position&);
CORE_EXPORT Position ToPositionInDOMTree(const PositionInFlatTree&);
template <typename Strategy>
PositionTemplate<Strategy> FromPositionInDOMTree(const Position&);
template <>
inline Position FromPositionInDOMTree<EditingStrategy>(
const Position& position) { … }
template <>
inline PositionInFlatTree FromPositionInDOMTree<EditingInFlatTreeStrategy>(
const Position& position) { … }
CORE_EXPORT std::ostream& operator<<(std::ostream&, PositionAnchorType);
CORE_EXPORT std::ostream& operator<<(std::ostream&, const Position&);
CORE_EXPORT std::ostream& operator<<(std::ostream&, const PositionInFlatTree&);
}
#if DCHECK_IS_ON()
void ShowTree(const blink::Position&);
void ShowTree(const blink::Position*);
#endif
#endif