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