<commit_before>#ifndef UTIL_PLANE_H__
#define UTIL_PLANE_H__

namespace util {

template <typename T, int N>
class plane {

public:

	plane() {}

	plane(
			const util::point<T,N>& position,
			const util::point<T,N>& normal) :
		_position(position),
		_normal(normal) {}

	const util::point<T,N>& position() const { return _position; }
	const util::point<T,N>& normal()   const { return _normal; }
	util::point<T,N>& position() { return _position; }
	util::point<T,N>& normal()   { return _normal; }

private:

	util::point<T,N> _position;
	util::point<T,N> _normal;
};

} // namespace util

#endif // UTIL_PLANE_H__
<commit_msg>added operator<< to plane<commit_after>#ifndef UTIL_PLANE_H__
#define UTIL_PLANE_H__

namespace util {

template <typename T, int N>
class plane {

public:

	plane() {}

	plane(
			const util::point<T,N>& position,
			const util::point<T,N>& normal) :
		_position(position),
		_normal(normal) {}

	const util::point<T,N>& position() const { return _position; }
	const util::point<T,N>& normal()   const { return _normal; }
	util::point<T,N>& position() { return _position; }
	util::point<T,N>& normal()   { return _normal; }

private:

	util::point<T,N> _position;
	util::point<T,N> _normal;
};

template <typename T, int N>
std::ostream& operator<<(std::ostream& os, const util::plane<T,N>& plane) {

	os << "{" << plane.position() << ": " << plane.normal() << "}";
	return os;
}

} // namespace util

#endif // UTIL_PLANE_H__

{'fraction_non_alphanumeric': 0.17626886145404663, 'fraction_numerical': 0.0, 'mean_word_length': 4.859437751004016, 'pattern_counts': {'":': 1, '<': 37, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6732864', 'n_tokens_mistral': 570, 'n_tokens_neox': 536, 'n_words': 125}