/**
 * \file BGDNetContext.h
 * \brief Объявление класса Context
 */

#ifndef __BGDNetContext_h__
#define __BGDNetContext_h__

#include "BGDNetConfig.h"

#include <nwnet.h>
#include "BGDNetException.h"
#include "BGDNetString.h"

namespace BGDNet
{

/**
 * \class Context
 * \brief Класс "Контекст"
 *
 * Контекст NDS - это ссылка на определенную точку в дереве NDS.
 */
class BGDNET_API Context
{
public:

  Context( void )
    throw(Exception);
  /**<
   * \brief Конструктор по умолчанию.
   */

  explicit Context( const char* ctxName )
    throw(Exception);
  /**<
   * \brief Конструктор.
   * @param ctxName Указатель на строку, содержащую положение в дереве NDS.
   */

  Context( const Context& ctx )
    throw(Exception);
  /**<
   * \brief Инициализатор копии
   */

  ~Context( void );
  /**<
   * \brief Деструктор.
   */

  operator NWDSContextHandle( void ) const;
  /**<
   * \brief Оператор преобразования к типу NWDSContextHandle.
   */

  void name( const char* name );
  /**<
   * \brief Задает положение в дереве NDS
   * @param name Указатель на строку, содержащую путь к объекту NDS
   */

  String name( void ) const;
  /**<
   * \brief Доступ к текущему положению в дереве NDS
   * @return Строка, содержащая текущее положение в дереве NDS
   */

  void dsiFlags( nuint32 flags );
  /**<
   * \brief Установка DSI-флагов для контекста
   * DSI-флаги определяют состав дополнительной информации, возвращаемой
   * некоторыми функциями NDS (напр. NDSList, NDSSearch).
   * @param flags Переменная, содержащая флаги, которые необходимо
   * установить для данного контекста.
   */

  nuint32 dsiFlags( void ) const;
  /**<
   * \brief Запрос DSI-флагов для контекста
   * DSI-флаги определяют состав дополнительной информации, возвращаемой
   * некоторыми функциями NDS (напр. NDSList, NDSSearch).
   * @return Флаги, установленные для данного контекста.
   */

  void dckFlags( nuint32 flags );
  /**<
   * \brief Установка DCK-флагов для контекста
   * DCK-флаги задают правила работы с именами объектов.
   * @param flags Переменная, содержащая флаги, которые необходимо
   * установить для данного контекста.
   */

  nuint32 dckFlags( void ) const;
  /**<
   * \brief Запрос DCK-флагов для контекста
   * DCK-флаги задают правила работы с именами объектов.
   * @return Флаги, установленные для данного контекста.
   */

  String dn( const char* name ) const;
  /**<
   * \brief Преобразование имени в польное имя.
   * @param name Имя объекта в данном контексте
   * @return Полное имя объекта.
   */

  String rdn( const char* name ) const;
  /**<
   * \brief Преобразование имени в относительное имя.
   * @param name Имя объекта
   * @return Имя объекта в данном контексте.
   */

private:

  Context& operator =( const Context& );
  /**<
   * \brief Присваивание запрещено!
   */

  void create( void );
  /**>
   * \brief Инициализирует контекст.
   */

  NWDSContextHandle m_handle;
  /**<
   * \brief Дескриптор контекста.
   */
};

} // namespace BGDNet

#endif //__BGDNetContext_h__
