/*  NAMES_TABLE.H   Copyright (C)  DUL-Soft     14/03/93

       Модуль работы с таблицей имен. Этот модуль
   является прямым расширением класса BINARY_TREE
   т. к.  таблица -  это массив двоичных деревьев.
   Для лучшего понимания смотри файл B_TREE.H
*/


#ifndef _NAMES_TABLE
   #define _NAMES_TABLE


#include <b_tree.h>


/*   Таблица имен.  */

typedef struct
{
   BINARY_TREE    * tree ;
   int              number ;
   int          ( * hashing ) ( void * key ) ;
   B_TREE_FUNCTIONS function ;
}  NAMES_TABLE ;

/* Где :
   tree      - массив двоичных деревьев.
   number    - размерность массива.
   hashing   - функция хеширования.
	       При помощи этой функции определяется  в какое
	       из деревьев  будет помещена  информация.  Код
	       возврата - произвольный. Возращаемый код ана-
	       лизируется делением на number.  Положительный
	       остаток от деления указывает в какое из дере-
	       вьев поместить данное.  Если вы хотите управ-
	       лять тем,  в какое  из деревьев поместить ин-
	       формацию,  то возвращайте код от 0  до number
	       минус 1.  Если указать    hashing = NULL,  то
	       будет   использоватся  стандартная  процедура
	       хеширования.
   function  - функции, применяющиеся при работе с двоичным
	       деревом.
*/


/*     Интефейс класса.  */

int  nt1_init    ( NAMES_TABLE * nt, int unique, unsigned max_number ) ;
void nt1_close   ( NAMES_TABLE * nt ) ;
void nt1_clear   ( NAMES_TABLE * nt ) ;
int  nt1_look    ( NAMES_TABLE * nt, void * key ) ;
int  nt1_insert  ( NAMES_TABLE * nt, void * key, void * data ) ;
int  nt1_modify  ( NAMES_TABLE * nt, void * key, void * data ) ;
int  nt1_process ( NAMES_TABLE * nt ) ;

/*               Назначение функций.

   nt1_init - Выделяет память под массив деревьев.
      Параметры :
      unique     - если unique != 0, то таблица будет
		   содержать только уникальные ключи.
      max_number - задает максимальное число элементов
		   в дереве.
      Коды возврата :
	       1 - Инициализация прошла успешно.
	       0 - Нет памяти.

   nt1_close - освобождает память, используемую таблицей
	       имен.

   nt1_clear - освобождает память, используемую деревьями.

   nt1_look, nt1_insert, nt1_modify -
      полность по своему действию эквивалентны функциям :
      bt1_look, bt1_insert, bt1_modify, но они работают с
      таблицей, а не с деревом.
      Коды возврата также совпадают.
      Отличие - если таблица не инициализирована, то
		возвращаемый код = -1.

   nt1_process - обработать все элементы таблицы. Порядок
		 обработки -  начиная с 1 по number обра-
		 батываются  все деревья при помощи функ-
		 ции bt1_process.
      Коды возврата :
	 1) смотри bt1_process.
	 2) -1 - если таблица не инициализирована.
*/


/*   Реализация функций класса находится в модуле N_TABLE.C
*/


#endif
