<commit_before>#pragma once


#include "editor/ieditor_command.h"
#include "engine/blob.h"
#include "engine/metaprogramming.h"


namespace Lumix
{


struct PathItem
{
	PathItem() {}


	PathItem(const char* name, PathItem* prev)
		: name(name)
		, prev(prev)
	{
		if (prev) prev->next = this;
	}


	PathItem(int index, PathItem* prev)
		: index(index)
		, prev(prev)
	{
		if (prev) prev->next = this;
	}


	const char* name = nullptr;
	int index = -1;
	PathItem* next = nullptr;
	PathItem* prev = nullptr;
};


struct NoUIAttribute {};


template <typename... Attributes>
auto attributes(Attributes... attributes)
{
	return makeTuple(attributes...);
}


template <typename F>
struct Visitor
{
	Visitor(const F& f) : f(f) {}


	template <typename T>
	struct ValueProxy
	{
		ValueProxy(T& value) : value(value) {}
		void addItem(int) const { ASSERT(false); }
		void removeItem(int) const { ASSERT(false); }
		int size() const { ASSERT(false); return -1; }

		template <typename T2> void set(const T2& v) { value = v; }
		template <typename T2> auto setHelper(const T2& v, int) const -> decltype(set(v), void()) { value = v; }
		template <typename T2> void setHelper(const T2& v, char) const { ASSERT(false); }

		template <typename T2> void setValue(const T2& v) const { setHelper(v, 0); }

		T& getValue() const { return value; }
		
		T& value;
	};

	template <typename C, typename T>
	struct PropertyProxy
	{
		PropertyProxy(C* inst, T (C::*getter)() const, void (C::*setter)(T)) 
			: inst(inst)
			, getter(getter)
			, setter(setter)
		{}

		void addItem(int) const { ASSERT(false); }
		void removeItem(int) const { ASSERT(false); }
		int size() const { ASSERT(false); return -1; }
		void setValue(const T& value) const { (inst->*setter)(value); }
		template <typename T2><commit_msg>can't edit state names in animation editor - fixed<commit_after>#pragma once


#include "editor/ieditor_command.h"
#include "engine/blob.h"
#include "engine/metaprogramming.h"


namespace Lumix
{


struct PathItem
{
	PathItem() {}


	PathItem(const char* name, PathItem* prev)
		: name(name)
		, prev(prev)
	{
		if (prev) prev->next = this;
	}


	PathItem(int index, PathItem* prev)
		: index(index)
		, prev(prev)
	{
		if (prev) prev->next = this;
	}


	const char* name = nullptr;
	int index = -1;
	PathItem* next = nullptr;
	PathItem* prev = nullptr;
};


struct NoUIAttribute {};


template <typename... Attributes>
auto attributes(Attributes... attributes)
{
	return makeTuple(attributes...);
}


template <typename F>
struct Visitor
{
	Visitor(const F& f) : f(f) {}


	template <typename T0>
	struct ValueProxy
	{
		using T = RemoveCVR<T0>;

		ValueProxy(T& value)
			: value(value)
		{
		}

		void addItem(int) const { ASSERT(false); }
		void removeItem(int) const { ASSERT(false); }
		int size() const { ASSERT(false); return -1; }

		template <typename T2> auto setHelper(const T2& v, int) const -> decltype(value = v, void()) { value = v; }
		template <typename T2> void setHelper(const T2& v, char) const { ASSERT(false); }

		template <typename T2> void setValue(const T2& v) const { setHelper(v, 0); }

		T& getValue() const { return value; }
		
		T& value;
	};

	template <typename C, typename T>
	struct PropertyProxy
	{
		PropertyProxy(C* inst, T (C::*getter)() const, void (C::*setter)(T)) 
			: inst(inst)
			, getter(getter)
			, setter(setter)
		{}

		void addItem(int) const { ASSERT(false); }
		void removeItem(int) const { ASSERT(false); }
		int size() const { ASSERT(false); return -1; }
		void setValue(const T& value) const { (inst->*setter)(value); }
		template <typename T2>
{'fraction_non_alphanumeric': 0.1516164994425864, 'fraction_numerical': 0.007246376811594203, 'mean_word_length': 3.8631436314363143, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 29, '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': '1536737', 'n_tokens_mistral': 1381, 'n_tokens_neox': 1269, 'n_words': 355}