Russian Qt Forum
Апрель 26, 2024, 19:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Голосование
Вопрос: Хотите ли Вы в этом разбираться?
Да, хочу - 4 (22.2%)
Было бы полезно, но нет времени - 5 (27.8%)
Нет, это не окупает изучения - 4 (22.2%)
Та ну его нафиг! - 5 (27.8%)
Ваш вариант - 0 (0%)
Всего голосов: 11

Страниц: 1 2 [3] 4 5 ... 8   Вниз
  Печать  
Автор Тема: Хотите ли Вы в этом разбираться?  (Прочитано 48368 раз)
Bepec
Гость
« Ответ #30 : Апрель 23, 2014, 20:46 »

Значит или тут костыль, либо кривая архитектура Улыбающийся Знать свою длину любой контейнер должен Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #31 : Апрель 23, 2014, 20:51 »

Значит или тут костыль, либо кривая архитектура Улыбающийся Знать свою длину любой контейнер должен Улыбающийся
Хотите со мной обсудить архитектуру, давайте.
Двухсвязный список, в него нитки воркеры постоянно добавляют записи, отдельная нитка движется по нему и обрабатывает записи определённого типа. Спрогнозировать ни количество добавляемые записей, ни среднее время обработки нужных записей невозможно.
Попробуете с фором? Или кривая архитектура? Расскажите как бы вы сделали?
« Последнее редактирование: Апрель 23, 2014, 21:07 от Old » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #32 : Апрель 23, 2014, 21:20 »

Возвёл очи к небу..  Плачущий
И тем не менее. Понятно, что мы вновь радостно скатились в холивар, но вот есть проекты, код которых мной "принимается" как-то органично (типа Qt), а есть - ну вырви глаз просто (типа MFC/WinApi с их монстрами вроде
Код
C++ (Qt)
EnumServicesStatus(hSCM,SERVICE_WIN32, SERVICE_STATE_ALL, (LPENUM_SERVICE_STATUS)&Status, Size, &Needed, &Return, &Handle)
). Да и boost в этом смысле то ещё наслаждение:
Код
C++ (Qt)
boost::asio::async_write(socket_, boost::asio::buffer(data_, bytes_transferred), boost::bind(&session::handle_write, this, boost::asio::placeholders::error));
Только и годится для того, чтобы тут же свои обертки к этому кошмару написать и убрать эти художества по капот куда-нибудь поглубже.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #33 : Апрель 23, 2014, 21:25 »

Зачем использовать asio, если он не нравится? Есть 100500 всяких библиотек с "более традиционными" подходами. Улыбающийся
Записан
Bepec
Гость
« Ответ #34 : Апрель 23, 2014, 21:30 »

А зачем там фор?
Там есть воркеры, создающие элементы.
Там идёт обычный двусвязный список в который добавляются элементы.
Там идёт нитка читающая и обрабатывающая данные.
И просто у треда, держащего списочек должно быть замутексное изъятие первого элемента. Вот и всё.

Для более подробной архитектуры нужна более подробная информация об обработке. Меняются ли элементы оставаясь в списке, или же отдаются на сторону. Изымаются элементы или же модифицируются (2 предложения об 1 и том же с разных сторон Улыбающийся).
Там не нужен фор как таковой. Там не нужен итератор как таковой.

И да, двусвязный список в любой момент времени скажет количество элементов. Нэ?
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #35 : Апрель 23, 2014, 21:36 »

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

И да, двусвязный список в любой момент времени скажет количество элементов. Нэ?
Ну и что? А через мгновенье оно будет другим. Улыбающийся
Записан
Bepec
Гость
« Ответ #36 : Апрель 23, 2014, 21:59 »

В данном случае мне неясно что он делает в обработке. Он модифицирует их или удаляет?
Тут вообще циклов ненужно. Зачем они? Собственно у нас есть класс с списком и он разруливает кто кому чего куда. Допустим список int.
В этом классе делаем метод getNext(). И спокойно проходим до конца списка.
В принципе с этой позиции очень похоже на итератор, но итератор не сможет работать одновременно с несколькими потоками, так что класс прослойка всё равно будет нужен. Потому итератор выбрасываем, оставляя только часть его функционала Улыбающийся Остальное нам нафиг и не надо ^.^
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #37 : Апрель 23, 2014, 22:02 »

Ну вот вы сами и ответили на этот вопрос.
Теперь вам нужно посмотреть, а какой же функционал предоставляют базовые итераторы и вы избавитесь от предрассудков. Улыбающийся
И главное, итератор это концепция, вы можете не использовать стандартные, но использовать свои. Улыбающийся
« Последнее редактирование: Апрель 23, 2014, 22:04 от Old » Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #38 : Апрель 23, 2014, 23:56 »

Зачем использовать asio, если он не нравится? Есть 100500 всяких библиотек с "более традиционными" подходами. Улыбающийся

Можете огласить список? (хотя бы парочку).
Главное требование: кроссплатформенность, независимость от инфраструктуры (что бы не нужно было из-за одной только сети целый фреймворк за собой таскать).

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

Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #39 : Апрель 24, 2014, 00:08 »

Мне неприятен механизм их. Что нужны проверки на конец и т.п.
Я уж лучше возьму, выясню длину, и точно пройду от и до for'ом.
update: и да, я могу использовать свой новый for в любом месте, где ток можно. Даже в С.

Итератор - это паттерн. Суть которого: возможность единообразно пробежать по элементам любого контейнера, не зная принципов устройства этого контейнера.

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


« Последнее редактирование: Апрель 24, 2014, 00:19 от _Bers » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #40 : Апрель 24, 2014, 07:40 »

Да легко (вы последний вариант tex_iteratora смотрели?):
А может надо было не спешить и дать другим показать себя? Если это сделал автор (кстати с заметной переделкой версии) - это еще ни о чем не говорит.

Хорошо, а вот скажите: зачем применяются такие средства? Какой необходимостью и/или выгодой это вызвано? Что это за такой ужасный BibTex который нельзя впарить по-простому-народному? Открываем викусю
Цитировать
@Book{hicks2001,
 author    = "von Hicks, III, Michael",
 title     = "Design of a Carbon Fiber Composite Grid Structure for the GLAST
              Spacecraft Using a Novel Manufacturing Technique",
 publisher = "Stanford Press",
 year      =  2001,
 address   = "Palo Alto",
 edition   = "1st,",
 isbn      = "0-69-697269-4"
}
Хммм..... какие "итераторы" Непонимающий Тут просто-напросто читать файл по строке и разбирать простейшими средствами, напр методами того же QString. За пару часов все готово (если не быстрее)

Откуда же взялось вот это?
Код
C++ (Qt)
template <class BidirectIter, class Traits = std::iterator_traits<BidirectIter>>
class tex_iterator
{
public:
   typedef BidirectIter iterator;
   typedef typename Traits::value_type value_type;
   typedef typename Traits::pointer pointer;
   typedef typename Traits::reference reference;
   typedef typename Traits::difference_type difference_type;
   typedef typename std::bidirectional_iterator_tag iterator_category;
 
   typedef boost::basic_regex<value_type> regex_type;
 
Мне кажется - просто из желания поумничать и покрасоваться, вот сотрите как я тут загнул! А тебе слабО так!  Улыбающийся. Это вполне простительная человеческая слабость, но к делу/работе это отношения не имеет, чисто понты
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #41 : Апрель 24, 2014, 08:24 »

Можете огласить список? (хотя бы парочку).
Начиная от курла: http://curl.haxx.se/ и
http://lacewing-project.org/
http://pocoproject.org/
http://www.alhem.net/Sockets/
http://www.w3.org/Library/
и заканчивая каким нибудь ACE. Улыбающийся

Ничего не имею против asio.
Просто любопытно, есть ли хоть одна альтернативная библиотека, по уровню не хуже asio.
Мне asio очень нравиться и я пользуюсь только им, но на аналогичные решения посматриваю, если они мне попадаются.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #42 : Апрель 24, 2014, 08:26 »

Хорошо, а вот скажите: зачем применяются такие средства?
Какие средства? Итераторы? Вы спрашиваете зачем применять итераторы в C++?

Хммм..... какие "итераторы" Непонимающий Тут просто-напросто читать файл по строке и разбирать простейшими средствами, напр методами того же QString. За пару часов все готово (если не быстрее)
Все правильно, на коленке по быстрому накидал и денег с заказчика взял, для чего думать, а что будет завтра, если придется что-то здесь менять? Улыбающийся
К сожалению, не все так живут. Многим написанный сегодня код придется поддерживать и развивать еще очень долго, да еще и не одному. Улыбающийся

"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
— Martin Golding

Откуда же взялось вот это?
Так вас тайпдефы так напугали? Улыбающийся
Сочувствую.
Вы раньше вроде писали, что операторы.
« Последнее редактирование: Апрель 24, 2014, 09:06 от Old » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #43 : Апрель 24, 2014, 09:37 »

Цитировать
Хорошо, а вот скажите: зачем применяются такие средства? Какой необходимостью и/или выгодой это вызвано? Что это за такой ужасный BibTex который нельзя впарить по-простому-народному? Открываем викусю
Я повторяю десять раз и снова..

А теперь посмотрим на запись (BibTeXEntry) не из вики, а из реального журнала: https://journals.aps.org/prd/abstract/10.1103/PhysRevD.89.072015
Код
Bash
@article{PhysRevD.89.072015,
 title = {Updated cross section measurement of <span class="aps-inline-formula">
<math display="inline"><mrow><msup><mrow><mi>e</mi></mrow><mrow><mo>+</mo>
</mrow></msup><msup><mrow><mi>e</mi></mrow><mrow><mo></mo></mrow></msup>
<mo stretchy="false"></mo><msup><mrow><mi>K</mi></mrow><mrow><mo>+</mo></mrow>
</msup><msup><mrow><mi>K</mi></mrow><mrow><mo></mo></mrow></msup><mi>J</mi>
<mo stretchy="false">/</mo><mi>ψ</mi></mrow></math></span> and <span class="aps-inline-formula">
<math display="inline"><mrow><msubsup><mrow><mi>K</mi></mrow><mrow><mi>S</mi></mrow>
<mrow><mn>0</mn></mrow></msubsup><msubsup><mrow><mi>K</mi></mrow><mrow><mi>S</mi>
</mrow><mrow><mn>0</mn></mrow></msubsup><mi>J</mi><mo stretchy="false">/</mo><mi>ψ</mi></mrow></math></span> via initial state radiation at Belle},
 
 author = {Shen, C.\,P. and Yuan, C.\,Z. and Wang, P. and Abdesselam, A. and Adachi, I.
and Aihara, H. and Al Said, S. and Asner, D.\,M. and Aulchenko, V. and Aushev, T. and Ayad, R.
and Bakich, A.\,M. and Bala, A. and Bobrov, A. and Bonvicini, G. and Bozek, A.
and Bra\ifmmode \check{c}\else \v{c}\fi{}ko, M. and Browder, T.\,E. and Chekelian, V. and
Chen, A. and Cheon, B.\,G. and Chilikin, K. and Chistov, R. and Cho, K. and Chobanova, V. and
Choi, S.-K. and Choi, Y. and Cinabro, D. and Dalseno, J. and Danilov, M. and Dole\ifmmode \check{z}\else \v{z}\fi{}al, Z.
and Drutskoy, A. and Dutta, D. and Eidelman, S. and Epifanov, D. and Farhat, H. and Fast, J.\,E. and Ferber, T. and Frey, A.
and Gaur, V. and Ganguly, S. and Gillard, R. and Glattauer, R. and Goh, Y.\,M. and Golob, B. and Haba, J. and Hayasaka, K. and Hayashii, H. and He, X.\,H. and Hoshi, Y. and Hou, W.-S. and Hsiung, Y.\,B. and Hyun, H.\,J. and Iijima, T. and Ishikawa, A. and Itoh, R. and Iwasaki, Y. and Joffe, D. and Julius, T. and Kang, J.\,H.
and Kato, E. and Kawasaki, T. and Kiesling, C. and Kim, D.\,Y. and Kim, H.\,J. and Kim, J.\,B. and Kim, J.\,H.
and Kim, K.\,T. and Kim, M.\,J. and Kim, Y.\,J. and Kinoshita, K. and Ko, B.\,R.
and Kody\ifmmode \check{s}\else \v{s}\fi{}, P. and Korpar, S. and Kri\ifmmode \check{z}\else \v{z}\fi{}an, P. and Krokovny, P. and Kuzmin, A. and Kwon, Y.-J. and Lee, S.-H. and Li, J. and Li Gioi, L. and Libby, J. and Liu, C. and Liu, Z.\,Q. and Lukin, P.
and Matvienko, D. and Miyabayashi, K. and Miyata, H. and Mizuk, R. and Moll, A. and Mussa, R. and Nagasaka, Y. and Nakano, E. and Nakao, M. and Natkaniec, Z. and Nayak, M. and Nedelkovska, E. and Nisar, N.\,K. and Nishida, S. and Nitoh, O. and Okuno, S. and Park, C.\,W. and Park, H.
and Pedlar, T.\,K. and Pestotnik, R. and Petri\ifmmode \check{c}\else \v{c}\fi{}, M. and Piilonen, L.\,E. and Ritter, M.
and R\"ohrken, M. and Rostomyan, A. and Ryu, S. and Saito, T. and Sakai, Y. and Sanuki, T. and Sato, Y. and Schneider, O.
and Schnell, G. and Semmler, D. and Senyo, K.
and Seon, O. and Sevior, M.\,E. and Shapkin, M. and Shebalin, V. and Shibata, T.-A. and Shiu, J.-G.
and Shwartz, B. and Sibidanov, A. and Simon, F. and Sohn, Y.-S. and Sokolov, A. and Solovieva, E. and Stani\ifmmode \check{c}\else \v{c}\fi{}, S.
and Stari\ifmmode \check{c}\else \v{c}\fi{}, M. and Steder, M. and Sumiyoshi, T. and Tamponi, U.
and Tatishvili, G. and Teramoto, Y. and Uchida, M. and Unno, Y. and Uno, S. and Urquijo, P. and Usov, Y.
and Van Hulse, C. and Vanhoefer, P. and Varner, G.
and Vorobyev, V. and Wagner, M.\,N. and Wang, C.\,H. and Watanabe, M. and Watanabe, Y. and Williams, K.\,M. and Won, E. and Yamamoto, H.
and Yamashita, Y. and Yashchenko, S. and Yook, Y. and Zhang, C.\,C. and Zhang, Z.\,P. and Zhulanov, V. and Zupanc, A.},
 
 
 collaboration = {(Belle Collaboration)},
 journal = {Phys. Rev. D},
 volume = {89},
 issue = {7},
 pages = {072015}, %commented text, commented text,  
 numpages = {9},
 year = {2014},
 month = {Apr},
 publisher = {American Physical Society},
%  doi = {10.1103/PhysRevD.89.072015},
%  url = {http://link.aps.org/doi/10.1103/PhysRevD.89.072015},
}
 
И более того, в самом bib файле таких записей может быть сотни, может быть куча закомментированных блоков и т.д.. (кстатии, символ \% - не является началом комментария, в отличие от просто %)

Вот, для примера, моя реализация парсера, которая легко с этим справляется:
Код
C++ (Qt)
#ifndef BIBTEX_PARSER_H
#define BIBTEX_PARSER_H
 
#include <string>
 
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/regex.hpp>
#include <boost/tokenizer.hpp>
 
#include "core/spec_token_functions.h"
#include "core/tex_iterator.h"
#include "core/bibtex_entry.h"
 
namespace bibmake {
 
namespace core {
 
class bibtex_parser
{
public:
   typedef std::string string_type;
 
   template <class Iterator>
   static bool parse(Iterator begin, Iterator end, const string_type & key, bibtex_entry & entry)
   {
       static const boost::regex comment_regex("[^\\\\](%[^\\n\\r]*)");
 
       tex_iterator<Iterator> _begin(begin, end, comment_regex);
       tex_iterator<Iterator> _end(end, end, comment_regex);
 
       boost::match_results<tex_iterator<Iterator>> what;
       boost::regex regex("@(\\w+)[\\s\\t]*\\{[\\s\\t]*"+key);
 
       if (!boost::regex_search(_begin, _end, what, regex))
           return false;
 
       entry.set_key(key);
       entry.set_type(what.str(1));
 
       _begin = what[0].first;
 
       quote_list<char> quotes('{', '}');
       quotes.add_quote('"', '"');
 
       quote_extractor<char> qextractor(quotes);
       string_type _entry;
 
       if (!qextractor(_begin, _end, _entry))
           return false;
 
       boost::tokenizer<spec_char_separator<char>> tok(_entry, spec_char_separator<char>(",", "", quotes));
 
       regex.assign("[\\s\\t]*(\\w+)[\\s\\t]*=(.+)");
 
       for (auto s : tok)
       {
           boost::smatch w;
           if (boost::regex_search(s, w, regex))
           {
               string_type tag = boost::algorithm::to_lower_copy(w.str(1));
               string_type content = w.str(2);
               auto first = w[2].first;
               auto second = w[2].second;
               qextractor(first, second, content);
               boost::algorithm::trim(content);
               if (!content.empty())
                   entry.add_field(tag, content);
           }
       }
 
       return true;
   }
 
};
 
} /* namespace core */
 
} /* namespace bibmake */
 
#endif // BIBTEX_PARSER_H
 

Решение, которое предлагаете Вы, просто захлебнётся(

Во-вторых, кроме bibtexа нужно парсить ещё latex формат, откуда выдирать ключи на эти самые bibtex записи.. В этом тексте также могут быть комментарии, и целые их блоки.. Это неизбежно усложняет разбор этого формата.  Я об этом Вам уже тоже не раз писал..(

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

Неужели это так сложно понять?
« Последнее редактирование: Апрель 24, 2014, 10:06 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #44 : Апрель 24, 2014, 10:26 »

Вот, для примера, моя реализация парсера, которая легко с этим справляется:
Ваша реализация?
А скажите на милость, вот вы ушли гулять с собачкой, а в офисе остались только разносчик кофе и вахтерша баба Маша, как они должны будут исправить ваше решение, если вдруг позвонит заказчик? А?
Записан
Страниц: 1 2 [3] 4 5 ... 8   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.157 секунд. Запросов: 25.