TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
compact.h
Go to the documentation of this file.
1
// compat.h
2
#pragma once
3
#include <cstdio>
4
#include <cstring>
5
#include <iostream>
6
#include <locale>
7
8
#ifdef _WIN32
9
#include <windows.h>
10
#endif
11
12
namespace
compat
{
13
14
inline
void
init_io
() {
15
#ifdef _WIN32
16
// Windows: locale ".UTF-8" é válido
17
std::locale::global(std::locale(
".UTF-8"
));
18
SetConsoleOutputCP(CP_UTF8);
19
SetConsoleCP(CP_UTF8);
20
#else
21
// Linux: usar locale vazio "" → herda do ambiente (normalmente já UTF-8)
22
std::locale::global(std::locale(
""
));
23
#endif
24
}
25
26
inline
int
ContaUTF8
(
const
char
* str) {
27
// contagem de caracteres (mas ícons podem ocupar mais espaço)
28
unsigned
int
count = 0;
29
if
(!str)
30
return
0;
31
while
(*str) {
32
if
((*str & 0xC0) != 0x80)
33
count++;
34
str++;
35
}
36
return
count;
37
38
// possibilidade de contar com tamanho dos ícons, a explorar no futuro:
39
int
colunas = 0;
40
mbstate_t state{};
41
wchar_t
wc;
42
size_t
len;
43
44
while
((len = mbrtowc(&wc, str, MB_CUR_MAX, &state)) > 0) {
45
#ifdef _WIN32
46
// Simplificação: ASCII=1, outros=2
47
colunas += (wc < 128 ? 1 : 2);
48
#else
49
int
w = wcwidth(wc);
50
colunas += (w > 0 ? w : 0);
51
#endif
52
str += len;
53
}
54
return
colunas;
55
}
56
57
58
#define ICON_LISTA \
59
X(INST, "📄 ")
/* instância / dados */
\
60
X(EXP, "🔍 ")
/* explorar */
\
61
X(PARAM, "⚙ ")
/* parâmetros */
\
62
X(SOL, "✔ ")
/* solução */
\
63
X(IND, "⚖ ")
/* indicadores */
\
64
X(EXEC, "► ")
/* execução (início) */
\
65
X(FIM, "🏁 ")
/* execução (fim) */
\
66
X(CONF, "🛠️ ")
/* configuração */
\
67
X(TESTE, "🧪 ")
/* teste */
\
68
X(TEMPO, "⏱ ")
/* tempo utilizado */
\
69
X(RESULT, "📑 ")
/* resultado / ficheiro */
\
70
X(PROCESSO, "🖥️ ")
/* processo / computador */
\
71
X(TAREFA, "📋 ")
/* tarefa */
\
72
X(TAXA, "📊 ")
/* taxa / resultado */
\
73
X(SUCESSO, "🎯 ")
/* objetivo alcançado, sucesso */
\
74
X(INSUC, "🚫 ")
/* insucesso, objetivo não alcançado */
\
75
X(MEMORIA, "💾 ")
/* estado em memória ou erro de memória (alternativa: 💾) */
\
76
X(IMP, "⛔ ")
/* impossível, sem solução */
\
77
X(VALOR, "💰 ")
/* valor/custo da solução */
\
78
X(SEL, "✓ ")
/* valor ativo / selecionado */
\
79
X(NSEL, "✗ ")
/* valor inativo / não selecionado */
\
80
X(FOLHA, "🍃 ")
/* folha - nó folha numa árvore*/
\
81
X(LIMITE, "🪜 ")
/* limite, profundidade de procura */
\
82
X(UB, "📈 ")
/* upper bound / melhorar (dois contextos) */
\
83
X(LB, "📉 ")
/* lower bound / a descer (dois contextos) */
\
84
X(ID, "🔖 ")
/* identificador do estado, ID */
\
85
X(ACCAO, "⚡ ")
/* ação, movimento, jogada, lance */
\
86
X(ARVORE, "🌳 ")
/* árvore de procura, iteração (algoritmo iterativo) */
\
87
X(CORTE, "🪓 ")
/* corte / poda da árvore de procura */
\
88
X(VIT_PRETA, "☖ ")
/* vitória preta */
\
89
X(VIT_BRANCA, "☗ ")
/* vitória branca */
\
90
X(EMPATE, "🟰 ")
/* empate */
\
91
X(EPOCA, "📆 ")
/* época */
\
92
X(DIST, "📏 ")
/* distância entre dois elementos */
\
93
X(ELEMENTO, "🧍 ")
/* elemento, pessoa, indivíduo */
\
94
X(POP, "🧍🧑🤝🧑🚶")
/* população */
\
95
X(DIVERSIDADE, "🌈 ")
/* diversidade */
\
96
X(SEL_PAIS, "🧩 ")
/* fase algoritmo evolutivo, selecionar pais */
\
97
X(PAIS, "🧑🤝🧑 ")
/* pais, do operador de cruzamento */
\
98
X(CRUZAR, "🧬 ")
/* cruzamento, reprodução */
\
99
X(MUTAR, "🦠 ")
/* mutação */
\
100
X(SOBREVIVENCIA, "⚔️ ")
/* fase da sobrevivência algoritmo evolutivo */
\
101
X(IDADE, "⏳ ")
/* idade de um elemento/indivíduo */
\
102
X(IMIGRANTES, "🚶 ")
/* elementos / indivíduos imigrantes, estrangeiros */
\
103
X(APAGADO, "🧹 ")
/* removido / apagado / eliminado / limpo */
\
104
X(ELITE, "👑 ")
/* elite */
\
105
X(TORNEIO, "🏆 ")
/* torneio */
\
106
X(VIZINHO, "🧍🧍")
/* vizinho, operador de vizinhança */
\
107
X(MENU, "☰ ")
/* menu */
108
109
enum class
EIcon
{
110
#define X(nome, string) nome,
111
ICON_LISTA
112
#undef X
113
};
114
115
inline
const
char
*
Icon
(
EIcon
icon) {
116
switch
(icon) {
117
#define X(nome, string) case EIcon::nome: return string;
118
ICON_LISTA
119
#undef X
120
}
121
return
""
;
122
}
123
124
}
// namespace compat
125
126
// este tipo e função ficam disponíveis sem necessidade de colocar compact::
127
using
compat::EIcon
;
128
using
compat::Icon
;
compat
Definition
compact.h:12
compat::Icon
const char * Icon(EIcon icon)
Definition
compact.h:115
compat::ContaUTF8
int ContaUTF8(const char *str)
Definition
compact.h:26
compat::init_io
void init_io()
Definition
compact.h:14
compat::EIcon
EIcon
Definition
compact.h:109
compat::EIcon::ICON_LISTA
@ ICON_LISTA
compact.h
Generated by
1.9.8