Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как Вы обычно передаете stream разрабатывая парсер 
:(
    Опции темы
mes
Дата 3.7.2013, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(EvilsInterrupt @  3.7.2013,  11:04 Найти цитируемый пост)
 НО в пределах того пространства имен в котором объявлен объект.

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


--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 7.7.2013, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



При добавлении новой фичи в мою существующую утилиту, которая решает некоторые мои проблемы и моих знакомых я столкнулся с тем, что мне сложно ее добавлять. После размышлений пришел к выводу что "узким местом" являет код по работе с PE форматом. В виду того что это формат бинарного файла очень сложный, то мне бы хотелось послушать, а как другие программеры пишут код по работе с бинарными файлами? 

Вообщем суть темы обсудить\получить новые навыки по удобной работе с форматами бинарных файлов. Чтобы не усложнять я ввожу придуманный с головы формат, назову его SuperFormat, который обладает теми характеристиками, что встречаются в реальных форматах исполняемых файлах.

Опишу и дополню первоначальную задачу поста.

Цель: Разработка класса\библиотеки по работе с форматом файла. Нужно читать\писать из файла этого формата. Условно назовем формат файла SuperFormat.

Некоторые нюансы формата:
1) Существует разные вариации для 32 и 64 бита.
2) Все заголовки(структуры) используемые в формате имеют одинаковый набор структур и названий полей в структурах для обоих режимов. Отличия в том, что в некоторых типов полей uint32_t или uint64_t зависит от битности файла.
3) Расположение некоторых заголовков в файле можно узнать только прочитав некоторые другие заголовки

Формат описывается следующими структурами:

Код

#include <PshPack1.h>

struct FirstHeader_t
{
   uint16_t  signature;
   uint32_t  secondHeaderOffset;
};

struct SecondHeader32_t
{
   uint32_t signature;
   uint32_t specific_field;
};

struct SecondHeader64_t
{
   uint32_t signature;
   uint64_t specific_field;
};

#include <PopPack.h>


Требования к коду:
Писать обобщенно независимо от битности формата. У меня пока это достигнуто с помощью C++ идиомы traits.

P.S.:
Подобные вещи встречаются на практике. К примеру если посмотреть в WinNt.h хидер идущий с MSVS то можно увидеть структуры IMAGE_NT_HEADERS32 и IMAGE_NT_HEADERS64. Эти структуры имеют один и тот же набор полей и имен этих полей, но некоторые поля отличаются типом. Эти структуры описывают PE32\PE32+ форматы. Но точно такая же ситуация и с Elf, Mach-O.

PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 7.7.2013, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



EvilsInterrupt, вот опять ставите мелочи во главу угла... У вас есть уже готовый (распланированный) и удобный концепт для варианта с одной архитектурой ?
если нет, то не думаю, что стоит на этом заморачиваться, хотя бы по проблеме того, что не понятно на каком уровне нужно производить селекцию подходящего типа.. 


Цитата(EvilsInterrupt @  7.7.2013,  09:53 Найти цитируемый пост)
Писать обобщенно независимо от битности формата. У меня пока это достигнуто с помощью C++ идиомы traits.

как минимум если используете трайтс, то логически его использовальзовать для всех структур-хэдеров, а не только тех, которые нравятсая.. 

т.е. 
Код

template<T>
struct SF
{
   header1_t header1;
   select<T>::header2 header2;
}

выглядит необоснованно однобоко, в отличии  от 
Код

template<T>
struct SF
{
   select<T>::header1 header1;
   select<T>::header2 header2;
}

кстати концепт traits, подразумевает передачу этого traits, как шаблонный параметр.. вроде у Вас по другому... это не имеет значения, кроме как путаницы.. 

и так сбоку помимо traits есть еще if_-селекция.. 



--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 7.7.2013, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Цитата(mes @  7.7.2013,  18:26 Найти цитируемый пост)
выглядит необоснованно однобоко, в отличии  от 

Ну если присмотреть к объявлению FirstHeader_t, то видно что от битности не зависит! Смысл его загонять в traits-типы?

Цитата(mes @  7.7.2013,  18:26 Найти цитируемый пост)
а не только тех, которые нравятсая.. 

Не те что нравятся, а те что нуждаются в этом обобщении!
Как я уже привел выше FirstHeader_t в этом обобщении не нуждается. Зато типы SecondHeader32_t и SecondHeader64_t к общему SecondHeader_t нуждаются!

P.S.:
Цитата(mes @  7.7.2013,  18:26 Найти цитируемый пост)
вот опять ставите мелочи во главу угла...

Ну как вся наша жизнь состоит из мелочей! ;) Куда уж без них?

PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 7.7.2013, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Цитата(mes @  7.7.2013,  18:26 Найти цитируемый пост)
и так сбоку помимо traits есть еще if_-селекция.. 

ВЫ об идиоме упомянули type selection ?
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 7.7.2013, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(EvilsInterrupt @  7.7.2013,  19:35 Найти цитируемый пост)
ВЫ об идиоме упомянули type selection ? 

да об ней smile

Добавлено через 5 минут и 18 секунд
Цитата(EvilsInterrupt @  7.7.2013,  17:36 Найти цитируемый пост)
Ну как вся наша жизнь состоит из мелочей! ;) Куда уж без них?

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

Цитата(EvilsInterrupt @  7.7.2013,  17:36 Найти цитируемый пост)
Как я уже привел выше FirstHeader_t в этом обобщении не нуждается. Зато типы SecondHeader32_t и SecondHeader64_t к общему SecondHeader_t нуждаются!

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



--------------------
PM MAIL WWW   Вверх
mes
Дата 7.7.2013, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



вот пример на скорую руку :
http://codepad.org/fJ5HPr0u

Это сообщение отредактировал(а) mes - 7.7.2013, 23:36


--------------------
PM MAIL WWW   Вверх
SenkraD
Дата 8.7.2013, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



Цитата(mes @  7.7.2013,  23:35 Найти цитируемый пост)
вот пример на скорую руку :
http://codepad.org/fJ5HPr0u
а не могли б код сюда выложить? унекоторых на работе не все сайты открыты 



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 8.7.2013, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Цитата(SenkraD @  8.7.2013,  11:30 Найти цитируемый пост)
а не могли б код сюда выложить? унекоторых на работе не все сайты открыты 

Не думаю, что mes обидится если выполню просьбу вместо него. Вот:
Код

#include <iostream>

template<bool, typename TypeTrue, typename TypeFalse>
struct if_
{
  typedef TypeTrue type;
};

template<typename TypeTrue, typename TypeFalse>
struct if_<false, TypeTrue, TypeFalse>
{
  typedef TypeFalse type;
};

namespace variants {
  enum num { a32, a64 };
}
typedef variants::num variant;



template<variant V>
struct test
{
  typedef
    typename if_<V==variants::a32, double,
    typename if_<V==variants::a64, int, void>::type>::type type;
};


int main()
{
 std::cout 
   << test<variants::a32>::type(5.6) << " :: "
   << test<variants::a64>::type(5.6) << std::endl;
}

PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 8.7.2013, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(EvilsInterrupt @  8.7.2013,  10:29 Найти цитируемый пост)
не думаю, что mes обидится если выполню просьбу вместо него. 

 smile  smile 

в итоге селекция типа должна разрешиться через обозначенный формат, например 

Код

typedef format<a32> format32;
format32::header_type header;


Это сообщение отредактировал(а) mes - 8.7.2013, 13:47


--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 9.7.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Цитата(mes @  7.7.2013,  18:26 Найти цитируемый пост)
У вас есть уже готовый (распланированный) и удобный концепт для варианта с одной архитектурой ?

Я правильно понял, что применяя термин "удобный концепт" Вы вкладываете "интерфейс будущей библиотеки"?

Это сообщение отредактировал(а) EvilsInterrupt - 9.7.2013, 12:38
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 9.7.2013, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



не совсем.. концепт это та идея, что связывает интерфейс с имплементацией.. например хотим разработать класс фигура.. для начала нам нужно определитъся, что все таки от фигуры требуется и что она будет предоставлять.. 
будем ли мы ее рисовать, изменять, совмещать, сохранять ? и кто она является по сути : строчка, число, свойство, структура даныных, объект ? когда мы знаем, что мы строим, можем думая об интерфейсе приступатъ к реализации..

Добавлено через 5 минут и 39 секунд
к примеру для обсуждаемого формата  (как библиотечной сущности) я предполагаю чтение произвольной записи, и построение изображения на основе считанного, и возможно комбинирование данных...

Добавлено через 6 минут и 18 секунд
Цитата(mes @  9.7.2013,  17:07 Найти цитируемый пост)
изображения
image



--------------------
PM MAIL WWW   Вверх
mes
Дата 9.7.2013, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(mes @  9.7.2013,  17:07 Найти цитируемый пост)
 я предполагаю

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


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.