11 1.1. Система типов
Gregory Lirent edited this page 2022-08-17 11:20:23 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Система типов

В проекте используются различные между собой (с точки зрения управления памятью) 10 системных целочисленных типов:

  • vtype_pointer
  • vtype_boolean
  • vtype_uint8
  • vtype_uint16
  • vtype_uint32
  • vtype_uint64
  • vtype_int8
  • vtype_int16
  • vtype_int32
  • vtype_int64

Также в проекте используется 3 системных типа чисел с плавающей запятой:

  • vtype_float
  • vtype_double
  • vtype_ldouble

Помимо этого, проект предоставляет 6 типов контейнеров:

Каждому из вышеперечисленных типов, соотвествует константа, установленная в рамках перечисления vtype, которая, в свою очередь, определяет поведение ряда контейнеров (ячеек внутри контейнеров), а также должна обрабатываться пользовательским кодом, для однозначного определения типа поступивших данных.

Сравнение системных числовых типов

Деталью, требующей дополнительного упоминания, является принцип сравнения системных числовых типов, что является важным аспектом при поиске значений, внутри контейнеров. Так,

  • (vtype_bool)1 == (vtype_int64)1
  • (vtype_pointer)0x00007777 == (vtype_uint16)0x7777
  • (vtype_float)0.25 == (vtype_ldouble)0.25
  • (vtype_double)13.0 == (vtype_int32)13

но

  • (vtype_int8)-1 != (vtype_uint8)0xff

Иными словами, сравнение всегда производится на базе реального значения числа, а не на базе представления данного числа в памяти. Соответсвенно, в случае необходимости разделения чисел не только по значению, но и по типу, данная задача лежит в плоскости пользовательского решения, так как решение оной не предоставляется данным проектом.

Межтиповое сравнение

В случае, если производится сравнение между несравнимыми типами (например, между vtype_int64 и vtype_string) большим будет всегда то значение, значение константы типа которого (vtype) больше другого.

Сравнение контейнеров между собой

Контейнеры имеющие один и тот же тип, - сравнимы между собой. Однако равны они будут только в том случае, если

  • Они имеют равное количество элементов
  • Они имеют равнозначный порядок элементов
  • Значение их элементов полностью эквиваленты как по ключу (там, где это применимо), так и по значению.

В противном случае, результат сравнения будет равен результату первого несоответствия данным условиям.

Далее: 1.2. Работа с памятью