unsigned _position(Env& env) { //if (not has_elements<Code>(env,2)) return 1; Code first = pop<Code>(env); Code second = pop<Code>(env); if (first->get_stack().size() == 0) { if (equal_to(first,second)) push(env, 0); else push(env,-1); return 1; } const CodeArray& stack = first->get_stack(); for (int i = stack.size()-1;i >= 0; --i) { if (equal_to(stack[i], second)) { push<int>(env, stack.size()-i-1); return stack.size() * second->len(); } } push<int>(env, -1); return stack.size() * second->len(); }
unsigned _null(Env& env) { //if (not has_elements<Code>(env,1)) return 1; Code first = pop<Code>(env); push(env, equal_to(nil, first)); return 1; }
bool match_element(size_t pos, uint16_t typenr, const std::type_info* rtti) const override { CAF_REQUIRE(typenr != 0 || rtti != nullptr); auto uti = m_elements[pos]->ti; if (uti->type_nr() != typenr) { return false; } return typenr != 0 || uti->equal_to(*rtti); }
//inline void check_reduced(Reducer<typename C::iterator> (*search_n)(Reducer<typename C::iterator>, Reducer<typename C::iterator>, Size, T, equal_to), typename C::difference_type expect, C c, Size size, T const& value, int len) inline void check_reduced_std(typename C::difference_type expect, C c, Size size, T const& value, int len) { int count = 0; auto result = std::search_n( Reducer<typename C::iterator>(sprout::begin(c)), Reducer<typename C::iterator>(len == 0 ? sprout::end(c) : sprout::begin(c) + len), size, value, equal_to(count) ); print(expect, sprout::distance(Reducer<typename C::iterator>(sprout::begin(c)), result), count); }
bool not_equal_to(const T& t, const U& u) { return !equal_to(t, u); }