crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Буфер для обмена между классами
Sokoloff
  опции профиля:
сообщение 16.4.2009, 19:32
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Вот подскажите как лучше сделать.

Есть 2 класса один генерит постскрипт, и передает его во второй класс, которй рендерит этот ps с помощью ghostscript.
Вопрос в том, как лучше передавать постскрипт, что использовать в качестве буфера.

Варианты QString и QByteArray я сразу отверг, т.к постскрипт в первом классе генериться по частям (отельно заголовок, отдельно тело и.т.д.) и общий размер я заранее не знаю, а перевыделять память при каждом добавлении IMHO это не хорошо.

Вариант с QStringList вроде очевиден, класс специально создан для хранения больших текстовых данны. Но, внутри у него QString, т.е. используется UTF16, а postscript это ASCII, ghostscript тоже принимает char*, соответственно имеем лишний расход памяти, и ненужное преобразование ASCII->UTF16->ASCII. Не аккуратненько как-то.

Можно использовать QList<QByteArray>, вроде никаких проблем, но не так очевидно как с QStringList.

Еще есть вариант (и он, даже, практически готов), это не использовать буфер вообще, а внутри первого класса, а для каждого кусочка постскрипта вызывать метод фторого класса и передавать в него этот кусок. Но что-то мне кажеться что это лишнее усложнение логики.

Вот поскажите как лучше сделать, что использовать в качестве буфера, или это все мелочи и я просто парю себе мозг?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
LE0N
  опции профиля:
сообщение 17.4.2009, 7:59
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мне вот чего не понятно. Почему ты так боишься динамического распределения памяти? Не умеешь с ней работать?
Если есть данные переменной длины, то здесь два варианта:
1) Динамическое распределение
2) Выделение МАКСИМАЛЬНОГО количества памяти.
----------
Чего ты ждёшь от форумчан?
И что значит "я не знаю длины этих данных" ? То, что данные имеют переменную длину, и её узнать можно во время выполнения? Или то, что ты вообще не знаешь их количество и не можешь определить его даже во время выполнения программы?
ЗЫ. Копирование данных в оперативной памяти занимает минимум времени. А если ещё и динамическое распределение умное написать, так вообще огонь будет...

Сообщение отредактировал LE0N - 17.4.2009, 8:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.5.2024, 21:57