Кресты / Говнокод #26762 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 OlegUP, (Updated )

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

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

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

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

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

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

    Бармина
    Ответить
    • Здесь форму программистов, а не паттернистов.
      Ответить
    • Лучше на «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.
          Ответить
        • кстати, да. Перл лучше
          Без шуток
          Ответить
        • Посмотрел «Raku».

          Господи, к 2к20 все скриптухи будто сошли с ума и дружно стали лепить в своих болотцах «тупизацию».
          Ответить
          • >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-х годов и больших вычислительных устройств, в отличие от персональных.

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

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8