LINUX.ORG.RU

История изменений

Исправление Bizun, (текущая версия) :

Огого, чет я ни чего не понял. Допустим, исходная конструкция:

unsigned int x;

switch (x) {
    case V1: break;
    case V2: break;
    case V3: break;
    ...
    case VN: break;
}

//Таблица будет прирмерно такая:
V1, adr1
V2, adr2
V3, adr3
...
VN, adrN
Вот. Если элементов мало, то можно просто перебирать таблицу в цикле от первого к последнему элементу, и все. Если она большая, то да, двоичный поиск очень уместен. Но что такое goto «tbl[x-min(V1...Vn)]»? Разве значения-константы (x (условно), V1...Vn) накладывают какие то ограничения на использование того или иного алгоритма поиска значения в таблице? Ну и к " max(V1...Vn)-min(V1....Vn) > n-1" вопрос тот же.

Возможно, я сильно туплю, но все же... Да, туплю, ниже описал.

UPD: Я, кажется, понял что такое goto tbl[x-min(V1...Vn)]. Это некая большая таблица, в которой x-min(V1...Vn) - будет адрес куска исполняемого кода, верно?

Я, если честно, под таблицей предпологал другую структуру (ключ1, адрес1 ... ключN, адресN) и в своемнедо-компиляторе сделал именно так. При выполнении свитча просто перебирались константы и при совпадении ключей совершался переход.

Исправление Bizun, :

Огого, чет я ни чего не понял. Допустим, исходная конструкция:

unsigned int x;

switch (x) {
    case V1: break;
    case V2: break;
    case V3: break;
    ...
    case VN: break;
}

//Таблица будет прирмерно такая:
V1, adr1
V2, adr2
V3, adr3
...
VN, adrN
Вот. Если элементов мало, то можно просто перебирать таблицу в цикле от первого к последнему элементу, и все. Если она большая, то да, двоичный поиск очень уместен. Но что такое goto «tbl[x-min(V1...Vn)]»? Разве значения-константы (x (условно), V1...Vn) накладывают какие то ограничения на использование того или иного алгоритма поиска значения в таблице? Ну и к " max(V1...Vn)-min(V1....Vn) > n-1" вопрос тот же.

Возможно, я сильно туплю, но все же...

UPD: Я, кажется, понял что такое goto tbl[x-min(V1...Vn)]. Это некая большая таблица, в которой x-min(V1...Vn) - будет адрес куска исполняемого кода, верно?

Я, если честно, под таблицей предпологал другую структуру (ключ1, адрес1 ... ключN, адресN) и в своемнедо-компиляторе сделал именно так. При выполнении свитча просто перебирались константы и при совпадении ключей совершался переход.

Исходная версия Deleted, :

Огого, чет я ни чего не понял. Допустим, исходная конструкция:

unsigned int x;

switch (x) {
    case V1: break;
    case V2: break;
    case V3: break;
    ...
    case VN: break;
}

//Таблица будет прирмерно такая:
V1, adr1
V2, adr2
V3, adr3
...
VN, adrN
Вот. Если элементов мало, то можно просто перебирать таблицу в цикле от первого к последнему элементу, и все. Если она большая, то да, двоичный поиск очень уместен. Но что такое goto «tbl[x-min(V1...Vn)]»? Разве значения-константы (x (условно), V1...Vn) накладывают какие то ограничения на использование того или иного алгоритма поиска значения в таблице? Ну и к " max(V1...Vn)-min(V1....Vn) > n-1" вопрос тот же.

Возможно, я сильно туплю, но все же...