1. C++ / Говнокод #6191

    +168

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    #define TPLM Tuple(TPLMOVE) + 
    #define TPLC Tuple(TPLCOPY) + 
    #define TPL Tuple() + 
    //#define GTPL Tuple() +
    #define TPLERROR(t) { memcpy(0, 0, 1); }
    
    #define TPLMOVE    1 // copy to tuple, memset 0 original. = destruct dest, copy to dest.
    #define TPLCOPY    2 // copy constructor = destruct dest, copy to dest
    #define TPLGET    3 // destruct all values :)
    
    #include <memory.h>
    #include <math.h>
    #include <stdio.h>
    #include <typeinfo>
    #include <string.h>
    
    #define max(a, b) (((a) > (b)) ? (a) : (b))
    #define min(a, b) (((a) < (b)) ? (a) : (b))
    
    unsigned int mcrc(char* name, unsigned int sz){
        unsigned int ret=0; if(!sz) sz=(unsigned int)strlen(name);
        char*t=name+sz; int p=0;
        while(name<t){
            *(((char*)&ret)+p)+=*name; p++;
            if(p>=4) p=0; name++;
        }
    return ret;
    }
    
    struct Tupled{ unsigned int sz, type; void *v; char data[0]; };
    
    class Tuple{
        int count, set, dusz, dasz;
        unsigned char *data;
        int type; int adel; 
    
    public:
        Tuple(){ count=0; set=0; type=0; dusz=0; dasz=0; data=0; adel=0; }
        Tuple(int t){ type=t; }
    
        ~Tuple(){ if(count!=set) TPLERROR("~Tuple"); delete data; }
    
        Tuple(Tuple &t){
            count=t.count; set=t.set; dusz=t.dusz; dasz=t.dasz; data=t.data;
            t.count=0; t.set=0; t.data=0; adel=1;
        }
    
        template <class T>
        Tuple& operator+(T &t){ if(!adel) Add(&t, sizeof(t), t); else Del(&t, sizeof(t), t); return *this; }
        template <class T>
        Tuple& operator-(T &t){ if(!adel) Add(&t, sizeof(t), t); else Del(&t, sizeof(t), t); return *this; }
    
    /* Операторы '*', '/', ',', '>', '<' код идентичен */
    
        template <class T>
        void Add(void *v, int s, T &t){
            if(dasz-dusz<s+4+(int)sizeof(void*)){
                unsigned char *ldata=data;
                data=new unsigned char[dasz+max(128, s+4)];
                memcpy(data, ldata, dasz);
                dasz+=max(128, s);                    
                delete [] ldata;
            }
            Tupled &d=*(Tupled*)(data+dusz);
            d.sz=s;
            memcpy(&d.v, v, sizeof(void*));
            if(type==TPLCOPY){ *(T*)d.data=t; } else memcpy(d.data, v, s);
            if(type==TPLMOVE) t.~T();
    
            d.type=mcrc((char*)typeid(t).name(), 0);
            dusz+=sizeof(Tupled)+s; count++;
        }
    
        template <class T>
        void Del(void *v, int s, T &t){
            if(set>=count){ TPLERROR("Tuple::Set"); return ; }
            unsigned char *p=GetData(set);
            if(!p){ TPLERROR("Tuple::NoData"); return ; }
    
            Tupled &d=*(Tupled*)p;
            unsigned int tp=mcrc((char*)typeid(t).name(), 0);
            if(tp!=d.type){ TPLERROR("Tuple::TYPE"); return ;}
    
            t.~T();
            if(d.sz!=s){ TPLERROR("Tuple::SIZE"); return ;}
            memcpy(v, d.data, d.sz);
            
            set++;
        }
    
        unsigned char* GetData(int c){
            if(c>=count) return 0;
            unsigned char *p=data;
            for(int i=0; i<c; i++){
                p+=sizeof(Tupled)+*(int*)p;
            }
            return p;
        }
    };

    Очередной самобытный велосипед от микеля.

    http://rsdn.ru/forum/src/4218954.aspx

    Запостил: cutwater, 02 Апреля 2011

    Комментарии (39) RSS

    • Забыл добавить, это реализация кортежей.
      Ответить
      • "Простенько и со вкусом." говорит автор про этот код. один mcrc чего стоит.... одно присутствие mcrc в такой програме о чем говорит.....

        накой им в С++ кортежи то сдались? это фишка из динамических слабо-типизированых языков. с одной стороны. с другой стороны, буст если не ошибаюсь где-то там уже имеет реализацию.
        Ответить
        • boost::tuple да
          Ответить
        • и не только буст... я вообще считаю, что лучше сначала погуглить адекватное решение и адаптировать его под себя, а не изобретать велосипеды) а приведенный код скорее тошнотина, нежели гавно)
          Ответить
          • Этот код так сказать в "стиле" автора. Уже не первый год автор радует своими велосипедами преследуя одному ему известные цели. Автор утверждает, что пишет на С++ уже более 5и лет. Более ранние его творчества можно так же найти на rsdn.
            Ответить
            • И сколько он ещё рассчитывает писать?
              Ответить
            • показать все, что скрыто> преследуя одному ему известные цели

              Писать на С++ то, для чего он не предназначен, рожая шаблоновое нечитаемое говно, по которому текут слюнями юные крестобляди, радостно вопя "вау, ничего себе что ещё на С++ можно!!!111".
              Ответить
              • Можно я тоже потроллю?
                Что вызывает столь бурную реакцию у паскалеёбов?
                Ответить
                • они возбуждаются от подглядывания за сношением плюсоёбов с плюсами (причем и те и те вживаются в роль нижних)
                  Ответить
              • лечение: заставлять пожизненно поддерживать свою говнописанину.

                и если вы не боитесь изменять постоянно написанное однажды, значит, у вас хороший код и вы хороший программист. А если ваш код могут безболезненно поддерживать и другие, у вас отличный код.
                Ответить
          • > скорее тошнотина, нежели гавно
            обратная перистальтика же
            Ответить
            • ого... за знание такого слова грех не плюсануть)
              Ответить
    • Знатный филиал говнокода.
      Ответить
    • Вы не должны изменять имя и другую информацию о разработчике и не присваивать авторство себе.
      Не продавать и не брать денег за код из данной библиотеки.
      Разрешается модифицировать и дорабатывать.
      Код предоставлен как есть и автор не отвечает, даже если вы попытаетесь прострелить себе ногу.
      Ответить
    • Ад пизды.
      Ответить
    • показать все, что скрыто
      (deftype tuple () 'list)
      
      (defun tuple (&rest values) (apply #'list values))
      Ответить
      • lisp - хуйня!
        Ответить
        • Лисп клёвый, вот сравни сколько говна надо было накатать на плюсах, и сколько на лиспе
          Ответить
          • Мальчик, тебе сколько лет?
            Ответить
          • получается, что говно на лиспе более концентрированное :)
            Ответить
          • Ахтунг, в каментах лиспота!
            Ответить
            • Не трогайте его только, а то сишники есть, паскалисты есть, джаваисты тоже. Лисповец вроде как ещё один был, но помре.
              В зоопарке редкие виды нужны.
              Ответить
          • ааа! долбаные скобочки! ненавижу их!
            ЗЫ у нас в организации тоже есть лисподрочеры, но их все стебут почем зря...
            Ответить
            • у нас в организации плюсоебов стебут
              какие выводы?
              говно ваша организация.
              Ответить
              • странный вывод... видимо лисп уже сделал из тебя юродивую мартышку...
                Ответить
                • Хуи сосешь?
                  Ответить
                  • нет... к чему такие вопросы? ты гей? к лиспу уже притрахался, больше не получаешь такого удовольствия, как в начале своей лиспокарьеры?

                    >у нас в организации
                    кстати интересно, какой софт сейчас модно писать на лиспе? эмбедите вм или интерпретируете только?
                    Ответить
              • > у нас в организации
                ордена ленина имени ленина ленинградский зоопарк?
                Ответить
                • ахтунг, в комментах питросяны
                  Ответить

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

                OMG!
                Ответить

    Добавить комментарий