Commit 77fff659 authored by Alvarez, Gonzalo's avatar Alvarez, Gonzalo
Browse files

Ainur: clean up

parent f04be18b
Loading
Loading
Loading
Loading
+8 −22
Original line number Diff line number Diff line
@@ -32,17 +32,10 @@ class AinurState {
		{}

		template <typename A, typename ContextType>
		typename EnableIf<TypesEqual<A,T>::True, void>::Type
		operator()(A& attr,
		void operator()(A& attr,
		                ContextType&,
		                bool&) const;

		template <typename A, typename ContextType>
		typename EnableIf<!TypesEqual<A,T>::True, void>::Type
		operator()(A& attr,
		           ContextType& context,
		           bool& hit) const;

	private:

		String name_;
@@ -57,14 +50,7 @@ class AinurState {
		{}

		template <typename A, typename ContextType>
		typename EnableIf<!TypesEqual<std::vector<std::vector<T> >, A>::True,void>::Type
		operator()(A& attr,
		           ContextType&,
		           bool&) const;

		template <typename A, typename ContextType>
		typename EnableIf<TypesEqual<std::vector<std::vector<T> >, A>::True,void>::Type
		operator()(A& attr,
		void operator()(A& attr,
		                ContextType&,
		                bool&) const;

+7 −49
Original line number Diff line number Diff line
@@ -96,8 +96,7 @@ void AinurState::assign(String k, String v)

template <typename T>
template <typename A, typename ContextType>
typename EnableIf<!TypesEqual<std::vector<std::vector<T> >, A>::True,void>::Type
AinurState::ActionMatrix<T>::operator()(A& attr,
void AinurState::ActionMatrix<T>::operator()(A& attr,
                                             ContextType&,
                                             bool&) const
{
@@ -113,51 +112,11 @@ AinurState::ActionMatrix<T>::operator()(A& attr,
	}
}

template <typename T>
template <typename A, typename ContextType>
typename EnableIf<TypesEqual<std::vector<std::vector<T> >, A>::True,void>::Type
AinurState::ActionMatrix<T>::operator()(A& attr,
                                        ContextType&,
                                        bool&) const
{
	SizeType rows = attr.size();
	if (rows == 0) return;
	SizeType cols = attr[0].size();
	t_.resize(rows, cols);
	for (SizeType i = 0; i < rows; ++i) {
		if (attr[i].size() != cols)
			err("Ainur: Problem reading matrix\n");
		for (SizeType j = 0; j < cols; ++j)
			t_(i, j) = attr[i][j];
	}
}

//---------

template <typename T>
template <typename A, typename ContextType>
typename EnableIf<TypesEqual<A,T>::True,void>::Type
AinurState::Action<T>::operator()(A& attr,
                                  ContextType&,
                                  bool&) const
{
	if (name_ == "elipsis") {
		SizeType total = t_.size();
		if (total == 0)
			err("Elipsis cannot be used for this vector, because size is unknown\n");

		for (SizeType i = 0; i < total; ++i)
			t_[i] = attr;
		return;
	}

	t_.push_back(attr);
}

template <typename T>
template <typename A, typename ContextType>
typename EnableIf<!TypesEqual<A,T>::True, void>::Type
AinurState::Action<T>::operator()(A& attr,
void AinurState::Action<T>::operator()(A& attr,
                                       ContextType&,
                                       bool&) const
{
@@ -240,11 +199,10 @@ void AinurState::convertInternal(std::vector<T>& t,
	qi::rule<IteratorType, VectorStringType(), qi::space_type> ruRows = ruleRows();

	Action<T> actionRows("rows", t);
	//Action<T> actionElipsis("elipsis", t);

	bool r = qi::phrase_parse(it,
	                          value.end(),
	                          ruRows [actionRows],// | ruElipsis[actionElipsis],
	                          ruRows [actionRows],
	                          qi::space);

	//check if we have a match