#ifndef RJP_ARRAY_HPP #define RJP_ARRAY_HPP #include "value.hpp" #include "integral.hpp" #include "string_val.hpp" #include "iterator.hpp" #include #include namespace rjp{ class array_iterator : protected detail::iterator_base { protected: RJP_array_iterator m_it; public: array_iterator(void) = default; array_iterator(RJP_value* v); array_iterator(const array_iterator&) = delete; array_iterator(array_iterator&& a); ~array_iterator(void); array_iterator& operator=(const array_iterator&) = delete; array_iterator& operator=(array_iterator&& o); bool operator==(const array_iterator& o)const; bool operator!=(const array_iterator& o)const; value operator*(void)const; value_wrapper operator->(void)const; array_iterator& operator++(void); }; class array : public value { public: using iterator = array_iterator; using const_iterator = const iterator; public: using value::value; array(void); array(const value& val); array(value&& val); array(const array&) = default; array(array&&) = default; ~array(void) = default; array& operator=(const array&) = default; array& operator=(array&&) = default; value add(void); string_val add(const rexy::string_base& val); string_val add(string&& val); value& remove(value& val); void destroy(value&& val); iterator begin(void); iterator end(void); const_iterator begin(void)const; const_iterator end(void)const; }; } #endif