//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                         Статический кэш различных объектов                                |
//	+                                      ShmalevoZ                                            +
//	|                                       2009-04                                             |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++

//---------------------------------------------------------------------------------------------
// Собственные атрибуты
Перем гОбъекты;

//******************************************************************************
// НормализоватьКонтекст(СсылаКонтекст)
//
// Параметры: 
//  СсылаКонтекст
//
// Возвращаемое значение:
//  Неопределенный
//
// Описание:
//  Возвращает ссылка на переданный контекст
//
Функция НормализоватьКонтекст(СсылаКонтекст)
	
	Возврат СсылаКонтекст;
	
КонецФункции // НормализоватьКонтекст()


//******************************************************************************
// _this()
//
// Параметры: 
//  СсылкаКонтекст			- контекст
//
// Возвращаемое значение:
//  ГрупповойКонтекст		- ссылка на контекст
//
// Описание:
//  Возвращает ссылку на контекст
//
Функция _this()
	
	Возврат НормализоватьКонтекст(Контекст);
	
КонецФункции // _this()


//******************************************************************************
// Конструктор()
//
// Параметры: 
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Предопределенный метод
//
Процедура Конструктор()
	
	гОбъекты	= СоздатьОбъект("ИндексированнаяТаблица");
	гОбъекты.НоваяКолонка("Идентификатор");
	гОбъекты.НоваяКолонка("Индекс");
	гОбъекты.НоваяКолонка("Объект");
	гОбъекты.ДобавитьИндекс("ОсновнойИндекс", "Индекс");
	
КонецПроцедуры // Конструктор()


//******************************************************************************
// ПолучитьНомерПоИдентификатору(Идентификатор)
//
// Параметры: 
//  Идентификатор
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция ПолучитьНомерПоИдентификатору(Идентификатор)
	
	Результат	= гОбъекты.НайтиСтроку("ОсновнойИндекс", НРег(Идентификатор), 0, 1);
	
	Возврат Результат;
КонецФункции // ПолучитьНомерПоИдентификатору()


//******************************************************************************
// Добавить(Идентификатор)
//
// Параметры: 
//  Идентификатор			- идентификатор добавляемого объекта
//  Объект					- добавляемый объект
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Добавляет пустое значение в хранилище
//
Процедура Добавить(Идентификатор, Объект) Экспорт
	
	Если ПолучитьНомерПоИдентификатору(Идентификатор) <> 0 Тогда
		_this()._ВыброситьОшибку("В кэше уже существует объект и с идентиификатором " + Идентификатор);
	КонецЕсли;
	
	гОбъекты.НоваяСтрока();
	гОбъекты.Идентификатор	= Идентификатор;
	гОбъекты.Индекс			= НРег(Идентификатор);
	гОбъекты.Объект			= Объект;
	
КонецПроцедуры // Добавить()


//******************************************************************************
// Установить(Идентификатор, Объект)
//
// Параметры: 
//  Идентификатор, Объект
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Устанавливает значение в кэше
//
Процедура Установить(Идентификатор, Объект) Экспорт
	
	Если ПолучитьНомерПоИдентификатору(Идентификатор) = 0 Тогда
		_this()._ВыброситьОшибку("В кэше не найден объект с идентификатором " + Идентификатор);
	КонецЕсли;
	
	гОбъекты.Объект	= Объект;
	
КонецПроцедуры // Установить()


//******************************************************************************
// Получить(Идентификатор)
//
// Параметры: 
//  Идентификатор			- идентификатор объекта
//
// Возвращаемое значение:
//  Неопределенный
//
// Описание:
//  Возвращает объект по идентификатору
//
Функция Получить(Идентификатор) Экспорт
	
	Если ПолучитьНомерПоИдентификатору(Идентификатор) = 0 Тогда
		_this()._ВыброситьОшибку("В кэше не найден объект с идентификатором " + Идентификатор);
	КонецЕсли;
	
	Возврат гОбъекты.Объект;
КонецФункции // Получить()


//******************************************************************************
// Удалить(Идентификатор)
//
// Параметры: 
//  Идентификатор			- идентификатор удаляемого объекта
//
// Возвращаемое значение:
//  Число					- успех выполнения
//
// Описание:
//  Удаляет объект из кэша
//
Функция Удалить(Идентификатор) Экспорт
	
	Результат	= ПолучитьНомерПоИдентификатору(Идентификатор);
	Если Результат <> 0 Тогда
		гОбъекты.УстановитьЗначение(Результат, "Объект", 0);
		гОбъекты.УдалитьСтроку(Результат);
		Результат	= 1;
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // Удалить()


//******************************************************************************
// Существует(Идентификатор)
//
// Параметры: 
//  Идентификатор			- идентификатор искомого объекта
//
// Возвращаемое значение:
//  Число
//
// Описание:
//  Проверяет присутствие объекта в кэше
//
Функция Существует(Идентификатор) Экспорт
	
	Результат	= Мин(1, ПолучитьНомерПоИдентификатору(Идентификатор));
	
	Возврат Результат;
КонецФункции // Существует()
