<commit_before>#include <boost/pool/object_pool.hpp>
#include <boost/optional.hpp>
#include "../incl/search.hpp"
#include "../structs/htable.hpp"
#include "../structs/intpq.hpp"
#include "../structs/binheap.hpp"

template <class D, class Cost> struct Node {
	typename D::State state;
	typename D::Oper pop;
	Cost g, f;
	Node *htblnxt, *parent;
	int openind;

	Node(void) : openind(-1) {}
};

template <class D, class Cost> class OpenList {
public:
	const char *kind(void) { return "binary heap"; }
	void push(Node<D, Cost> *n) { heap.push(n); }
	Node<D, Cost> *pop(void) {
		boost::optional< Node<D, Cost>* > p = heap.pop();
		if (!p)
			return NULL;
		return *p;
	}
	void pre_update(Node<D, Cost> *n) { }
	void post_update(Node<D, Cost> *n) { heap.update(n->openind); }
	bool empty(void) { return heap.empty(); }
	bool mem(Node<D, Cost> *n) { return n->openind != -1; }
private:
	struct Ops {
 			static bool pred(Node<D, Cost> *a, Node<D, Cost> *b) {
			if (a->f == b->f)
				return a->g > b->g;
			return a->f < b->f;
		}
		static void setind(Node<D, Cost> *n, int i) { n->openind = i; }
	};
	Binheap< Ops, Node<D, Cost>* > heap;
};

template <class D> struct Node <D, char> {
	typename D::State state;
	typename D::Oper pop;
	typename D::Cost g, f;
	Node *htblnxt, *parent;
	Node *nxt, *prev;
<commit_msg>Remove a tab.<commit_after>#include <boost/pool/object_pool.hpp>
#include <boost/optional.hpp>
#include "../incl/search.hpp"
#include "../structs/htable.hpp"
#include "../structs/intpq.hpp"
#include "../structs/binheap.hpp"

template <class D, class Cost> struct Node {
	typename D::State state;
	typename D::Oper pop;
	Cost g, f;
	Node *htblnxt, *parent;
	int openind;

	Node(void) : openind(-1) {}
};

template <class D, class Cost> class OpenList {
public:
	const char *kind(void) { return "binary heap"; }
	void push(Node<D, Cost> *n) { heap.push(n); }
	Node<D, Cost> *pop(void) {
		boost::optional< Node<D, Cost>* > p = heap.pop();
		if (!p)
			return NULL;
		return *p;
	}
	void pre_update(Node<D, Cost> *n) { }
	void post_update(Node<D, Cost> *n) { heap.update(n->openind); }
	bool empty(void) { return heap.empty(); }
	bool mem(Node<D, Cost> *n) { return n->openind != -1; }
private:
	struct Ops {
 		static bool pred(Node<D, Cost> *a, Node<D, Cost> *b) {
			if (a->f == b->f)
				return a->g > b->g;
			return a->f < b->f;
		}
		static void setind(Node<D, Cost> *n, int i) { n->openind = i; }
	};
	Binheap< Ops, Node<D, Cost>* > heap;
};

template <class D> struct Node <D, char> {
	typename D::State state;
	typename D::Oper pop;
	typename D::Cost g, f;
	Node *htblnxt, *parent;
	Node *nxt, *prev;

{'fraction_non_alphanumeric': 0.19373328238440962, 'fraction_numerical': 0.0015284677111196026, 'mean_word_length': 3.768670309653916, 'pattern_counts': {'":': 0, '<': 41, '<?xml version=': 0, '>': 59, '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': '572940', 'n_tokens_mistral': 1090, 'n_tokens_neox': 1056, 'n_words': 292}