Войти
ФлеймФорумОбщее

Прозрения (259 стр)

Страницы: 1258 259 260 261266 Следующая »
#3870
12:16, 9 мая 2020

Aroch
...и ты сам ответил на свой вопрос.
Смотри, я не говорил, что сам Луа—говнище. У него есть своя, очень ограниченная область применения. Нельзя сказать, что молоток—отстой просто потому, что он проще микроскопа.
Но, с другой стороны, использовать молоток как пример инженерной мысли по меньшей мере странно.


#3871
13:21, 9 мая 2020

winter
> ...и ты сам ответил на свой вопрос.
это тебе так кажется. Приведенный пример кода вполне нормальный для lua, и никаких вопросов у людей использующих lua не вызывает.

#3872
13:53, 9 мая 2020

Гайка м3 сделана не под ключ 6.0, а под 5.5 О_О
Я только сегодня узнал. Я думал, что ключ китайский или гайки, потом таки глянул в таблицы.
Охренеть.

#3873
18:38, 9 мая 2020

winter
Раз ты такой умный, сделай мне, чтобы vector.x и vector[0] означали одну переменную.

#3874
20:00, 9 мая 2020

https://godbolt.org/z/yrnfFA

#3875
21:31, 9 мая 2020

1 frag / 2 deaths
> Гайка м3 сделана
В мелких гайках вообще беспредел по размерам. Есть такие, что только-только резьбу закрывают, а есть такие, что в них можно было бы М6 с мелким шагом нарезать без проблем. Разводной в помощь.

#3876
21:42, 9 мая 2020

сегодня под сотню гаек закрутил, в комплекте был ключ на 7, с одной стороны рожковый, с другой накидной... рожковым вроде закручивается, внутри накидного - проворачивается.  Как на зло, головки на 7 в чемоданчике с авто-инструментом нет.

#3877
(Правка: 6:11) 6:07, 10 мая 2020

Delfigamer
> Раз ты такой умный, сделай мне, чтобы vector.x и vector[0] означали одну
> переменную.

В чем подвох-то?

Безопасный вариант:

T x;
T y;
T z;

<...>

inline T operator [](const int i) const {
    switch (i) {
        case 0: return x;
        case 1: return y;
        case 2: return z;
    }
    return 0;
}

Небезопасный вариант:

T x;
T y;
T z;

<...>

inline T operator [](const int i) const { return &x[i]; }

Хороший компилятор развернет оба варианта в одну или две (в зависимости от того, сидит ли i уже в регистре) машинных инструкции.

#3878
12:44, 10 мая 2020

winter
ты путаешь значение и переменную, возврат по ссылке должен быть если уж речь про одни и те же переменные.

#3879
(Правка: 13:53) 13:37, 10 мая 2020

winter
Ладно, признаю, это был слишком простой вариант.
Теперь я хочу, чтобы было как в шейдерах - три набора {x,y,z,w}, {r,g,b,a}, {s,t,u,v}, плюс численный [0..3], и все ссылаются на один набор из 4-х переменных.

Я вперёд:

local vec4meta = {}

local function vec4(x,y,z,w)
    local self = {}
    if tonumber(x) then
        self[0] = tonumber(x)
        self[1] = tonumber(y) or 0
        self[2] = tonumber(z) or 0
        self[3] = tonumber(w) or 1
    elseif getmetatable(x) == vec4meta then
        self[0] = x[0]
        self[1] = x[1]
        self[2] = x[2]
        self[3] = x[3]
    else
        self[0] = 0
        self[1] = 0
        self[2] = 0
        self[3] = 1
    end
    return setmetatable(self, vec4meta)
end

local vec4index = {
    x = 0, r = 0, s = 0,
    y = 1, g = 1, t = 1,
    z = 2, b = 2, u = 2,
    w = 3, a = 3, v = 3}

function vec4meta:__index(k)
    if vec4index[k] then
        return self[vec4index[k]]
    end
end

function vec4meta:__newindex(k, v)
    if vec4index[k] then
        self[vec4index[k]] = v
    else
        error('attempt to set index ' .. k .. ' of a vec4')
    end
end

function vec4meta:__tostring()
    return string.format(
        'vec4(%g, %g, %g, %g)',
        self[0], self[1], self[2], self[3])
end

local a = vec4()
local b = vec4(1, 2, 3, 4)
local c = vec4(b)

print('a', a)  -- a    vec4(0, 0, 0, 1)
print('b', b)  -- b    vec4(1, 2, 3, 4)
print('c', c)  -- c    vec4(1, 2, 3, 4)
c.x = 0.5
c.g = -4
print('b', b)  -- b    vec4(1, 2, 3, 4)
print('c', c)  -- c    vec4(0.5, -4, 3, 4)

#3880
13:51, 10 мая 2020

Delfigamer
> три набора

Да хоть десять, анонимный юнион в руки - и вперед.

#3881
13:53, 10 мая 2020

winter
> Небезопасный вариант:
А потом компилятор &x[1] и y не заалиасит и наоптимизирует что-то типа

t.y = 2.0;
t[1] = 0.0;
if (t.y < 1.0) ... (не выполнится)
#3882
13:54, 10 мая 2020

Dmitry_Milk
> Да хоть десять, анонимный юнион в руки - и вперед.
Нистандарт и уб алиасинг.

#3883
14:01, 10 мая 2020

Delfigamer
> уб алиасинг

Так что ж теперь, вообще юнионы что-ли в C++ нельзя использовать?

#3884
14:32, 10 мая 2020

Dmitry_Milk
В С++ вообще ничего нельзя использовать, чтоб не напороться на УБ

Страницы: 1258 259 260 261266 Следующая »
ФлеймФорумОбщее