Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой проект групп 3341 и 3382 / DMCore / utils / uConsts
.pas// Общие типы и функции, используемые другими модулями //
// в составе библиотеки Utils, а также методы для //
// генерации исключений. //
unit uConsts;
interface
{ Типы массивов, содержащих произвольное число элементов, и соответствующие
им константы. }
const
{ Максимальный индекс в массиве байт }
//ByteListUpperLimit = 536870911;
{ Максимальный индекс в массиве 2-байтных элементов }
WordListUpperLimit = 268435455;
{ Максимальный индекс в массиве 4-байтных элементов }
DWordListUpperLimit = 134217727;
{ Максимальный индекс в массиве 8-байтных элементов }
QWordListUpperLimit = 67108863;
type
{ Тип массива и указателя на массив элементов типа Integer }
PIntegerItemList = ^TIntegerItemList;
TIntegerItemList = array[0..DWordListUpperLimit] of Integer;
{ Тип массива и указателя на массив элементов типа LongWord }
PLongWordItemList = ^TLongWordItemList;
TLongWordItemList = array[0..DWordListUpperLimit] of LongWord;
{ Тип массива и указателя на массив элементов типа TObject }
// PObjectItemList = ^TObjectItemList;
// TObjectItemList = array[0..DWordListUpperLimit] of TObject;
{ Тип массива и указателя на массив элементов типа Pointer }
PPointerItemList = ^TPointerItemList;
TPointerItemList = array[0..DWordListUpperLimit] of Pointer;
{ Тип массива и указателя на массив элементов типа String }
PStringItemList = ^TStringItemList;
TStringItemList = array[0..DWordListUpperLimit] of string;
{ Тип массива и указателя на массив элементов типа Word }
PWordItemList = ^TWordItemList;
TWordItemList = array[0..WordListUpperLimit] of Word;
{ Функции для выбора оптимального размера внутреннего массива обычного
и хэшированного списков. }
{ G_EnlargeCapacity возвращает новое предельное число элементов коллекции
при необходимости добавления нового элемента в коллекцию, когда ее размер
достиг предельного значения, равного Capacity. }
function G_EnlargeCapacity(Capacity: Integer): Integer;
{ G_NormalizeCapacity возвращает предельное число элементов коллекции, большее
или равное значению параметра Capacity. Это число подбирается таким образом,
чтобы оптимизировать количество перераспределений памяти при возможном
будущем расширении коллекции. }
function G_NormalizeCapacity(Capacity: Integer): Integer;
{ G_EnlargePrimeCapacity возвращает новое предельное число элементов
хэшированного массива при необходимости добавления нового элемента, когда
используемый размер хэша достиг предельного значения, равного Capacity. }
function G_EnlargePrimeCapacity(Capacity: Integer): Integer;
{ Константы и методы для генерации исключений }
const
SErrArgumentNull = 'Параметр "%s", передаваемый в функцию "%s", не может быть равен nil.';
SErrBinaryStreamCorrupted = 'Данные в бинарном потоке испорчены и не могут быть прочитаны.';
SErrCodesToStrConversionFault = 'Ошибка при преобразовании строки шестнадцатеричных кодов в строку символов.';
SErrCountDiffersInTBitLists = 'Два экземпляра класса TBitList имеют различное значение свойства Count.';
SErrFileCreateError = 'Ошибка при создании файла "%s"';
SErrFileOpenedForWrite = 'Невозможно открыть файл "%s", т.к. файл данных коллекции уже открыт для записи.';
SErrFileReadError = 'Ошибка при чтении файла "%s".';
SErrFileRereadError = 'Ошибка при повторном чтении данных из файла.';
SErrFileWriteError = 'Ошибка при записи файла.';
SErrFileWriteErrorFmt = 'Ошибка при записи файла "%s".';
SErrFrameNotInitialized = 'Grid-фрейм не был инициализирован.';
SErrFreeUnusedBlock = 'Попытка освободить незанятую область памяти.';
SErrHexToIntConversionFault = 'Ошибка в ходе преобразования шестнадцатеричного числа %s в целое число.';
SErrIndexOutOfRange = 'Попытка обратиться к несуществующему элементу списка или очереди.';
SErrInsertionNotAllowed = 'Недопустима вставка элементов в массив при (MaintainSorted = True).';
SErrKeyDuplicatesInAssociationList = 'Нарушение уникальности ключа в наборе %s.';
SErrMSExcelNotFound = 'Для построения отчетов на компьютере должен быть установлен Microsoft Excel.';
SErrNoAvailableTimers = 'Невозможно создать таймер в Grid-фрейме.';
SErrNodeBelongsToAnotherList = 'Узел не принадлежит данному связанному списку.';
SErrNodeBelongsToAnotherTree = 'Узел не принадлежит данному красно-черному дереву.';
SErrNoFileOpenedForWrite = 'Файл не был открыт для записи.';
SErrNoHighResolutionPC = 'В данной конфигурации отсутствует таймер высокого разрешения.';
SErrNoMoreAvailableID = 'В коллекции закончились уникальные идентификаторы.';
SErrOnDelayedSelectItemNotAssigned = 'Не назначен обработчик для события OnDelayedSelectItem.';
SErrOnGetDataNotAssigned = 'Не назначен обработчик для события OnGetData.';
SErrPeekFromEmptyList = 'Попытка вызвать метод Peek или Pop для пустого списка или очереди.';
SErrReadNotComplete = 'Чтение из бинарного потока не завершено (файл "%s").';
SErrReadBeyondTheEndOfStream = 'Попытка прочитать данные за пределами бинарного потока.';
SErrRereadNotComplete = 'Повторное чтение из бинарного потока не завершено.';
SErrStreamIsReadOnly = 'Невозможно произвести запись в бинарный поток, открытый в режиме "только для чтения".';
SErrStreamIsWriteOnly = 'Невозможно произвести чтение из бинарного потока, открытого в режиме "только для записи".';
SErrUnorderedRemovalNotAllowed = 'Недопустимо unordered-удаление из массива при (MaintainSorted = True).';
SErrVersionNotSupported = 'Класс %s не поддерживает версию данных %d.';
SErrWrongArgumentInReplaceChars = 'В функцию G_ReplaceChars переданы неправильные параметры.';
SErrWrongBase64EncodedString = 'Формат строки не соответствует способу кодирования Base64.';
SErrWrongDecryptionKey = 'Неправильный ключ используется при расшифровке данных бинарного потока.';
SErrWrongGridColumnIndex = 'Неправильный номер столбца в Grid-фрейме.';
SErrWrongGridRowIndex = 'Неправильный номер строки в Grid-фрейме.';
SErrWrongNumberOfGridColumns = 'Неверное число столбцов в Grid-фрейме.';
SErrWrongStreamLength = 'Неправильная длина указана при создании бинарного потока.';
{ Методы, генерирующие исключения типа Exception и EConvertError. }
procedure RaiseErrorFmt(const msg, S: string); overload;
procedure RaiseErrorFmt(const msg, S1, S2: string); overload;
procedure RaiseError(const msg: string);
implementation
uses SysUtils, uBinary;
{ Функции для выбора оптимального размера внутреннего массива обычного
и хэшированного списков. }
function G_EnlargeCapacity(Capacity: Integer): Integer;
begin
if Capacity < 54 then
begin
if Capacity < 6 then
Result := 16
else
Result := 64;
end
else if Capacity < 1014 then
begin
if Capacity < 246 then
Result := 256
else
Result := 1024;
end
else
Result := G_IncPowerOfTwo(Capacity + 10);
end;
function G_NormalizeCapacity(Capacity: Integer): Integer;
begin
if Capacity <= 64 then
begin
if Capacity <= 16 then
Result := 16
else
Result := 64;
end
else if Capacity <= 1024 then
begin
if Capacity <= 256 then
Result := 256
else
Result := 1024;
end
else
Result := G_CeilPowerOfTwo(Capacity);
end;
function G_EnlargePrimeCapacity(Capacity: Integer): Integer;
begin
if Capacity < 2729 then
begin
if Capacity < 163 then
begin
if Capacity < 37 then
begin
if Capacity < 17 then
begin
Result := 17;
Exit;
end else
begin
Result := 37;
Exit;
end;
end
else if Capacity < 79 then
begin
Result := 79;
Exit;
end else
begin
Result := 163;
Exit;
end;
end else
begin
if Capacity < 673 then
begin
if Capacity < 331 then
begin
Result := 331;
Exit;
end else
begin
Result := 673;
Exit;
end;
end
else if Capacity < 1361 then
begin
Result := 1361;
Exit;
end else
begin
Result := 2729;
Exit;
end;
end;
end
else if Capacity < 701819 then
begin
if Capacity < 43853 then
begin
if Capacity < 10949 then
begin
if Capacity < 5471 then
begin
Result := 5471;
Exit;
end else
begin
Result := 10949;
Exit;
end;
end
else if Capacity < 21911 then
begin
Result := 21911;
Exit;
end else
begin
Result := 43853;
Exit;
end;
end else
begin
if Capacity < 175447 then
begin
if Capacity < 87719 then
begin
Result := 87719;
Exit;
end else
begin
Result := 175447;
Exit;
end;
end
else if Capacity < 350899 then
begin
Result := 350899;
Exit;
end else
begin
Result := 701819;
Exit;
end;
end;
end
else if Capacity < 179669557 then
begin
if Capacity < 11229331 then
begin
if Capacity < 2807303 then
begin
if Capacity < 1403641 then
begin
Result := 1403641;
Exit;
end else
begin
Result := 2807303;
Exit;
end;
end
else if Capacity < 5614657 then
begin
Result := 5614657;
Exit;
end else
begin
Result := 11229331;
Exit;
end;
end else
begin
if Capacity < 44917381 then
begin
if Capacity < 22458671 then
begin
Result := 22458671;
Exit;
end else
begin
Result := 44917381;
Exit;
end;
end
else if Capacity < 89834777 then
begin
Result := 89834777;
Exit;
end else
begin
Result := 179669557;
Exit;
end;
end;
end
else if Capacity < 718678369 then
begin
if Capacity < 359339171 then
begin
Result := 359339171;
Exit;
end else
begin
Result := 718678369;
Exit;
end;
end
else if Capacity < 1437356741 then
begin
Result := 1437356741;
Exit;
end else
Result := 0;
end;
{ Методы для генерации исключений }
procedure RaiseErrorFmt(const msg, S: string);
begin
raise Exception.CreateFmt(msg, [S]);
end;
procedure RaiseErrorFmt(const msg, S1, S2: string);
begin
raise Exception.CreateFmt(msg, [S1, S2]);
end;
procedure RaiseConvertErrorFmt(const msg, S: string);
begin
raise EConvertError.CreateFmt(msg, [S]);
end;
procedure RaiseError(const msg: string);
begin
raise Exception.Create(msg);
end;
end.
Соседние файлы в папке utils