powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вычисление длины utf-8 строки в compile time
76 сообщений из 76, показаны все 4 страниц
Вычисление длины utf-8 строки в compile time
    #39982007
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как думаете нормально? Работать будет? :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
inline constexpr
size_t c_strlen(char const *start, size_t const maxBuffSize)
{
    char const *end = start;
    while (*end != '\0')
    {
        ++end;

        if (end - start >= maxBuffSize)
        {
            throw std::runtime_error("The string is too long.");
        }
    }

    size_t charCount = 0;
    while (start < end)
    {
        byte const ch = static_cast<byte>(*start);
        size_t chSize = {};

        if      ((ch & 0x80) == 0x00)   chSize = 1;
        else if ((ch & 0xE0) == 0xC0)   chSize = 2;
        else if ((ch & 0xF0) == 0xE0)   chSize = 3;
        else if ((ch & 0xF8) == 0xF0)   chSize = 4;
        else throw std::runtime_error("Invalid UTF-8 char.");

        if (chSize > end - start)
        {
            throw std::runtime_error("UTF-8 string too short.");
        }

        for (size_t i = 1; i < chSize; ++i)
        {
            if ((start[i] & 0xC0) != 0x80)
            {
                throw std::runtime_error("Expected continuation UTF-8 byte.");
            }
        }

        ++charCount;
        start += chSize;
    }

    return charCount;
}
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982150
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, так ты скомпилируй и посмотри! :)
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982160
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, к чему вообще весь этот зоопарк, если тебе, всего лишь, надо узнать кол-во байт литерала?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <cstdlib>
#include <stdio.h>

using namespace std;

static constexpr char test[] = u8"Тестовое сообщение";

int main(int argc, char** argv)
{
  printf("\r\n%zu\r\n", sizeof(test));
  return 0;
}

Результат, как и ожидалось, "36".
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982176
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, к чему вообще весь этот зоопарк, если тебе, всего лишь, надо узнать кол-во байт литерала?

Не количество байт, а количество символов. И не обязательно у литерала. Compile time только по возможности.

Я, конечно, тестировал на русских буквах и иероглифах. Но я ведь программировал по мотивам кода со стек-оферфлоу. И там было приписано, что реализация наивная. Поэтому и спрашиваю, может можно улучшить.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982185
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда-то взял не глядя функцию UTF2Unicode с хабра https://habr.com/ru/post/282191/
Правда параметр заменил на
Код: plaintext
1.
const /*unsigned*/ char* txt


Для подсчета символов тоже подойдет. На иероглифах не пробовал.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982200
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
А какой смысл в символах считать? Это не универсально.
Может на знаки? Диакритические знаки? Кодовые точки, составные символы?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982204
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Вот как-то так...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
#include <cstdlib>
#include <stdio.h>

using namespace std;


static constexpr char test[] = u8"Тестовое сообщение";

class utf8literal
{
  template <typename T>
  static constexpr
  size_t bytes_per_u8char(T chr, bool start = true)
  {
    return (start && !(chr & 0x80))
        ? 1
        : (chr & 0x80)
            ? 1 + bytes_per_u8char(chr << 1, false)
            : 0;
  }

  template <typename T, size_t D>
  static constexpr
  size_t calc_length(T (&a)[D], size_t i = 0)
  {
    return (i < D)
        ? 1 + calc_length(a, i + bytes_per_u8char(a[i]))
        : 0;
  }

public:

  template <typename T, size_t D>
  static constexpr
  size_t length(T (&a)[D])
  {
    return calc_length<T, D>(a) - 1;
  }
};

int main(int argc, char** argv)
{
  printf("\r\n%zu\r\n", utf8literal::length(test));
  return 0;
}

Только не забудь впихнуть static_assert для (T != char).
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982205
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
А какой смысл в символах считать? Это не универсально.
Может на знаки? Диакритические знаки? Кодовые точки, составные символы?
Лично мне эта функция нужна для целей, описанных в статье - для рендеринга. И длину я считаю не в символах, в пикселях. Но алгоритм можно заюзать и для подсчета символов, например, для выравнивания вывода моноширинного шрифта в консоли.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982206
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav,
Вот как-то так...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
#include <cstdlib>
#include <stdio.h>

using namespace std;


static constexpr char test[] = u8"Тестовое сообщение";

class utf8literal
{
  template <typename T>
  static constexpr
  size_t bytes_per_u8char(T chr, bool start = true)
  {
    return (start && !(chr & 0x80))
        ? 1
        : (chr & 0x80)
            ? 1 + bytes_per_u8char(chr << 1, false)
            : 0;
  }

  template <typename T, size_t D>
  static constexpr
  size_t calc_length(T (&a)[D], size_t i = 0)
  {
    return (i < D)
        ? 1 + calc_length(a, i + bytes_per_u8char(a[i]))
        : 0;
  }

public:

  template <typename T, size_t D>
  static constexpr
  size_t length(T (&a)[D])
  {
    return calc_length<T, D>(a) - 1;
  }
};

int main(int argc, char** argv)
{
  printf("\r\n%zu\r\n", utf8literal::length(test));
  return 0;
}

Только не забудь впихнуть static_assert для (T != char).

Как-то у вас всё переусложнено, ИМХО. Я так понимаю тут подсчитываются лидирующие символы, а не лидирующие пропускаются.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982217
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Как-то у вас всё переусложнено, ИМХО.
Наоборот - всё до безобразия упрощено.

petrav
Я так понимаю тут подсчитываются лидирующие символы, а не лидирующие пропускаются.
Пропуск кол-ва байт символа определяется по старшим битам лидирующего байта символа, а в подсчёт попадают именно символы. Попробуй впихнуть в литерал между русскими символами те, что кодируются четырьмя байтами и почувствуй разницу. Ведь ты же хотел именно подсчёт символов, а не байт?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982219
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
В пикселях же в winApi есть?
Типа getTextPoint.....
И там учитывается шрифт, выравнивание и куча всего.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982225
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
В пикселях же в winApi есть?
Может быть и есть, но winApi нет на ведроиде и яблоке.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982226
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Как-то у вас всё переусложнено, ИМХО.
Наоборот - всё до безобразия упрощено.

petrav
Я так понимаю тут подсчитываются лидирующие символы, а не лидирующие пропускаются.
Пропуск кол-ва байт символа определяется по старшим битам лидирующего байта символа, а в подсчёт попадают именно символы. Попробуй впихнуть в литерал между русскими символами те, что кодируются четырьмя байтами и почувствуй разницу. Ведь ты же хотел именно подсчёт символов, а не байт?

Да символов. Попробовал, с моим кодом тоже всё работает.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982239
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, enjoy! :)
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982240
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, enjoy! :)

Правда у меня смесь русских букв и иероглифов (иероглифы в три байта).
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982241
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Правда у меня смесь русских букв и иероглифов (иероглифы в три байта).
Для теста самое то!
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982253
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
PetroNotC Sharp
В пикселях же в winApi есть?
Может быть и есть, но winApi нет на ведроиде и яблоке.

Блин, опять универсальность везде).
Тогда конечно.
А так там свои API есть
Типа:
getTextBounds
Added in API level 1
public void getTextBounds (String text,
int start,
int end,
Rect bounds)
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982270
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Я стараюсь все, что можно сделать на перенесимом C++, делать на нем. Посчитать размер выводимой через openglES строки текста - задача не сложная. Завязываться на специфичное Java-API ради этого не хочется.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982272
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталась сущая мелочь: найти в С++ переносимые шрифты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982279
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

У OpenGL разве не в Canvas. У которого есть Pаint. С длиной текста методом?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982281
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Осталась сущая мелочь: найти в С++ переносимые шрифты.
Статья как раз о том, как сделать такой "шрифт" на основе SDF.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982284
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
Dimitry Sibiryakov

Осталась сущая мелочь: найти в С++ переносимые шрифты.
Статья как раз о том, как сделать такой "шрифт" на основе SDF.
и отрисовать попиксельно сглаживая) :))
Круто.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982285
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глянул статью - опять игрушки.
Понятно.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982287
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
AmKad,

У OpenGL разве не в Canvas. У которого есть Pаint. С длиной текста методом?
Не знаю что такое canvas и paint. У openGL(ES) нет функций для вывода текста. Только многоугольники. В случае ES - треугольники. Вообще, если интересно покопаться в моем говнокоде и закидать меня помидорами, могу дать ссылку на репозиторий.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982288
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Глянул статью - опять игрушки.
Понятно.
Да. Увы, на что-то серьезное я не способен
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982294
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
PetroNotC Sharp
AmKad,

У OpenGL разве не в Canvas. У которого есть Pаint. С длиной текста методом?
Не знаю что такое canvas и paint. У openGL(ES) нет функций для вывода текста. Только многоугольники. В случае ES - треугольники. Вообще, если интересно покопаться в моем говнокоде и закидать меня помидорами, могу дать ссылку на репозиторий.

Вроде Canvas счас даже у электрочайников.
Типо:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
// Create an empty, mutable bitmap
            Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_4444);
                // get a canvas to paint over the bitmap
            Canvas canvas = new Canvas(bitmap);
            bitmap.eraseColor(0);

            // get a background image from resources
            // note the image format must match the bitmap format
            Drawable background = context.getResources().getDrawable(R.drawable.background);
            background.setBounds(0, 0, 256, 256);
            background.draw(canvas); // draw the background to our bitmap

            // Draw the text
            Paint textPaint = new Paint();
            textPaint.setTextSize(32);
            textPaint.setAntiAlias(true);
            textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
            // draw the text centered
            canvas.drawText(text, 16,112, textPaint);

            // Bind to the texture in OpenGL
            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);

            // Set filtering
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);

            // Load the bitmap into the bound texture.
            GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

            // Recycle the bitmap, since its data has been loaded into OpenGL.
            bitmap.recycle();
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982298
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Это java? Canvas - это абстракция поверх openGL. В самом openGL ее нет. Как заставить это работать под iOS?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982299
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
PetroNotC Sharp
Глянул статью - опять игрушки.
Понятно.
Да. Увы, на что-то серьезное я не способен
не, вы профи.
Я просто openGl десктопный использовал для 3D, и мало представляю его где нибудь в корпоративе.
Имхо
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982300
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
PetroNotC Sharp,

Это java? Canvas - это абстракция поверх openGL. В самом openGL ее нет. Как заставить это работать под iOS?

Не подскажу.
Я писал в андроид на родном ЯП - java.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982308
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
не, вы профи.
Имхо
Да нет, профи бы сделал такое (SDF рендеринг шрифтов, одноцветных иконок и вообще одноцветных элементов, масштабируемых на уровне видеокарты практически без потери качества) за неделю. У меня с изучением вопроса до текущей реализации несколько месяцев ушло.

PetroNotC Sharp

Я просто openGl десктопный использовал для 3D, и мало представляю его где нибудь в корпоративе.
Если мы рассматриваем opengGL как альтернативу нативному UI, то несколько лет назад я видел скриншоты симпатичного банковского мобильного приложения от европейских разработчиков без использования нативного графического интерфейса. Вся работы через openGL-ные абстракции. Себе правда не ставил его, как UI ведет себя при взаимодействии - не щупал.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982313
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
не, вы профи.
Я просто openGl десктопный использовал для 3D, и мало представляю его где нибудь в корпоративе.
Имхо
А зря мало представляешь!
Современные Иксы достигают максимальной производительности рендеринга 2D через OpenGL - метод ускорения "Glamor" . Надо только настроить в xorg.conf правильный порядок загрузки модулей.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982314
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
>>Если мы рассматриваем opengGL как альтернативу нативному UI
Трудно судить. Мы его не видели. Корпоративный интерфейс для работы, он аскетичный.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982315
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
PetroNotC Sharp
не, вы профи.
Я просто openGl десктопный использовал для 3D, и мало представляю его где нибудь в корпоративе.
Имхо
А зря мало представляешь!
Современные Иксы достигают максимальной производительности рендеринга 2D через OpenGL - метод ускорения "Glamor" . Надо только настроить в xorg.conf правильный порядок загрузки модулей.
шейдеры применяют чтобы вычисления сместить с процессора в видеокарту.
Это нужно только в 3D и играх.
Остальное не тормозит.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982331
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем ее вычислять в compileTime? У вас-же ООП? Создавайте свой

Код: plaintext
1.
2.
3.
4.
class PetravString {
  int length; // in chars
  ...
}



расчитывайте длину eventually. И сохраняйте в переменную класса.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982333
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

+1
Как вверху класс Paint
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982341
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Зачем ее вычислять в compileTime? У вас-же ООП? Создавайте свой

Код: plaintext
1.
2.
3.
4.
class PetravString {
  int length; // in chars
  ...
}



расчитывайте длину eventually. И сохраняйте в переменную класса.

Compile time как бонус. У меня кое-где static_assert написаны на длину строк. Главное посчитать длину utf-8 строки.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982351
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Зачем ее вычислять в compileTime? У вас-же ООП? Создавайте свой

Код: plaintext
1.
2.
3.
4.
class PetravString {
  int length; // in chars
  ...
}



расчитывайте длину eventually. И сохраняйте в переменную класса.

Compile time как бонус. У меня кое-где static_assert написаны на длину строк. Главное посчитать длину utf-8 строки.

А что это дает? Может лучше побыть lazy и вообще не расчитывать эту длину. Может за время твоего
теста строка и не понадобиться?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982509
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
шейдеры применяют чтобы вычисления сместить с процессора в видеокарту.
Это нужно только в 3D и играх.
Остальное не тормозит.
Ещё как тормозит!
Ты можешь сам в этом убедиться - взять какую-нибудь плату на Intel baytrail, поставить Линух, прогнать тест графики в HardInfo, затем сменить конфигурацию по умолчанию с использованием:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Section "Module"
  Load    "dri2"
  Load    "glamoregl"
EndSection

Section "Device"
  Identifier  "Card0"
  Driver      "Intel"
  BusID       "PCI:0@0:2:0"
  Option      "RenderAccel" "glamor"
  Option      "DRI" "TRUE"
EndSection
и прогнать тест ещё раз. Разница будет в разы и заметна на глаз, особенно при перетаскивании окон или при анимации курсора мыши. Я уж молчу про воспроизведение видео FullHD...
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982519
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
шейдеры применяют чтобы вычисления сместить с процессора в видеокарту.
Это нужно только в 3D и играх.
Остальное не тормозит.
Шейдеры применяют не только в 3D-играх. Для того, чтобы нарисовать прямоугольник на плоскости - тоже нужен шейдер, хоть и тривиальный. Технология SDF, если я не ошибаюсь, была придумана в Valve - тоже рисование на плоскости, то есть 2D. Всякие эффекты типа огоньков, пламени, вспышки и т.п. - все это делается на шейдерах, в том числе и 2D.
Вот сходу нашел ссылку https://assetstore.unity.com/packages/vfx/shaders/2d-shader-collection-133046
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982551
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Я прикладник а не системщик. Сужу по конечному продукту.
Какое ПО на твоем устройстве тормозит?
ПО - прогаммное обеспечение.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982554
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
Мне 2D игры не интересны. А ты про огоньки, вспышки...
Технологии умирают раз в 5 лет.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982558
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
rdb_dev,

Я прикладник а не системщик. Сужу по конечному продукту.
Какое ПО на твоем устройстве тормозит?
ПО - прогаммное обеспечение.
Если не настрою в X'ах отрисовку 2D через OpenGL, тормозит абсолютно всё, использующее 2D графику ПО. Так доходчиво? :)
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982561
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,
Нет. Не дошло.
Передо мной Ось астра на дебиан.
Скажи что сломать чтобы тормозило всё.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982562
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, не поверишь, но передо мной тоже AstraLinux v2.12.29 с ядром v4.15.3-2-hardened 64-битная.
Чтобы тормозило всё, ничего ломать не надо! Надо просто ничего не настраивать. Поставь эту же Астру на baytrail с Celeron 1.9ГГц и удивись тормознутости без настройки.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982568
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно мы от длины строки перешли к OpenGL.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982577
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, жаль только, что в отличие от Debian, на AstraLinux не удастся поставить последнюю версию HardInfo, в которую встроен неплохой тест 2D отрисовки, из репозитория Debian без дополнительных приседаний. Астра сильно отстаёт по версиям пакетов.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982579
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
PetroNotC Sharp, жаль только, что в отличие от Debian, на AstraLinux не удастся поставить последнюю версию HardInfo, в которую встроен неплохой тест 2D отрисовки, из репозитория Debian без дополнительных приседаний. Астра сильно отстаёт по версиям пакетов.

А зачем вы сидите на АстраЛинукс?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982580
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, портируем свои виндовые приложения на AstraLinux. Дома у меня на основном компе Win10Pro, а на сетевом хранилище тестовая ветка Debian (bullseye).
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982581
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, портируем свои виндовые приложения на AstraLinux. Дома у меня на основном компе Win10Pro, а на сетевом хранилище тестовая ветка Debian (bullseye).

Я имел в виду почему именно Астра?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982582
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, продиктовано спецификой рыночного сегмента. Заказчику так надо.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982584
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Интересно мы от длины строки перешли к OpenGL.
Простите, это все я
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982598
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
rdb_dev
PetroNotC Sharp, жаль только, что в отличие от Debian, на AstraLinux не удастся поставить последнюю версию HardInfo, в которую встроен неплохой тест 2D отрисовки, из репозитория Debian без дополнительных приседаний. Астра сильно отстаёт по версиям пакетов.

А зачем вы сидите на АстраЛинукс?
это Ось от России. Другой нету.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982601
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
Я стараюсь все, что можно сделать на перенесимом C++

для Анроида и iOS тоже?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982604
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
AmKad
Я стараюсь все, что можно сделать на перенесимом C++

для Анроида и iOS тоже?
хороший вопрос.
Думаю оверхед будет.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982626
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте обсуждение OpenGL счтитать оффтопом. Автор? Ты согласен?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982633
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте обсуждение OpenGL счтитать оффтопом. Автор? Ты согласен?

Да мне это не мешает. Если людям интересно, то пусть говорят о OpenGL. Мне тоже интересно слегка.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982637
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ок.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982638
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Корпоративный интерфейс для работы, он аскетичный.

и для шоу/презентаций не видеостенах и прочего Digital Signage
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982706
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
AmKad
Я стараюсь все, что можно сделать на перенесимом C++

для Анроида и iOS тоже?
Конечно, это мои целевые платформы. Винда - только для быстрой отладки игровой логики.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982716
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
Изопропил
пропущено...

для Анроида и iOS тоже?
Конечно, это мои целевые платформы. Винда - только для быстрой отладки игровой логики.

А ну кинь ссылки на твои игрушки в *Store.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982728
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А ну кинь ссылки на твои игрушки в *Store.
Японские кроссворды: Android , iOS .
Pirate Bomb: Android , iOS .
Составь слова (люди в отзывах пишут про опечатки, руки не доходят поправить): Android , iOS .
Филиппинские кроссворды: Android , iOS .

P.S. Над дизайном не смейтесь - он страшненький.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982730
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версии для винды скромно выложил на руктрекере: Pirate Bomb , Японские кроссворды и т.д.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982735
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Я так понимаю о заработке речь не идёт?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982738
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pirate Bomb мне нравится по скриншотам. Красиво.

Остальные как-то так.. ниочем. Да мне кажется японские кроссворды только ленивый не делал.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982740
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Я так понимаю о заработке речь не идёт?
С московской зарлатой айтишника не сравнить, конечно. Но на съем неплохой однушки на краю Москвы у метро хватило бы.
Это не моя основная работа, это хобби.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982861
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Как думаете нормально? Работать будет? :)

Код: plaintext
1.
2.
3.
4.
inline constexpr
size_t c_strlen(char const *start, size_t const maxBuffSize)
{
   ...

Если ты считашь code point -ы, то функция должна называться count_codepoints.
Длина utf-8 (и вообще Unicode) строки это понятие неоднозначное, если вообще имеющее смысл.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982909
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Длина utf-8 (и вообще Unicode) строки это понятие неоднозначное, если вообще имеющее смысл.
Имеющее.
1. Размер строки в байтах, требуется для определения размера буферов и "всего такого";
2. Количество кодов (code points). Может требоваться для "всякого низкоуровневого";
3. Собственно длина строки или количество знакомест на (абстрактном) устройстве вывода.

Учитывая, что в строку UTF-8 можно "замешать", например, "форматирующие" ESC-последовательности ANSI терминала - да, всё сложно.
Тем более, что "стандартные" управляющие символы US-ASCII существуют и без всяких ANSI-терминалов.
Придётся, как минимум, делить строку на "обычные" и "управляющие" (под)строки.
Но, тем не менее, длина "обычных" строк - (хорошо) определяемое понятие.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982913
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Ну дак кто против. Проверяйте строку что она "обычная" и считайте "обычные" символы.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982918
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
a guest
Длина utf-8 (и вообще Unicode) строки это понятие неоднозначное, если вообще имеющее смысл.
Имеющее.
1. Размер строки в байтах, требуется для определения размера буферов и "всего такого";
2. Количество кодов (code points). Может требоваться для "всякого низкоуровневого";
3. Собственно длина строки или количество знакомест на (абстрактном) устройстве вывода.

Учитывая, что в строку UTF-8 можно "замешать", например, "форматирующие" ESC-последовательности ANSI терминала - да, всё сложно.
Тем более, что "стандартные" управляющие символы US-ASCII существуют и без всяких ANSI-терминалов.
Придётся, как минимум, делить строку на "обычные" и "управляющие" (под)строки.
Но, тем не менее, длина "обычных" строк - (хорошо) определяемое понятие.

Ну отлично же. Чёрт с ними с управляющими кодами. Давайте заменим длину строки на количество знакомест. Назовём это шириной строки.

Вот я попытался подставить в свой код пару китайских иероглифов: привет по-китайски. В Студии это два символа, но при печати в редакторе они занимают по два знакоместа. Т.е. ширина: четыре позиции шрифта Consolas.

Вот можно по простому определить ширину символа в знакоместах? Потому что у меня при выводе получилось два обрезанных иероглифа.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982922
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Чем отличается знакоместо от символа?
Скрины давайте.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982923
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Чем отличается знакоместо от символа?
Скрины давайте.

Вот по ссылке ищи фразу "ni hao in chinese", там слева будет два иерогива. Подставь их в Студию с шрифтом Consolas. Символа два, а по ширине они как четыре.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982924
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U+000438 CYRILLIC SMALL LETTER I
U+000306 COMBINING BREVE

и
U+000439 CYRILLIC SMALL LETTER SHORT I


1/2 и ½


как знакоместа считать будем?
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982933
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, сначала нормализуем , потом посчитаем.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982954
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
PetroNotC Sharp
petrav,
Чем отличается знакоместо от символа?
Скрины давайте.
Вот по ссылке ищи фразу "ni hao in chinese", там слева будет два иерогива. Подставь их в Студию с шрифтом Consolas. Символа два, а по ширине они как четыре.
У меня под вендой в PSPad'е со шрифтом "Lucida Console" каждый иероглиф занимает лишь одно знакоместо, но редактор считает как два и в результате к каждому иероглифу справа добавляется пробел.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982959
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Представьте строку, где фразы на европейских языках с чтением слева направо перемежаются с фразами на фарси - справа налево. Чтобы вывести такую строку на терминал, фразы на фарси нужно выводить в обратном порядке символов, так как в самой строке они также будут представлены в порядке справа налево (младший байт - крайний правый символ, старший байт - крайний левый для LE) и с выравниванием текста по правому краю.
...
Рейтинг: 0 / 0
Вычисление длины utf-8 строки в compile time
    #39982977
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
как знакоместа считать будем?
Ровно так, как определено в стандарте. Там, возможно, и есть какие-то граничные случаи, но составной символ - одно знакоместо.
...
Рейтинг: 0 / 0
76 сообщений из 76, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вычисление длины utf-8 строки в compile time
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]