[C++] Модули для работы с файлами Стима

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#46 Сообщение 29.03.2012, 23:14

Почитал - прикольно, можно пользоваться в принципе.
По поводу тестов - надо какой-нить фреймворк для unit-тестов прикрутить - для полного счастья.

SVN почему-то не хочет лог коммитов показывать... Это у всех так?

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#47 Сообщение 29.03.2012, 23:26

фреймворк для unit-тестов
Ну да, а давай ещё какую-нибудь модную штучку сделаем.. Да ну..
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
Pr0Ger
Модератор
Модератор
Сообщения: 1829
Зарегистрирован: 16.01.2009
Благодарил (а): 17 раз
Поблагодарили: 214 раз
Контактная информация:

#48 Сообщение 30.03.2012, 00:54

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

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#49 Сообщение 30.03.2012, 06:52

NiGHt-LEshiY
Мне кажется, мы это уже проходили.
Ещё интересно, вот типичный Леший, когда хочет программировать что-либо, будет брать для этого только vim, gcc и gdb? Даже если это будет GUI внезапно?..хотя нет, наверное, не будет.
Последний раз редактировалось NiGHt-LEshiY 30.03.2012, 06:52, всего редактировалось 2 раза.
Причина: Да, +- погрешность на действительно нужные вещи. Не тесты должны проверять код, а программист.

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#50 Сообщение 30.03.2012, 12:00

NiGHt-LEshiY
Вообще-то тесты - это такой способ проверки кода программистом...
Почитай про Test Driven Development. Про то, какие бывают тесты, зачем нужны их разные виды и почему их используют во всех адекватных крупных проектах.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#51 Сообщение 30.03.2012, 17:22

Те тесты, которые я включил и включал в код, служили мне для:
  1. собственно проверки функционала;
  2. Проверки на утчечки памяти (поэтому у меня все они крутятся в бесконечном цикле :) .
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#52 Сообщение 30.03.2012, 19:48

andreil
Угу, правильный подход %) Но со временем их может стать неудобно поддерживать или расширять, поэтому я и говорю о фреймворке. А так - у тебя уже вполне себе есть небольшие юнит-тесты %)

Добавлено спустя 6 минут 3 секунды:
Но советую не использовать указатели - это C стиль, а ты пишешь на С++. На С++, как ни странно, можно писать безопасно %). Как не использовать указатели можно подсмотреть, например, в видео-презентации C++11, ссылку на которую я выкладывал где-то здесь. Лучше используй векторы, или, если совсем приспичит, shared/smart-поинтеры (и, соответственно, никогда руками не пиши new/delete, а размещай все на стеке, тогда и утечек не будет).

PS: утечки часто возникают при использовании эксепшенов, но и не только. Поэтому использовать new/delete и поинтеры вредно.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#53 Сообщение 31.03.2012, 04:36

Мда, про вектора я забыл :( Быстренько перебил код под них - почти все ОК, только загрузка CDR'а теперь выдает Segmentation Fault :( Буду копать завтра, как проснусь.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#54 Сообщение 31.03.2012, 18:11

Обнови svn чтоли %)

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#55 Сообщение 01.04.2012, 01:32

Когда убью косяки, сразу же и обновлю ;)

PS: А так же хочу оптимизировать загрузку BLOB-структур и формат их хранения в памяти - на данный момент это очень ресурсоемкая задача кушает примерно 170Мб памяти и 5-7сек процессорного времени на полную загрузку CDR'а (который на диске в распакованном виде занимает примерно 22Мб).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Villain
Сержант
Сержант
Сообщения: 56
Зарегистрирован: 09.10.2011
Поблагодарили: 22 раза
Контактная информация:

#56 Сообщение 09.04.2012, 21:19

юзал как то подобную штуку на NET, жаль больше половины функций к моменту как я ее нашел уже не работало :(. обновляют заразы

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#57 Сообщение 16.09.2012, 01:01

Я наконец-то вернулся. Долгое отсутствие было связанно с копанием в железках (AVR), мелкой поломкой ноутбука (обрыв шлейфа монитора) и началом осыпания винта на нем. В итоге я на данный момент не могу установить Windows на ноут. Поэтому перешел на Ubuntu :D (а сейчас перехожу на Gentoo).

Через пару деньков вернусь хотя бы к данному проекту. Но с одним но - в ближайшее время разработка будет вестись только под *NIX-платформу, под Windows потом буду добавлять код.

От всех хочется услышать, что требуется написать кроме следующего (что и так планируется/сделано):
  1. Чтение и по возможности запись различных форматов файлов (частично уже реализовано);
  2. Работа с Steam-протоколами (необходимо портировать протокол 2-ой версии и разобраться с 3-ей).

PS: У меня появился постоянный контакт в Skype - почти всегда on-line, но читать сообщения могу только периодически.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Rififi
Нович0к
Нович0к
Сообщения: 15
Зарегистрирован: 25.09.2013
Поблагодарили: 2 раза
Контактная информация:

#58 Сообщение 26.09.2013, 14:02

andreil

Привет, как можно скачать с репы исходники?
прямой чекаут svn-клиентом просит логин/пароль

PS. Посмотрел те, которые приаттачены в первом сообщении.
очень много направлений для улучшения.

- во-первых, почему не используешь C++, а пишешь в "фортран-стайл"?

- char* вместо std::string???

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

- таже фигня с префиксом this-> - это спросто синтаксический мусор, который отвлекает от кода

- несоответсвие типа операторов new/delete - выделяешь память как для массива, удаляешь как для указателя

- зачем вообще ручное управление памятью в программе на C++??? oO смарт-поинтеры рулят.

StreamData *Data = new StreamData();
memset(Data, 0, sizeof(StreamData));

так делать нельзя.

да и вообще, не мешало бы перевести код на C++, благо сейчас это уже ни разу ни раритет
почему это стоит сделать - пример как ты переводишь utf8 в ucs-2:

Код: Выделить всё

wchar_t * utf8_to_unicode(char *utf8_string)
{
	int err;
	wchar_t * res;
	int res_len = MultiByteToWideChar(
		CP_UTF8,			// Code page
		0,					// No flags
		utf8_string,		// Multibyte characters string
		-1,					// The string is NULL terminated
		NULL,				// No buffer yet, allocate it later
		0					// No buffer
		);
	if (res_len == 0) 
	{
		printf("Failed to obtain utf8 string length\n");
		return NULL;
	}
	res = (wchar_t *)calloc(sizeof(wchar_t), res_len);
	if (res == NULL) 
	{
		printf("Failed to allocate unicode string\n");
		return NULL;
	}
	err = MultiByteToWideChar(
		CP_UTF8,			// Code page
		0,					// No flags
		utf8_string,		// Multibyte characters string
		-1,					// The string is NULL terminated
		res,				// Output buffer
		res_len				// buffer size
		);
	if (err == 0)
	{
		printf("Failed to convert to unicode\n");
		free(res);
		return NULL;
	}
	return res;
}
как это делается на C++11:

Код: Выделить всё

std::wstring_convert<std::codecvt_utf8<wchar_t> > conv;

std::wstring utf8_to_unicode(const std::string& utf8_string)
{
   return conv.from_bytes(utf8_string);
}
ну и т.д.

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#59 Сообщение 26.09.2013, 17:49

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

Ответить Вложения 3