/** \~russian ,    ,
 *                    .
 *
 * @par :
 * @include dictionary.fos
 *
 ** \~english The dictionary objects map string values to values or objects of other types.
 *
 * @par Example:
 * @include dictionary.fos
 *
 ** \~ @ingroup std
 */
class dictionary
{
	/** \~russian       .
	 *
	 * @param  key    .
	 * @param  value   .
	 *
	 ** \~english Sets a variable type value for a key.
	 *
	 * @param  key    The key of the value to set.
	 * @param  value  Value to associate with the specified key.
	 *
     */
	void set(const string &in key, ? &in value);

	/** \~russian        .
	 *
	 * @param         key    .
	 * @param  [out]  value  ,       ,
	 *                          ,   .
	 * @return @c true,    ; @c false    .
	 *
	 ** \~english Gets a variable type value for a key.
	 *
	 * @param         key    The key of the value to get.
	 * @param  [out]  value  When this method returns, contains the value associated with the specified key, if the key is found.
	 * @return @c true if the the specified key is set; otherwise, @c false.
	 *
     */
	bool get(const string &in key, ? &out value) const;

	/** \~russian    @c int64   .
	 *
	 * @param  key    .
	 * @param  value   .
	 *
	 ** \~english Sets an integer number value for a key.
	 *
	 * @param  key    The key of the value to set.
	 * @param  value  Value to associate with the specified key.
	 *
     */
	void set(const string &in key, int64 &in value);

	/** \~russian     @c int64   .
	 *
	 * @param         key    .
	 * @param  [out]  value  ,       ,
	 *                          ,   .
	 * @return @c true,    ; @c false    .
	 *
	 ** \~english Gets an integer number value for a key.
	 *
	 * @param         key    The key of the value to get.
	 * @param  [out]  value  When this method returns, contains the value associated with the specified key, if the key is found.
	 * @return @c true if the the specified key is set; otherwise, @c false.
	 *
     */
	bool get(const string &in key, int64 &out value) const;

	/** \~russian    @c double   .
	 *
	 * @param  key    .
	 * @param  value   .
	 *
	 ** \~english Sets a real number value for a key.
	 *
	 * @param  key    The key of the value to set.
	 * @param  value  Value to associate with the specified key.
	 *
     */
	void set(const string &in key, double &in value);

	/** \~russian     @c double   .
	 *
	 * @param         key    .
	 * @param  [out]  value  ,       ,
	 *                          ,   .
	 * @return @c true,    ; @c false    .
	 *
	 ** \~english Gets a real number value for a key.
	 *
	 * @param         key    The key of the value to get.
	 * @param  [out]  value  When this method returns, contains the value associated with the specified key, if the key is found.
	 * @return @c true if the the specified key is set; otherwise, @c false.
	 *
     */
	bool get(const string &in key, double &out value) const;

	/** \~russian ,      .
	 *
	 * @param  key   .
	 * @return @c true,  ; @c false    .
	 *
	 ** \~english Returns true if the key is set.
	 *
	 * @param  key  Key to check.
	 * @return Returns @c true if the key is set; otherwise, @c false.
	 *
	 */
	bool exists(const string &in key) const;

	/** \~russian     .
	 *
	 * @param  key   .
	 *
	 ** \~english Deletes specified key.
	 *
	 * @param  key  Key to delete.
	 *
	 */
	void delete(const string &in key);

	/** \~russian     . */
	/** \~english Deletes all keys. */
	void deleteAll();
}
