Как стать автором
Обновить
5
0

Пользователь

Отправить сообщение
А что убого-то? Я считаю, что у меня скрипт описания структуры файла данных неплохой. Легко читается, допускает всевозможные проверки, контроль ошибок и тд. Главное — мне нравится то, что я делаю. Это не тяжкий труд, это радость творчества.
Пока несовместимы. Спасибо за наводку!
Вы будете смеяться, но я пишу с использованием разработанной технологии еще один вЕлик. Библиотеку чтения JSON. Примерно так выглядит это самое чтение в программе:
  OBJECT("")
  {
    VALUE("Comment", Header.Comment);
    VALUE("Count",   Header.Count);
    OBJECT("DiskParam")
    {
      VALUE("DB",      Header.DB);
      VALUE("DBAngle", Header.DBAngle);
    }
    VALUE("Range",   Header.Range);

    //Чтение массива с неизвестным числом элементов
    ARRAY_WHILE("Blades", BladeCount)
    {
      TBlade Blade;
      OBJECT("")
      {
        VALUE("Caption", Blade.Caption);
        VALUE("Value",   Blade.BaseChar);
      }
      if(!ERROR)
      {
        NewBlades=realloc(Blades, BladeCount+1);
        if(NewBlades)
        {
          Blades=NewBlades;
          Blades[BladeCount]=Blade;
        }
      }
    }

    //Чтение массива с известным или ограниченным числом элементов
    ARRAY_FOR("Slots", SlotsCount, MAX_ELEMENTS)
      VALUE("", Slots[SlotsCount]);

    //Обработка ситуаций, когда значение может быть неподходящего типа
    double Temp;
    VALUE("NCount", Temp)
      Header.NCount=(int)(Temp+0.5);
  }
Я просто уверен, такого синтаксиса вы еще нигде не видели :). Имеет смысл писать статью или снова заминусуете велосипедиста?
Ого! В такой размер исходника я не помещусь, даже если максимально выжать из него всю воду. Но за первенство по размеру исполняемого файла вполне поборюсь, предполагаю влезть в 4Кб.
Забавный язык, спасибо за комментарий.
Я знаю про эти сложности, но не старался затащить сюда полную реализацию. Наоборот, резал код как можно компактнее. Только необходимое для иллюстрации совершенно оригинального подхода к формированию XML-подобных документов.
Большое спасибо, что не поленились написать пример использования.
Эх, если бы я умел делать #define FOO(...) с переменным числом аргументов, то можно было бы еще красивее забацать. В JSONе можно использовать null в качестве значения, так и напрашивается сделать его через VALUE(«Key»), а вот фиг. Но я еще работаю над этой проблемой ;).
Еще очень напрягает, что нельзя нормально перегрузить функции TJsonTagCloser::Write***. Используются-то его наследники, не в каждом же перегружать. Тоже думаю, как сделать красиво.
Рубанул комментарии. А за что руки оторвать, можно подробнее? Ну за (char *)&i, оно понятно, а еще?
Спасибо за наводку. Времени нет, но было интересно, наверное это все оправдывает.
Я с этим согласен. Но я непрофессиональный программист, поэтому такие задачи для меня скорее тренировка и даже что-то вроде хобби. У меня редко получается хороший код, но тут, похоже, исключение. Если честно, то сам офигел от чистоты и естественности скрипта описания формата данных, насколько хорошо в него вписываются конструкции С++. Собственно поэтому и рискнул показать общественности.
Спасибо, посмотрю.
Это понятно, что лисапед. Надеюсь, что оригинальный. Такого наглого использования цикла for я нигде сам не встречал :).
В будущем понадобится. Собственная реализация есть, но наверное посмотрю готовое.
В 2do этот пункт есть, но пока не реализован.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность