word.h - Man Page

Машинные слова

Synopsis

#include 'bee2/defs.h'
#include 'bee2/core/safe.h'
#include 'bee2/core/u32.h'

Макросы

#define wordEq(a,  b)   ((word)(a) == (word)(b))
Машинные слова a и b равны?
#define wordNeq(a,  b)   ((word)(a) != (word)(b))
Машинные слова a и b не равны?
#define wordLess(a,  b)   ((word)(a) < (word)(b))
Машинное слово a меньше машинного слова b?
#define wordLeq(a,  b)   ((word)(a) <= (word)(b))
Машинное слово a не больше машинного слова b?
#define wordGreater(a,  b)   wordLess(b, a)
Машинное слово a больше машинного слова b?
#define wordGeq(a,  b)   wordLeq(b, a)
Машинное слово a не меньше машинного слова b?
#define wordEq01(a,  b)   ((word)wordEq(a, b))
Машинные слова a и b равны (WORD_0 / WORD_1)?
#define wordNeq01(a,  b)   ((word)wordNeq(a, b))
Машинные слова a и b не равны (WORD_0 / WORD_1)?
#define wordLess01(a,  b)   ((word)wordLess(a, b))
Машинное слово a меньше машинного слова b (WORD_0 / WORD_1)?
#define wordLeq01(a,  b)   ((word)wordLeq(a, b))
Машинное слово a не больше машинного слова b (WORD_0 / WORD_1)?
#define wordGreater01(a,  b)   ((word)wordGreater(a, b))
Машинное слово a больше машинного слова b (WORD_0 / WORD_1)?
#define wordGeq01(a,  b)   ((word)wordGeq(a, b))
Машинное слово a не меньше машинного слова b (WORD_0 / WORD_1)?
#define wordEq0M(a,  b)   ((word)(wordNeq01(a, b) - WORD_1))
Машинные слова a и b равны (WORD_0 / WORD_MAX)?
#define wordNeq0M(a,  b)   ((word)(wordEq01(a, b) - WORD_1))
Машинные слова a и b не равны (WORD_0 / WORD_MAX)?
#define wordLess0M(a,  b)   ((word)(wordGeq01(a, b) - WORD_1))
Машинное слово a меньше машинного слова b (WORD_0 / WORD_MAX)?
#define wordLeq0M(a,  b)   ((word)(wordGreater01(a, b) - WORD_1))
Машинное слово a не больше машинного слова b (WORD_0 / WORD_MAX)?
#define wordGreater0M(a,  b)   ((word)(wordLeq01(a, b) - WORD_1))
Машинное слово a больше машинного слова b (WORD_0 / WORD_MAX)?
#define wordGeq0M(a,  b)   ((word)(wordLess01(a, b) - WORD_1))
Машинное слово a не меньше машинного слова b (WORD_0 / WORD_MAX)?

Подробное описание

Реализованы быстрые манипуляции с машинными словами.

Прим.

Манипуляции с массивами машинных слов реализованы в модуле ww.

Макросы сравнений введены для того, чтобы поддержать (и подчеркнуть) регулярный, т. е. без ветвлений, характер сравнений. На известных аппаратных платформах обычные сравнения a < b, a > b, a == b,... регулярны. Поэтому реализованные макросы являются псевдонимами этих сравнений.

Если обычные сравнения все таки не регулярны, то можно использовать следующие универсальные (но медленные) макросы [1, с. 35]:

#define wordLess(a, b)\
    ((~(a) & (b) | ((~(a) | (b)) & (a) - (b))) >> (B_PER_W - 1))
#define wordLeq(a, b)\
    (((~(a) | (b)) & (((a) ^ (b)) | ~((b) - (a)))) >> (B_PER_W - 1))
...

Макросы сравнений без суффиксов 01 и 0M возвращают результат типа int.

Макросы с суффиксом 01 возвращают результат типа word, который принимает значения 0 (WORD_0) или 1 (WORD_1). Эти макросы удобно использовать в арифметике больших чсел.

Макросы с суффиксом 0M меняют WORD_1 на WORD_MAX. Возвращаемые значения можно использовать как маски при организации регулярных вычислений.

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2