Рубрика «enum» - 3

В статье «String enum — строковые enum» я писал о том как связывать текстовые представления с enum class — метод хороший но только если все элементы заранее известны, но зачастую бывает что строки являются некими идентификаторами и конечно же заранее не известны, а зачастую будут добавляться позднее и причем без пересборки программы.

Требования к библиотеке все теже:

  • Кроссплатформенность;
  • Минимум зависимостей;
  • Скорость чтения;
  • Простой синтаксис;

Пример конфига

{
    "objects":
    [
        {
            "id": "object1",
            "events":
            {
                "event1":{
                    "give": {"object2": 4}
                },
            }
        },
        {
            "id": "object2",
            "events":
            {
                "event2":{
                    "give": {"object1": 3}
                },
            },
            {
            "id": "object3",
            "events":
            {
                "event3":{
                    "give": {"object3": 4}
                },
            }
        },

Первая и самая простая идея которая напрашивается это:

    std::map<std::string,script> events;

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

Вторая идея парсить этот конфиг в 2 прохода тогда на 2-м проходе object1, object2, object3 будут уже известны и можно будет записать на них прямо указатели или ссылки. Но если зависимости еще более сложные то такой подход может и не сработать.

Я предлагаю способ позволяющий существенно сократить runtime издержки подобных конструкций

Читать полностью »

Иногда в коде приходится использовать строго типизированные параметры, однако сам язык PHP не является строго типизированным (как, например, C#, в котором присутствует такой тип данных, как перечисления – Enum). Однако выход из данной ситуации все равно можно найти. Порывшись по просторам интернета я так и не нашел подходящего мне решения. Предлагаю вам мое решение данной проблемы.

Проблема заключалась в следующем. Необходимо реализовать функцию, которая бы на вход принимала строго типизированный объект (класс), однако в теле функций необходим перебор значений данного класса и сравнение его с предопределенными константами (этого же класса):
Читать полностью »

В прошлом году сообщество Python наконец-то договорилось о реализации перечислений. Было разработано соответствующее предложение PEP 435, его реализация уже есть в python 3.4.

Наблюдая за горячими спорами, я решил в качестве эксперимента сделать свой велосипед, добавив в него несколько фич, появление которых в официальной реализации было маловероятно.

На текущий момент эксперименты закончены, библиотека хорошо показала себя в моих проектах, поэтому я решил поделиться ей с сообществом.
Читать полностью »

в 20:41, , рубрики: enum, mssql, mssqlserver, метки: , ,

«Real» enums for MS SQL Server
Как известно, MSSQL не предоставляет возможность создания/использования перечислений, что зачастую влечет за собой неявный, ненадежный, некрасивый, сложно поддерживаемый код. Можно спорить о том, что в реляционной БД перечисления как таковые места иметь не могут, но множество раз в моей (и не только моей) практике рождались подобные строчки:

select * from Process where ProcessType = 1 /* Suspended */

Читать полностью »

Как известно, существует рекомендация E.164 ITU-T, определяющая план нумерации для телефонных сетей и формат телефонных номеров. Номера по E.164 могут иметь максимум 15 цифр и обычно записываются с префиксом «+». Кроме того, они могут быть использованы в DNS с помощью электронной нумерации (ENUM, Electronic Numeration) для определения порядка вызова абонента с таким номером. Это дает нам некоторый простор при использовании традиционных сетей телефонии и сетей пакетной передачи данных. В частности, это позволит нам сэкономить пару рублей на звонках уже сегодня.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js