Igor
Есть вариант разделить на две функции что-то типа такого getAddrSzptr и getAddrSzint, но он тоже таксебешно выглядит.
Snusmumriken
getaddr и getaddrp
Igor
Хмм
Igor
Посмотрим, что получится
Snusmumriken
Красота требует жертв, тем более, в пользовательском коде будет красиво, сомневаюсь что юзер будет пользоваться поинтерами, постарайся избежать этого на его стороне. Если где-то должен дёргаться поинтер — оберни в функцию где будешь его использовать, а юзеру оставь чистое.
Igor
Ну юзеру и не приходится сейчас с поинтерами возиться, они все внутри библиотеки свои грязные делишки делают.
Igor
Ага, с getaddr и getaddrp неплохо получилось.
Snusmumriken
Ну просто бул — это вообще непонятно по внешнему просмотру.
Igor
Ну да, я тогда об этом чет не подумал
Igor
Вот думаю, конвертировать на выходе FFI числа в Lua числа или нет. Просто вроде как они ведут себя со всеми функциями так же как и луёвые, да и работы поменьше, не придётся везде tonumber(...) пихать.
Snusmumriken
Сократи до num(...)
Snusmumriken
И луёвые числа гораздо предпочтительнее по ряду причин.
Igor
Хм, ладно. Неплохой вариант. Сча займусь.
Snusmumriken
Igor
Ухты
Igor
А :format() нормально работала, думал что они определяются как числа и остальными
Snusmumriken
У жыта кастомный format.
Плюс ещё у ffi-чисел проблемы с обычными сериализаторами, они проверяют тип и думают что это cdata.
Ну и в принципе, главная проблема — type(22LL) --> cdata.
Igor
Кстати об эту кастомную функцию форматирования я недавно и споткнулся.
Igor
У неё с float значениями поведение другое. Как минимум она не умеет указывать количество нулей до запятой.
Igor
А bit.* когда принимает cdata и number в итоге же number выплюнет?
Snusmumriken
Надо чекнуть
Snusmumriken
Igor
А у меня что-то не хотело, странно
Snusmumriken
Это правда не нули а пробелы.
Igor
У меня он просто начинал писать -123.67890
Snusmumriken
У тебя минус не там небось, он сразу после процента.
Igor
Не-не, я как раз после знака процента пихал
Snusmumriken
Страннота
Igor
Snusmumriken
Ага )
Snusmumriken
Кароч, опять всё приводить.
Igor
Что ж вы со мной делаете, ироды....
Igor
Будь проклят этот Майк Пол!!!
Snusmumriken
Если num слишком длинное — сократи до n.
Нет, поведение более чем нормальное, особенно для проектов на ffi. Просто он старается не терять данные ))
Snusmumriken
Другое дело что юзерские либы должны быть вылизаны, всё проверено, на всё выдана ошибка и так далее. Основная проблема скриптовых языков.
Igor
Ну в :getaddr и :getaddrp оставлю cdata всё же, один фиг они за пределами библиотеки по хорошему не используются. А так только лишнее конвертирование будет, когда обратно сишным функциям будут передаваться аргументы.
Snusmumriken
Пральна
Snusmumriken
Вот в либах скриптов есть куча вот такого вот бойлерплейта, и от него не сбежать.
Igor
Хорошо хоть ffi.errno() сразу луёвое число плюёт.
Snusmumriken
Господа статически типизированные по жизни как раз утверждают что "получается короче", забывая правда про свой статический бойлерплейт ))
Igor
Пхех
Igor
В своей курле я вот так сделал
Snusmumriken
Вооо, спасибо что напомнил допилить асинхронный курл.
Igor
Жалко ещё, что на существующий cdata нельзя метатабличку нацепить.
Snusmumriken
Можно же, не?
Igor
Только на созданный самим FFI
Snusmumriken
Чекни, можно ли дёрнуть getmetatable и начать загонять дичь туда
Igor
Например, когда я пытался на cURL handle нацепить табличку, меня слали.
Snusmumriken
А через debug.setmetatable?
Igor
Igor
Хмммм
Snusmumriken
А теперь чекни методы ))
Igor
А насколько это легально вообще?)
Snusmumriken
Гонщик нелегальный
Snusmumriken
Профессиональный
Snusmumriken
Несётся на всей скоррррости
Snusmumriken
Нет в тебе покорррности
Igor
Таххахахаха
Snusmumriken
Но методы чекни
Igor
Просто сейчас у меня вот так наверчено
Snusmumriken
Проксируешь
Igor
А штош ещё делать-то остаётся, вынуждают
Snusmumriken
Методы чекнул? ))
Igor
Сейчас скрипт пишу
Snusmumriken
Потому что оно может говорить что всё хорошо но не навесить метатаблицу.
Igor
Snusmumriken
Каеф
Snusmumriken
И даже вроде не сломалося
Igor
Ага
Igor
Жаль только что обычный setmetatable так не умеет
Igor
А сам FFI только метатип позволяет создать с метатаблицей
Snusmumriken
Ну можно сделать метатип-прокси, точно так же как с табличкой. Но будет не так весело.
Igor
Это да
Igor
Блин, переделать чтоль на debug.setmetatable)))
Snusmumriken
И нельзя будет делать, допустим
meta_parent.getaddr = ffi.C.getaddr
Igor
Ну с сокетами моими так не прокатит, у меня в луёвой таблице там дофига чего лежит помимо самого сокета, а вот с курлом очень даже сработает
Snusmumriken
Кстати видел курл из пакета luapower?
https://github.com/luapower/libcurl/blob/master/libcurl.lua
Igor
Ага. Ну я велосипед изобретал по большей части из-за того, что мне помимо easy ничего не нужно из курла.
Igor
А, ой
Igor
И в курле не смогу метатабличку нацепить, вспомнил