LINUX.ORG.RU

Сообщения salvequick

 

С++ ООП дизайн для хранилища семплов

Форум — Development

Приветствую коллеги,

Дорабатываю имеющуюся C++ обертку для порт аудио.

Не могу понять как мне организовать хранение семплов, простых числовых значений типа int разной длины или float. Вопрос по ООП дизайну.

К сожалению имеющая кодовая база построена так разные типы семплов хранятся в разных типах шаблонных классов

MyBuffer<INT_16> 
MyBuffer<FLOAT_32> 

Хранилище типизировано и везде в коде который использует класс MyBuffer стоят switch/if по типу контейнера. Что мне кажется не очень правильно, при добавлении нового типа семплов везде придется ставить дополнительные if блоки.

В каждом таком хранилище будет только один тип значений. Наверное будет правильно сделать MyBuffer не шаблонным а обычным классом. Я могу использовать простой union для хранения разных типов данных в одном объекте и хранить информацию о том какой в целом тип содержит мой контейнер. ( Есть и std::variant из С++17 но мне кажется тут можно обойтись и простым union) Т.е внутри моего класса будет

std::vector<myUnion> dataStorage;

Также можно хранить данные в сыром виде (массив unsigned char) и тоже хранить информацию о том какой тип данных хранится реально внутри контейнера.

Или же можно создать базовый тип Sample и наследников семплы разного формата Sample16, Sample32Float например. И в таком случае хранить коллекцию указателей на этот базовйый тип

std::vector<*Sample>

Хотелось бы еще и данные как то в одном виде отдавать из этого контейнера и избежать всех if/switch по типу.

И тут к сожалению все рассмотренные подходы упираются в одинаковую проблему. метод не сможет вернуть разные типы данных.

type? GetSample(int ch, int frame) 

либо надо иметь разные методы, что привежет к тем же if/switch в коде который использует класс MyBuffer()

int GetIntSample(int ch, int frame);
float GetFloatSample(int ch, int frame); 

либо просто отдавать сырые данные в массиве char

void GetSample(int ch, int frame, char* outBuffer);

Может быть действиельно обойтись простым хранением unsigned char, и отдавать эти данные unisigned char для всех? Например при отправке этих данных по сети они все в любом случае в массив байт преобразуются.

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

Буду благодарен за идеи! Спасибо!

 , , ,

salvequick
()

Статическая линковка с библиотекой содержащей LGPL компоненты

Форум — Development

Добрый день, Небольшой вопрос по лицензированию приложений с открытым кодом.

Использую FTDI FTD2XX драйвер в своем коммерческом приложении с закрытым кодом и линкуюсь с FTD2XX статически. Вижу что внутри FTDI дайвера он статически слинкован с libusb , видно символы и в ассемблерном коде видно функции libusb.

libusb как известно под LGPL лицензией. Если с LGPG библиотекой линковаться динамически то все нормально, а вот если статически то я так понимаю что надо выпускать свой продукт тоже под LPGL и значит открывать код.

Код драйвера FTDI закрыт. FTDI лицензии и readme я читал. Они говорят вот что:

«This package uses an unmodified version of libusb (libusb.info) which is distributed under the terms of the GNU Lesser General Public License (see libusb/COPYING or www.gnu.org/licenses). Source code for libusb is included in this distribution.»

Не будет ли такое использование FTDI и прилинкованного к нему libusb нарушением LGPG? Или же использование unmodified libusb позволяет держать код закрытым?

Спрошу конечно у юриста, но может это что то тривиальное и общественность знает уже.

Спасибо!

 , , , ,

salvequick
()

как выделить non paged блок памяти? (user space)

Форум — Development

Hi all!

Как выделить блок памяти не кэшируемый на диск? Чтобы всегда находился в памяти.

погуглив как то ничего особо не нашел. Вообще возможно такое?

 , ,

salvequick
()

html to man conversion tool

Форум — General

добрый день коллеги!

кто знает есть ли возможность из простой HTML страницы кода получить MAN страницу? я видел есть всемозможные man2html утилиты, а вот есть ли готовое средство html2man?

понятно что в таком случае на html код будут наложены некоторые ограничения, потому что возможности html явно мощнее

нашел написанное на питоне средство HTML to manpage converter, written for ftplib. This program was written by Richard Braakman

http://ftplib.sourcearchive.com/documentation/3.1-1-6/html2man_8py-source.html

однако у меня эта программа не работает

salvequick
()

[Linux] как для процесса получить список дочерних процессов в user space?

Форум — Development

возникла задача получения списка дочерних процессов для процесса в user space. не могу понять как это сделать. Я так понял что какого то системного вызова для этого вообще не существует.

в kernel space это делается просто путем обхода списка с дочерними pid из task_struct

linux/sched.h

struct task_struct {

...

   struct list_head children;   /* list of my children */

...

}

в /proc/{pid} тоже пытался найти информацию но безуспешно

гуглил тоже но все что то не то

есть у кого то такой опыт?

заранее спасибо всем! )

 

salvequick
()

RSS подписка на новые темы