/*

Copyright (c) 2002-2005, Yauheni Akhotnikau
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

- Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

- Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.

- The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.

*/

#if !defined( _OESS_1__SCHEME__ERRNO_HPP_ )
#define _OESS_1__SCHEME__ERRNO_HPP_

#include <oess_1/defs/h/errno_range.hpp>

namespace oess_1 {

namespace scheme {

namespace err {

const int	c_range_min = oess_1::impl::c_errno__scheme;
const int	c_range_max = c_range_min + 1000;

//! Тип уже указан в качестве базового.
const int	c_base_already_defined = c_range_min + 1;

//! Не верный индекс базового типа.
const int	c_invalid_index_of_base = c_range_min + 2;

//! Атрибут с таким именем уже определен.
const int	c_attr_already_defined = c_range_min + 3;

//! Не верный индекс атрибута.
const int	c_invalid_index_of_attr = c_range_min + 4;

//! Нулевой указатель на объект.
const int	c_zero_pointer = c_range_min + 5;

//! Тип не найден.
const int	c_type_not_found = c_range_min + 6;

//! Редактор атрибута существует.
const int	c_attr_editor_exists = c_range_min + 7;

//! Редактор атрибута не существует.
const int	c_attr_editor_not_exists = c_range_min + 8;

//! Не верный индекс типа в схеме.
const int	c_invalid_index_of_type = c_range_min + 9;

//! Редактор типа существует.
const int	c_type_editor_exists = c_range_min + 10;

//! Редактор типа не существует.
const int	c_type_editor_not_exists = c_range_min + 11;

//! Тип с таким именем уже определен.
const int	c_type_already_defined = c_range_min + 12;

//! Синтаксическая ошибка в DDL описании.
const int	c_ddl_syntax_error = c_range_min + 13;

//! Не подходящая разновидность типа атрибута.
const int	c_invalid_attr_type_kind = c_range_min + 15;

//! Не подходящая разновидность контейнера.
const int	c_invalid_attr_cont_kind = c_range_min + 16;

//! Тип не определен.
const int	c_type_not_defined = c_range_min + 17;

//! Абстрактный тип в качестве типа атрибута.
const int	c_abstract_type_for_attr = c_range_min + 18;

//! Обнаружен цикл в схеме.
const int	c_cycle = c_range_min + 19;

//! Встроенный тип не может использоваться в качестве базового.
const int	c_builtin_type_as_base = c_range_min + 20;

//! Нет кода предиката сериализации опционального атрибута.
/*!
	\since v.1.2.0

	Возникает при попытке сгенерировать вспомогательный
	код для сериализации когда обнаруживается, что для данного
	языка программирования не задан код предиката {present_if}.
	Например, если ddl-описание имело такой вид:
\verbatim
{type A
	{attr	a {of std::string}
		{default {c++ \"a\"}
			{present_if}}
	}
}
\endverbatim
*/
const int	c_no_present_if_predicate_code = c_range_min + 21;

//! Ошибка при генерации вспомогательного кода.
/*!
	\since v.1.2.0

	При генерации вспомогательного кода произошла ошибка,
	которая не позволила завершить генерацию вспомогательного кода.
*/
const int	c_serialization_code_generation_fail = c_range_min + 22;

//! Нет кода значения по-умолчанию для атрибута.
/*!
	\since v.1.2.0

	Возникает при попытке сгенерировать вспомогательный
	код для сериализации когда обнаруживается, что для данного
	языка программирования не задан код значения по-умолчанию
	для атрибута.
	Например, если ddl-описание имело такой вид:
\verbatim
{type A
	{attr	a {of std::string}
		{default}
	}
}
\endverbatim
*/
const int	c_no_default_expression = c_range_min + 23;

//! Не совпадение глубины вложенности расширений.
/*!
	\since v.1.2.0

	Например, указанный для атрибута уровень расширения не
	согласуется с глубиной расширений типа, в который этот
	атрибут помещается.
*/
const int c_extension_level_mismatch = c_range_min + 24;

//! Тип не является расширяемым.
/*!
	\since v.1.2.0

	Невозможно выпонить указанное действие над типом,
	который не является расширяемым. Например, невозможно
	описать расширение типа.
*/
const int c_not_extensible_type = c_range_min + 25;

//! Механизм subclassing_by_extension уже использован.
/*!
	\since v.1.2.0

	Допускается наследование в режиме subclassing_by_extension
	только от одного базового типа.
*/
const int c_already_derived_as_extension = c_range_min + 26;

//! Множественное наследование запрещено, если тип
//! произведен как расширение базового.
/*!
	\since v.1.2.0
*/
const int c_mi_disabled_when_derived_as_extension = c_range_min + 27;

//! Попытка получить описание present_if для не опционального атрибута.
/*!
	\since v.1.4.0

	Внутренняя ошибка ObjESSty.

	Для опциональных атрибутов создается специальный объект
	present_if, который описывает предикат опциональности. Для не
	опционального атрибута такого объекта нет. Данная ошибка порождается,
	когда кто-либо пытается получить объект present_if для не
	опционального атрибута.
*/
const int c_try_get_present_if_for_nonoptional_attr = c_range_min + 28;

//! Значение по умолчанию для атрибута уже определено.
/*!
	\since v.1.4.0

	Внутренняя ошибка ObjESSty.

	Попытка повторно установить значение по-умолчанию для атрибута.
*/
const int c_default_attr_value_already_defined = c_range_min + 29;

//! Для атрибута не задано значение по-умолчанию.
/*!
	\since v.1.4.0

	Внутренняя ошибка ObjESSty.

	Попытка получить отсутствующее значение по-умолчанию для атрибута.
*/
const int c_default_attr_value_missed = c_range_min + 30;

} /* namespace err */

} /* namespace scheme */

} /* namespace oess_1 */

#endif
