/*!
\page oess_1_4_0__custom_types_and_stl oess_1.4.0. Шаблоны ручной сериализации для STL контейнеров

\note Подробнее о ручной (custom) сериализации пользовательских типов
см. \ref oess_1_4_0__custom_type_serialization.

Ручная сериализация пользовательских типов в потоки oess_1::io удобна для
сериализации одиночных объектов пользовательских типов. Если же в поток
oess_1::io требуется поместить STL-контейнер с пользовательскими типами, то
можно воспользоваться шаблонами для STL-контейнеров, определенных в
заголовочных файлах:
- oess_1/io/custom/stl/h/list.hpp (класс std::list);
- oess_1/io/custom/stl/h/deque.hpp (класс std::deque);
- oess_1/io/custom/stl/h/vector.hpp (класс std::vector);
- oess_1/io/custom/stl/h/set.hpp (классы std::set и std::multiset);
- oess_1/io/custom/stl/h/map.hpp (классы std::map и std::multimap).

Например:
\code
// Требуется реализовать ручную сериализации в потоки ввода/вывода
// следующего типа.
class my_type_t
	{
	private :
		std::list< std::string > m_names;
		std::vector< int > m_indexes;
		std::multimap< std::string, std::string > m_user_roles;
		...

	public :
		...
		oess_1::io::istream_t &
		read( oess_1::io::istream_t & s )
			{
				// Самая тривиальная реализация, без заботы об исключениях.
				return ( s >> m_names >> m_indexes >> m_user_roles );
			}

		oess_1::io::ostream_t &
		write( oess_1::io::ostream_t & o ) const
			{
				return ( o << m_names << m_indexes << m_user_roles );
			}
	};

inline oess_1::io::istream_t &
operator>>( oess_1::io::istream_t & s, my_type_t & o )
	{
		return o.read( s );
	}

inline oess_1::io::ostream_t &
operator<<( oess_1::io::ostream_t & s, const my_type_t & o )
	{
		return o.write( s );
	}
\endcode

\note Шаблоны для сериализации STL-контейнеров сохраняют перед содержимым
контейнера его размерность. Для хранения размерности используется тип oess_1::defs::quantity_t.

\attention Механизмы ручной сериализации не являются заменой штатной
сериализации ObjESSty oess_1::stdsn. Ручная сериализация предназначена для
случаев, когда тип нельзя сделать сериализуемым с помошью штатных механизмов.
Например, если тип входит в какую-то стороннюю библиотеку (вроде Qt, wxWidgets,
ACE и др.).

*/

