
Aidar
05.02.2017
06:49:35

Alex Фэils?︙
05.02.2017
12:07:50


Влад
05.02.2017
16:41:08
У меня есть некие сущности(номера портов), которые задаются через дефайны:
#define IOID_17 0x17
#define IOID_16 0x16
И у меня есть номера каналов(виртуальных), которые привязаны к этим портам.
#define CH_1 0x01
#define CH_2 0x02
Ну и какая-то таблица соответствия:
#define CH_1_ID IOID_17
#define CH_2_ID IOID_16
Каналы ведут отсчет от нуля, а вот порты могут начинаться с достаточно большого номера и идти не по порядку.
Пока мне надо было узнавать номер порта по номеру канала, я обходился такими конструкциями:
if (channel = CH_1) { port = CH_1_ID; }
А теперь мне надо узнать номер канала по номеру порта. Вторую таблицу делать странно. Какой есть способ создать таблицу соответствия вида IOID_17 <-> CH_1, из которой можно было в любой момент получить как номер порта по номеру канала, так и номер канала по номеру порта.
Количество записей до пяти штук, каждому каналу соответствует только один номер порта, и наоборот. После компиляции не меняется.


Иван
05.02.2017
16:47:25
я бы предложил использовать бы два контейнера map

Google

Alex Фэils?︙
05.02.2017
16:47:26


Влад
05.02.2017
16:48:30

Alex Фэils?︙
05.02.2017
16:48:41
бинарным поиском мб

Andrei
05.02.2017
16:48:48
А что за язык?

Влад
05.02.2017
16:49:03
си

Andrei
05.02.2017
16:49:04
И сколько элементов?
Бля, понятно.

Влад
05.02.2017
16:49:29
>Количество записей до пяти штук

Alex Фэils?︙
05.02.2017
16:51:01
ща
enum channel {
channel_invalid = -1,
channel_0 = 0,
channel_1,
channel_2,
channel_3,
channel_4
};
enum port {
port_3456 = 3456, // channel 3
port_1634 = 1634, // channel 2
port_1023 = 1023, // channel 1
port_890 = 890, // channel 4
port_1111 = 1111 // channel 0
};
port ports[] = {
port_1111, // offset 0, directly maps to channel_0
port_1023, // offset 1, directly maps to channel_1
port_1634,
port_3456,
port_890
};
port port_from_channel(channel ch)
{
return ports[ch];
}
channel channel_from_port(port prt)
{
for(size_t i = 0; i < 5; i++) {
if (ports[i] == prt) {
return (channel) i;
}
}
return channel_invalid;
}

Влад
05.02.2017
16:53:58
а преобразование канал->порт?

Google

Alex Фэils?︙
05.02.2017
16:56:17
тупо перебор

Berkus
05.02.2017
17:51:35
при 5 элементах перебор быстрее всего, причем unrolled

Влад
05.02.2017
18:07:33
еще вариант
@vvzvlad
#define CHANNEL_TABLE \
CHAN(1, 17) \
CHAN(2, 16)
#define CHAN(id, io) CHAN_IO_##id = io,
enum {
CHANNEL_TABLE
};
#undef CHAN
#define CHAN(id, io) IO_CHAN_##io = id,
enum {
CHANNEL_TABLE
};
#undef CHAN
после препроцессинга будет как-то так:
enum {
CHAN_IO_1 = 17, CHAN_IO_2 = 16,
};
enum {
IO_CHAN_17 = 1, IO_CHAN_16 = 2,
};

Andre
05.02.2017
20:10:52
Reindex.. please wait

Surreal
05.02.2017
20:11:38

Andre
05.02.2017
20:12:26

Alex Фэils?︙
05.02.2017
20:14:45
там расширение какое-то, ща гляну в хелпе
там есть %lf
но вообще странно.

Vladislav
05.02.2017
20:29:48

Ned Ogl
06.02.2017
04:20:40
Можно ли написать приложение под андроид средствами андроид?

Aidar
06.02.2017
05:10:02

Timofey
06.02.2017
06:18:39
Были даже приложения для этого, бесплатные, но с сильно урезанными возможностями.

Maxim
06.02.2017
06:20:14
Например, AIDE

синий ёж
06.02.2017
06:41:50
Я им иногда пользовался

Daniyal
06.02.2017
07:04:25
Как можно перенаправить/забуферезирровать std::cerr ?

Aidar
06.02.2017
07:05:26
stderr это поток номер 2

Daniyal
06.02.2017
07:05:33
Std::cout легко, у него буфер есть

Google

Aidar
06.02.2017
07:05:37
В консоли перенапавляй куда хочешь

Daniyal
06.02.2017
07:05:49
В смысле прям их кода, в консоли то понятно)

Aidar
06.02.2017
07:06:01
Зачем это делать в проге?

Daniyal
06.02.2017
07:06:47
Я скрипт запускаю из кода, и нужно, получить не только код возврата, но еще и сообщение
Оно кладется в std::cerr, как не трудно догадаться
А чем не устраивает вариант просто посмотреть в вывод терминала я не знаю, мне такую таску дали и я сижу гуглю

Aidar
06.02.2017
07:12:10
Оно кладется не в ваш stderr
Точнее не в cerr а в stderr
Есть ось специфик получения вывода дочернего процесса
Тоесть ваще какого хрена дочерний процесс должен прогонять свой вывод через ваш с++ апи

Stanislav
06.02.2017
07:17:18

Daniyal
06.02.2017
07:17:39
Ubuntu.

Daniyal
06.02.2017
07:19:12
Я вообще свято верил, что те потоки, которые в плюсах , и есть те же самые потоки операционки. То есть я не правильно думал да? У плюсов свои потоки, у ОС свои?

Stanislav
06.02.2017
07:27:32
std::cerr.rdbuf(std::out.rdbuf()) как то так

Daniyal
06.02.2017
07:37:12
Пробовал, не работает

Жулик
06.02.2017
07:41:59
2>&1

Daniyal
06.02.2017
07:45:25
И еще вопрос в догонку. Есть в общем буст и такая задача : как только будет нажата ctrl -c при запуске из консольки , то необходимо , что бы все потоки кильнули каждый свои запущенный скрипт. Собственно вопрос как это сделать ? Условные переменные , я так понимаю не подходят, ибо событие это может и вовсе никогда не произойти

Жулик
06.02.2017
07:46:15
Сигналы тебе в помощь

Aidar
06.02.2017
07:47:22
Они выводят в потоки оси

Google

Berkus
06.02.2017
09:41:29

Антон
06.02.2017
10:10:24
Reindex.. please wait
Reindex.. please wait
Reindex.. please wait
мой код не работает

Admin
ERROR: S client not available

Антон
06.02.2017
10:14:14
https://github.com/AoID/aengine/blob/master/src/gl/renderer/gl_postprocess.cpp#L173

Berkus
06.02.2017
10:28:45
если не работает, надо починить
вообще в статье "как правильно задавать вопросы" всё верно пишут - если хотите чтобы вам помогли, детально опишите проблему, как вы пытались ее решить и что у вас не получилось
а "у меня не работает" обычно заканчивается "почини, раз не работает"

Антон
06.02.2017
10:30:15

Berkus
06.02.2017
10:30:26
как ты понял что проблема там?
может автор этого кода Magnus Norddahl может что-то сказать

Антон
06.02.2017
10:31:00
эту функцию написал я.

Artem
06.02.2017
10:32:58
Заполни эти пункты
1. Я сделал <....>
2. Я ожидал, что <....>
3. На самом деле произошло <...>

Alexander
06.02.2017
10:33:04
обычно пишут, что они хотели получить и что получили, так было бы конкретнее
опередил меня)

Timofey
06.02.2017
10:33:29
Синхронность)

Berkus
06.02.2017
10:33:36
набросились )
эту функцию написал я.
никаких ошибок в консоли тебе opengl не пишет? например кончились фреймбуферы или какую-нибудь еще ересь

Google

Антон
06.02.2017
10:35:20

Berkus
06.02.2017
10:36:26
а blend func ты меняешь в шейдере?
покажи код шейдера

Антон
06.02.2017
10:36:57
Reindex.. please wait

Aidar
06.02.2017
10:38:18
Reindex.. please wait
Reindex.. please wait

Антон
06.02.2017
10:38:40
Reindex.. please wait
Reindex.. please wait

Stanislav
06.02.2017
10:38:57
Reindex.. please wait

Антон
06.02.2017
10:39:04
https://github.com/AoID/aengine/blob/master/wadsrc/static/shaders/glsl/lensflare.fp

Aidar
06.02.2017
10:39:28
Лучше всего покажи перехваты gl функций

Антон
06.02.2017
10:39:34
я знаю, что умножение на 0 это как минимум инвалидство

Berkus
06.02.2017
10:39:44
я бы начал с glBlendMode

Aidar
06.02.2017
10:40:04
Плохо 3 раза текстуру трогаешь
Но валидно