[00:39:14] <valexey> выложил
[00:40:04] <valexey> некропост :-)
[00:40:27] <vlad2> Я туда заглянул.
[00:40:59] <vlad2> ретурны жирные :) Очень важны для этой задачи :)
[00:42:31] <valexey> :-)
[00:42:37] <valexey> аккуратность во всем!
[00:43:00] <valexey> то есть капса уже не хватает. нужно зажирнить
[00:43:20] <valexey> но я вполне представляю что при некотором стиле восприятия кода это действительно может быть важно.
[01:08:35] <ilovb> Вирт в капсе одну весч не учел
[01:08:49] <ilovb> большая часть кода капсом получается
[01:08:58] <ilovb> визульно в смысле
[02:00:35] <vlad2> /me вкурил еще разок boost/preprocessor, полный улет.
[02:02:23] <vlad2> #define CSS_CURSORS\
   ((k_auto, auto))((k_default, default))((k_pointer, pointer))((k_all_scroll, all-scroll))((k_move, move))
[02:03:17] <vlad2> // dllexport extern cursor_id const k_auto; ...
#define CSS_DECLARE_CURSOR( r, data, cursor ) \
   dllexport extern cursor_id const BOOST_PP_TUPLE_ELEM( 2, 0, cursor );
BOOST_PP_SEQ_FOR_EACH( CSS_DECLARE_CURSOR, data, CSS_CURSORS )
#undef CSS_DECLARE_CURSOR
[02:04:06] <vlad2> // cursor_id const k_auto = "auto";
#define CSS_IMPL_CURSOR( r, data, cursor ) \
   cursor_id const BOOST_PP_TUPLE_ELEM( 2, 0, cursor ) = BOOST_PP_STRINGIZE( BOOST_PP_TUPLE_ELEM( 2, 1, cursor ) );
BOOST_PP_SEQ_FOR_EACH( CSS_IMPL_CURSOR, data, CSS_CURSORS )
#undef CSS_IMPL_CURSOR
[02:04:46] <vlad2> cursor_id ids[] = {
   // k_auto, ...
   #define CSS_DECLARE_ARRAY_CURSOR( r, data, cursor ) \
       ( BOOST_PP_TUPLE_ELEM( 2, 0, cursor ) )
   BOOST_PP_SEQ_ENUM( BOOST_PP_SEQ_FOR_EACH( CSS_DECLARE_ARRAY_CURSOR, data, CSS_CURSORS ) )
   #undef CSS_DECLARE_ARRAY_CURSOR
   };
[02:04:58] <vlad2> Компилится!!!
[02:06:08] <vlad2> А вы капса боитесь ;)
[02:08:22] <vlad2> На самом деле оно в принципе нечитабельно.
[02:09:03] <vlad2> Т.е. надо просто поверить камменту, что вся эта херня генерит вот такой список дклараци/имплементаций.
[21:27:05] <valexey > .
[21:45:25] <TRUE> ..