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

    0

    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
    template <typename T, size_t size>
    pure_nfsv4_op_array_tools::get_max_priority_opindex(
        const std::array<T, size>& array, const std::unordered_map<uint32_t, uint32_t>& priority_map size_t pos = 0)
    {
        std::unordered_map<uint32_t, uint32_t>::const_iterator it, it_end = priority_map.end();
        uint32_t max_priority = 0;
        size_t i_max_priority = size;
        for(; pos < size; ++pos)
        {
            it = priority_map.find(array[pos].opcode)
            priority = (it != it_end) ? it->second : 4;   // Анскилл
            // лучше так:
            // priority = get_priority(opcode);
            if (priority > max_priority)
            {
                i_max_priority = pos;
                max_priority = it->second;
            }
        }
    
        return i_max_priority;
    }

    Какой дизайн-паттерн применить, если priority_map содержится в классе, методы которого используют эту функцию как вспомогательную?
    То есть текущий файл подключается в файл-декларацию класса?
    Можно, конечно, подключить его в .cc, но проблема останется.

    Запостил: OlegUP, 19 Июня 2020

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

    • Нельзя эту фнукцию сделать членом того класса?

      Есчес низуя не понял что ты тут понаписал.
      Ответить
      • Можешь забить, что-нибудь подберу. Ну а так:

        Есть файл, в котором класс A парсит входную последовательность байт в
        последовательость операций. У любой операции есть приоритет, у большинства операций он одинаков и равен максимальному, поэтому map содержащую пары (опкод, приоритет) не обязательно заполнять по полной.
        Есть файл в котором описаны вспомогательные функции для работы с последовательностью операций (это тоже отдельный статический класс), и одна из них приведена выше, этот файл подключается в файл класса А.

        Нужно такое решение, в котором не придется хардкодить в функцию этот самый максимальный приоритет. Но при этом не передавать инстанс класса A в эти самые функции.
        Ответить
        • get_max_priority_opindex(..., uint32_t default_priority)
          ?
          Вынести константу DEFAULT_PRIORITY куда-нибудь в отдельный заголовочный файл, который подключить к обоим файлам?

          UPD: или вообще вынести куда-нибудь ту лучшую get_priority().
          Ответить
    • > Какой дизайн-паттерн применить

      Бармина
      Ответить
    • Здесь форум программистов, а не дизайнеров.
      Ответить
      • Здесь форму программистов, а не паттернистов.
        Ответить
    • Лучше делетнуть цу дрисню и переписать на js
      Ответить
      • Лучше на «PHP». 8.
        https://wiki.php.net/rfc
        В него кучу годноты завезли.
        Constructor Property Promotion
        Adds a short-hand syntax to combine declaration of properties and the constructor. (Created 2020-03-26)
        
        Attributes (v2)
        Add structured metadata to declarations (classes, functions, properties, constants) for internal and userland use-cases. (Created 2020-03-09)
        
        Unbundle ext/xmlrpc (Created 2020-04-25; Accepted 2020-05-26)
        
        Always available JSON extension (Created 2020-04-29)
        
        Non-capturing catches
        Allow catching exceptions without a variable (Created 2020-04-05)
        
        Mixed type v2
        Add the mixed type (Created 2020-03-22)
        
        Locale-independent float to string cast (Created 2020-03-11)
        
        Change default PDO error mode (Created 2020-03-28)
        
        Stricter type checks for arithmetic/bitwise operators (Created 2020-04-02)
        
        Allow trailing comma in parameter list (Created 2020-03-26)
        
        throw expression
        Convert throw statement into an expression (Created 2020-03-21)
        
        Abstract trait method validation
        Enforce signature of abstract trait methods. (Created: 2020-02-07)
        
        Stringable
        Allow using string|Stringable to express string|object-with-__toString(). (Created 2020-01-15)
        
        Allow ::class on objects
        Adds support for $object::class. (Created: 2020-01-09)
        
        Static return type
        Adds support for static as a return type. (Created: 2020-01-08)
        
        Variable Syntax Tweaks
        Fixes variable syntax edge cases. (Created: 2020-01-07)
        
        Union Types v2
        A proposal to add union types (Created 2019-09-04)
        
        DOM Living Standard API
        Upgrade DOM API to latest standard version (Created: 2019-03-13)
        
        Always generate fatal error for incompatible method signatures
        
        Resolve inconsistent handling of abstract and non-abstract methods during inheritance. (Created: 2019-04-08)
        
        Arrays starting with a negative index
        
        Proposes to make implicit array keys consistent. (Created: 2017-04-20)
        
        JIT
        Just in Time Compiler. (Created: 2019-01-28)
        Ответить
        • скриптобляди такие смешные)) сначала делают говно без стат типизации, затем завозят ее кусочками в случайные места не до конца. Получается худшее из обоих миров.

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


          >Arrays starting with a negative index
          надеюсь, все и по умолчанию
          Ответить
          • А мне нравится что пхпушки хотя за собой говно вилкой чистят.
            Такими темпами, они могут оказаться действительно вперди планеты всей.
            https://wiki.php.net/rfc/locale_independent_float_to_string

            setlocale(LC_ALL, "de_DE");
            $f = 3.14;
             
            (string) $f;		// 3,14 would become 3.14
            strval($f);		// 3,14 would become 3.14
            print_r($f);		// 3,14 would become 3.14
            var_dump($f);		// float(3,14) would become float(3.14)
            debug_zval_dump($f);	// float(3,14) would become float(3.14)
            settype($f, "string");	// 3,14 would become 3.14
            implode([$f]);		// 3,14 would become 3.14
            xmlrpc_encode($f);	// 3,14 would become 3.14


            It should be noted that some functions and extensions already use a locale-independent string representation for floats. One such extension is PDO, which has dedicated code to ensure a consistent string representation for floats. [1] A couple of other functions where the locale does not affect the string representation:

            echo var_export($f, true);	// 3.14
            echo serialize($f);		// d:3.14
            echo json_encode($f);		// 3.14


            Moreover, the *printf family of functions won't be modified as they already have the %F modifier to specify a non-locale aware conversion:

            printf("%.2f\n", $f);		// 3,14
            printf("%.2F\n", $f);		// 3.14


            Generally speaking, all functions that implicitly cast floats to strings, will change their behaviour so that the conversion will be done locale-independently.
            Ответить
          • Мне вот эта срань «понравилась»
            >Constructor Property Promotion
            >Adds a short-hand syntax to combine declaration of properties and the constructor. (Created 2020-03-26)


            https://wiki.php.net/rfc/constructor_promotion
            Совершенно упоротый синтаксис.
            class Point {
                public function __construct(
                    public float $x = 0.0,
                    public float $y = 0.0,
                    public float $z = 0.0,
                ) {}
            }
            Ответить
            • из всех способов решения проблемы выбирай всегда самый блевотный и вербозный (C) the Zen of PHP
              Ответить
              • Они честно признаются что заимствовали это говно с петуХака.
                Ответить
          • >Arrays starting with a negative index

            Массивы с ненулевой базой не нужны, ибо это питухкод.

            Нет питушок, если уж у тебя есть что-то, что начинается не с нуля, от от него отнимается база в этапе вычисления i. Это быстрее, ибо это ничего не стоит.

            Паскалевскйи вариант щит, лишнее говно, лишняя морока, лишний регистр, лишняя зависимость. Это не любят ни я, который читает код, ни конпелятор, ни х86.
            Ответить
            • Не пизди, питушок.
              У математиков принято с 1. Поэтому, как минимум, в "R", "MatLab", "Wolfram Mathematica" c 1.
              Ответить
              • poetomu ja za Lau
                Ответить
                • зис из вай ай лайк псакаль
                  Ответить
                • Ev sistr 'ta Laou, rak sistr zo mat,
                  Ur blank, ur blank ar chopinad.

                  https://youtu.be/2jeY4UvvzE4
                  Ответить
                  • хау мач из зе фиш на каком-то кельтском?
                    Ответить
                    • Так точно!

                      «Пей сидр, Лау»

                      Вот даже в исполнении носителя языка:
                      https://youtu.be/zmHYEMz49eA
                      Ответить
                    • А вообще эта мелодия в XX веке стала популярной после нидерландской перепевки:
                      https://youtu.be/le6uFnLwqYU

                      Увы, переделка уже не про Лау, а более абстрактная.
                      Ответить
              • А я за паскаль, там нумереции не навязывают насильно.
                Ответить
                • А я за malbolge, там есть команда crazy и вообще весело
                  b'`;$9!=IlXFiVwwvtPO0)pon%IHGFDV|[email protected]=+^:('&Y$#m!1S|.QOO=v('98$65aCB}0i.Tw+QPU'7qK#I20jiDVgG
                  Ответить
                  • >Код первой программы, выводящей «Hello World», сгенерировала другая программа на языке Lisp
                    Именно поэтому я за l̶i̶s̶p̶ js
                    Ответить
        • >> Лучше на «PHP». 8.

          А почему не на «Perl 6»?
          Ответить
          • кстати, да. Перл лучше
            Без шуток
            Ответить
          • Посмотрел «Raku».

            Господи, к 2к20 все скриптухи будто сошли с ума и дружно стали лепить в своих болотцах «тупизацию».
            Ответить
            • Есть реальный пример кода на «Raku»?
              Ответить
            • >Raku - это универсальный язык высокого уровня с постепенной типизацией.

              как же я ору со скриптобыдла
              Ответить
              • Кстати, это реальный пример софта, у которого готовые бинарники только 64-битные.
                Ответить
              • Аххаха, это как «постепенный питух». Вроде питух, а вроде и не совсем.
                Про этот термин даже статью накатали.
                https://en.wikipedia.org/wiki/Gradual_typing

                Все скриптухи в сборе!

                Examples of gradually typed languages derived from existing dynamically typed languages include Closure Compiler, TypeScript (both for JavaScript),[6] Hack (for PHP), PHP (since 7.0[7]), Typed Racket (for Racket), Typed Clojure (for Clojure),[8] Cython (a Python compiler), mypy (a static type checker for Python)[9], pyre (alternative static type checker for Python)[10], or cperl (a typed Perl 5). ActionScript is a gradually typed language[11] that is now an implementation of ECMAScript, though it originally arose separately as a sibling, both influenced by Apple's HyperTalk.
                Просто ПЫХОПЛЕЯДА
                Ответить
                • Чесслово, хватит уже срать копипастами.
                  Ответить
                  • Понятие «электронно-вычислительная машина» следует отличать от более широкого понятия «вычислительная машина» (компьютер);[источник не указан 895 дней] ЭВМ является одним из способов воплощения вычислителя. ЭВМ подразумевает использование электронных компонентов в качестве её функциональных узлов, однако вычислитель может быть устроен и на других принципах — вычисления могут быть произведены механическим, биологическим, оптическим, квантовым и другими способами, работая за счёт перемещения механических частей, движения электронов, фотонов или за счёт других физических явлений. Кроме того, по типу функционирования вычислительная машина может быть аналоговой, цифровой и комбинированной (аналого-цифровой).[источник не указан 895 дней]

                    В настоящее время термин «ЭВМ», как относящийся больше к вопросам конкретного физического воплощения вычислителя, почти вытеснен из бытового употребления и в основном используется инженерами цифровой электроники, как правовой термин в юридических документах, а также в историческом смысле — для обозначения вычислительной техники 1940—1980-х годов и больших вычислительных устройств, в отличие от персональных.

                    Во времена широкого распространения аналоговых вычислительных машин, что тоже были, в своём подавляющем большинстве, электронными, во избежание недоразумений использовалось название «цифровая электронная вычислительная машина» (ЦЭВМ) или «счётная электронная вычислительная машина» (СЭВМ; для подчеркивания того, что это устройство осуществляет непосредственно вычисления результата, в то время как аналоговая машина по сути осуществляет процесс физического моделирования с получением результата измерением).
                    Ответить
              • мы будем постепенно снимать ограничения, где-то я это уже слышал
                Ответить
        • Гражданин, проснитись, вы обджитились
          Ответить

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