ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::tools Namespace Reference

工具函数命名空间。 More...

Namespaces

namespace  mail_detail
 邮件发送的内部实现命名空间
namespace  name_detail
 类型名称处理的内部命名空间
namespace  rand_detail
 随机数生成的内部实现命名空间
namespace  time
 时间工具命名空间,提供时间相关的工具函数。

Classes

class  base64_impl
class  cmd
 命令分发器类。 More...
class  consume
 资源消耗跟踪和耗时校验辅助工具 More...
class  curl
 HTTP客户端管理类(单例)。 More...
class  email_sender
 邮件发送器类 More...
class  enum2name
 双向枚举-名称注册表。 More...
class  filterword
 敏感词过滤器 More...
class  group
 Actor分组管理类。 More...
struct  has_pb_desc
 检查类型是否具有Protobuf descriptor()方法 More...
struct  has_pb_desc< T, std::void_t< decltype(T::descriptor())> >
 has_pb_desc 特化,检测 descriptor() 方法 More...
struct  http_parm
 HTTP请求参数结构体。 More...
class  impl
 Pimpl辅助包装类。 More...
struct  is_protobuf_message
 检查类型是否为Protobuf消息类型 More...
struct  mail_param
 邮件发送参数结构体。 More...
struct  mail_payload_state
 邮件载荷传输状态 More...
struct  nacnode
 Aho-Corasick自动机Trie节点 More...
class  nhash
 命名哈希码生成器。 More...
struct  nhashcode
 命名哈希码结构体。 More...
class  nwork
 单消费者工作队列。 More...
struct  parm
 参数包装器模板。 More...
class  pb_field
 Protobuf字段反射辅助工具类 More...
class  readfile
 文件读取类。 More...
class  sem
 计数信号量封装类。 More...
class  sleep
 线程休眠辅助类。 More...
class  time_wheel
 时间轮定时器管理器 More...
struct  time_wheel_config
 时间轮配置 More...
class  twheel
 全局时间轮管理器 More...
struct  varint_impl
 Varint编码内部实现结构体 More...
struct  varint_parm
 varint编解码参数结构体 More...
class  wheel
 时间轮轮次类 More...
struct  wheel_node
 时间轮节点 More...
struct  wheel_parm
 轮子类前向声明 More...
class  writefile
 文件写入类。 More...

Typedefs

template<typename ENUMT>
using em = enum2name<ENUMT>
 enum2name的简写别名

Enumerations

enum  ENUM_MODE { ENUM_MODE_NULL , ENUM_MODE_HTTP , ENUM_MODE_HTTPS }
 HTTP协议模式枚举。 More...
enum  ENUM_TYPE { ENUM_TYPE_NULL , ENUM_TYPE_POST , ENUM_TYPE_GET }
 HTTP请求方法枚举。 More...
enum  { epb_mid = 1 }
 Protobuf结构标识常量 More...

Functions

bool is_lanip (const std::string &aip)
 判断IP地址是否为局域网地址
int16_t transformlittle (parm< int16_t > &avalues)
 将int16_t转换为小端字节序
uint16_t transformlittle (parm< uint16_t > &avalues)
 将uint16_t转换为小端字节序
int32_t transformlittle (parm< int32_t > &avalues)
 将int32_t转换为小端字节序
uint32_t transformlittle (parm< uint32_t > &avalues)
 将uint32_t转换为小端字节序
int64_t transformlittle (parm< int64_t > &avalues)
 将int64_t转换为小端字节序
uint64_t transformlittle (parm< uint64_t > &avalues)
 将uint64_t转换为小端字节序
std::string base64_encode (const char *adata, std::size_t alen)
 将二进制数据编码为Base64字符串
std::string base64_encode (const std::string &astr)
 将字符串编码为Base64
std::string base64_decode (const char *adata, std::size_t alen)
 将Base64字符串解码为二进制数据
std::string base64_decode (const std::string &adata)
 将Base64字符串解码
bool uuid_make (std::string &astr)
 生成UUID字符串
constexpr bool islittle ()
 判断当前系统是否为小端字节序。
template<typename T>
bool enc_base (char *abuf, int alen, const T *adata, int32_t acnt, int32_t *abytes)
 基础编码函数(模板)
template<typename T>
bool dec_base (const char *abuf, int alen, int32_t *abytes, T *adata, int32_t acnt)
 基础解码函数(模板)
bool hex_get (unsigned char asrc, unsigned char &adst)
 十六进制字符转数值
void hex_pair (unsigned char asrc, unsigned char &adst1, unsigned char &adst2)
 字节转十六进制字符对
bool hex_byte (const unsigned char *asrc, unsigned char *adst)
 十六进制字符对转字节
int varint_length (parm< int64_t > &avalues)
 计算64位整数的varint编码长度
int varint_length (parm< int32_t > &avalues)
 计算32位整数的varint编码长度
bool varint_encode (varint_parm< int64_t > &aparm)
 64位整数varint编码
bool varint_encode (varint_parm< int32_t > &aparm)
 32位整数varint编码
bool varint_decode (varint_parm< int64_t > &aparm)
 64位整数varint解码
bool varint_decode (varint_parm< int32_t > &aparm)
 32位整数varint解码
int to_hex (void *apso, int alen, void *apto)
 字节数组转十六进制字符串
bool to_bytes (void *apso, int alen, void *apto, int &aout_len)
 十六进制字符串转字节数组
void bytexor (char *ap, int32_t aplen, int apos)
 XOR异或加密/解密
void log_lex_err (const char *atotype, const char *afromtype, const char *aerror, const std::source_location &asource)
 记录lexical_cast类型转换失败的错误日志
template<typename TMAP, typename TKEY>
auto findmap (TMAP &amap, const TKEY &akey)
 在映射中查找元素。
template<typename TMAP, typename TKEY>
auto insertmap (TMAP &amap, const TKEY &akey, const typename TMAP::mapped_type &avalue)
 向映射中插入元素。
template<typename TMAP, typename TKEY>
bool erasemap (TMAP &amap, const TKEY &akey, typename TMAP::mapped_type &adata)
 从映射中提取并移除元素。
template<typename T>
bool proto2json (const T &adata, std::string &ajson)
 将Protobuf消息转换为JSON字符串。
template<typename T>
void print_json (const T &adata, bool aislog=false)
 打印Protobuf消息的JSON表示。
template<typename T>
bool json2proto (const std::string &ajson, T &adata)
 将JSON字符串转换为Protobuf消息。
template<typename T>
bool json2custom (const std::string &ajson, T &adata)
 将JSON字符串转换为自定义类型。
template<typename T>
bool custom2json (const T &adata, std::string &ajson)
 将自定义类型转换为JSON字符串。
template<typename TKEY, typename TVAL>
void copy (const std::map< TKEY, TVAL > &asrc, google::protobuf::Map< TKEY, TVAL > &adst)
 将std::map复制到Protobuf Map。
template<typename TKEY, typename TVAL>
void copy (const google::protobuf::Map< TKEY, TVAL > &asrc, std::map< TKEY, TVAL > &adst)
 将Protobuf Map复制到std::map。
template<typename To, typename From>
To lexical_cast (const From &afrom, const std::source_location &asource=std::source_location::current())
 类型安全的lexical_cast实现。
template<typename To, typename From>
bool try_lexical_cast (const From &afrom, To &ato, const std::source_location &asource=std::source_location::current())
 安全的lexical_cast实现,不抛出异常。
std::string make_request_url (const http_parm &ahttp)
 构建完整的HTTP请求URL
void test_mail (const char *atitle, const char *acontent, const std::vector< std::pair< std::string, std::string > > &amailvec)
 测试邮件发送功能
void test_manage_curl ()
 测试HTTP请求功能
void test_filterword ()
 敏感词过滤功能测试函数
std::string md5 (const std::string &atext)
 计算字符串的MD5哈希值
std::string sh1 (std::string_view atext)
 计算字符串的SHA1哈希值
std::string hmac_sha1 (const std::string &akey, const std::string &atext)
 计算HMAC-SHA1消息认证码
std::string & type_name_handle (std::string &aname)
 处理C++类型名称,使其更易读
std::vector< const char * > split_str (char *apbuff, int32_t abuff_cnt)
 按逗号分割字符缓冲区
bool bit (int32_t atype, int32_t acjson)
 检查指定位是否被设置
std::strong_ordering less_member ()
 比较成员的递归终止函数
void erase_repeat (std::string &astr, char ach)
 删除字符串中连续的重复字符
std::string_view trim_ascii_spaces (std::string_view avalue)
 去除字符串首尾的ASCII空格
std::size_t strlen (const char *astr)
 安全的字符串长度计算
template<typename T>
std::string & type_name ()
 获取类型的字符串表示
template<std::size_t N>
void split_str (char *apbuff, int32_t abuff_cnt, std::array< const char *, N > &aarr)
 分割字符串到固定大小数组
template<typename T>
auto less_member (const T &alhs, const T &arhs)
 单成员三路比较
template<typename T, typename... TARGS>
auto less_member (const T &alhs, const T &arhs, const TARGS &... amems)
 多成员三路比较
bool splite (const char *abuff, const char *afg, std::vector< std::string > &avec)
 按分隔符拆分C字符串到vector
bool splicing (const std::vector< std::string > &avec, const char *afg, std::string &astr, int32_t apos)
 将vector中的字符串用分隔符拼接
bool splite (int32_t aindex, const std::vector< std::string > &avec, std::vector< std::string > &adata)
 从指定索引开始提取子vector
bool splicing (const std::set< std::string > &aset, const char *afg, std::string &astr)
 将set中的字符串用分隔符拼接
template<typename T>
bool splite (const char *abuff, const char *afg, std::vector< T > &avec)
template<typename T>
bool splite (const char *abuff, const char *afg, std::set< T > &aset)
template<typename T>
bool splite (int32_t aindex, const std::vector< std::string > &avec, T &adata)
template<typename T>
bool splite (int32_t aindex, const std::vector< std::string > &avec, std::vector< T > &adata)
template<std::size_t... INDEX, typename TTUPLE>
bool splite_tuple (std::index_sequence< INDEX... >, const std::vector< std::string > &avec, TTUPLE &atup)
template<std::size_t... INDEX, typename... ARGS>
bool splite (std::index_sequence< INDEX... >, const char *abuff, const char *afg, ARGS &... aargs)
template<typename... ARGS>
bool splite (const char *abuff, const char *afg, ARGS &... aargs)
template<typename TFIRST = std::string, typename TSECOND = std::string>
bool splite_special (const char *astr, const char *akey1, const char *akey2, std::vector< std::pair< TFIRST, TSECOND > > &avec)
template<typename TFIRST = std::string, typename TSECOND = std::string>
bool splite_special (const char *astr, const char *akey1, const char *akey2, std::map< TFIRST, TSECOND > &amap)
template<typename T>
bool splicing (const std::vector< T > &avec, const char *afg, std::string &astr, const std::function< std::string(const T &)> &afun=m_splicing< T >)
template<typename T>
bool splicing (const std::set< T > &avec, const char *afg, std::string &astr, const std::function< std::string(const T &)> &afun=m_splicing< T >)
template<typename TKEY, typename TVAL>
bool splicing (const std::map< TKEY, TVAL > &amap, const char *afg, std::string &astr, const std::function< std::string(const TKEY &, const TVAL &)> &afun=m_splicingmap< TKEY, TVAL >)
template<typename TKEY, typename TVAL>
bool splicing (const google::protobuf::Map< TKEY, TVAL > &amap, const char *afg, std::string &astr, const std::function< std::string(const TKEY &, const TVAL &)> &afun=m_splicingmap< TKEY, TVAL >)
template<typename T>
bool splicing (int32_t aindex, const char *afg, std::string &astr, T &adata)
template<std::size_t... INDEX, typename... ARGS>
bool splicing (std::index_sequence< INDEX... >, const char *afg, std::string &astr, ARGS &... aargs)
template<typename... ARGS>
bool splicing (const char *afg, std::string &astr, ARGS &... aargs)
std::string time2str (int autc, const char *aformat)
 将UTC时间戳转换为格式化字符串
const std::string & server_name ()
 获取当前服务器名称
int rand ()
 生成随机整数
bool directories_exists (const std::string &apath)
 检查目录是否存在
bool file_exists (const std::string &apath)
 检查文件是否存在
bool create_dir (const std::string &apath)
 创建目录(包括父目录)
bool file_remove (const std::string &afile)
 删除文件
void dir (const std::string &apath, std::vector< std::string > &afiles, bool aiter)
 获取目录下的所有文件
void no_core_dump (bool anocreate)
 终止程序(用于致命错误)
std::function< void()> send_mail (const std::string &acontent, bool asynchronize)
 创建邮件发送函数
int64_t nguidstr2int64 (const char *anguid)
 将GUID字符串转换为int64_t
bool wasscii2asscii (const std::wstring &awstr, std::string &astr)
 将宽字符串(wstring)转换为多字节ASCII字符串
bool asscii2wasscii (const std::string &astr, std::wstring &awstr)
 将多字节ASCII字符串转换为宽字符串(wstring)
bool wasscii2utf8 (const std::wstring &awstr, std::string &astr)
 将宽字符串(wstring)转换为UTF-8字符串
bool utf82wasscii (const std::string &astr, std::wstring &awstr)
 将UTF-8字符串转换为宽字符串(wstring)
bool to_asscii (const std::string &astr1, std::string &astr2)
 将UTF-8字符串转换为多字节ASCII字符串
bool to_utf8 (const std::string &astr1, std::string &astr2)
 将多字节ASCII字符串转换为UTF-8字符串
int32_t utf8firstbyte (uint8_t afirst)
 获取UTF-8编码第一个字节的字节数
bool isutf8 (const std::string &astr)
 检查字符串是否为有效的UTF-8编码
bool isincludeutf8mb4 (const std::string &astr)
 检查UTF-8字符串是否包含4字节字符(UTF-8mb4)
void sregex (const std::string &apattern, const std::string &adata, const std::function< void(std::string &)> &afun)
 使用正则表达式查找所有匹配的子串
void smatch (const std::string &aexpr, const std::string &adata, const std::function< void(std::smatch &)> &afun)
 使用正则表达式查找所有匹配并获取捕获组
void replace (const std::string &aexpr, const std::string &arepl, const std::string &adata, std::string &aret)
 使用正则表达式替换字符串
std::string char2hex (char adec)
 将单个字符转换为两位十六进制字符串
std::string url_encode (const std::string &astr)
 URL编码字符串
std::string url_decode (const std::string &astr)
 URL解码字符串
std::vector< std::string_view > get_line (const char *apbuff, std::size_t abuff_sz)
 按行分割字符缓冲区
bool isnumber (const std::string &anum)
 检查字符串是否全部由数字组成
void transform_tolower (std::string &adata)
 将字符串转换为小写
void transform_toupper (std::string &adata)
 将字符串转换为大写

Variables

template<typename TAG, typename TKEY, typename ... ARG>
std::map< TKEY, std::function< void(ARG...)> > cmd< TAG, TKEY, ARG... >::m_fun
 静态成员定义:命令映射表
template<typename ENUMT>
std::map< int, std::map< ENUMT, typename enum2name< ENUMT >::data > > enum2name< ENUMT >::m_datae2n
 静态成员定义:枚举值→名称映射表
template<typename ENUMT>
std::map< int, std::map< std::string, ENUMT > > enum2name< ENUMT >::m_datan2e
 静态成员定义:名称→枚举值映射表
template<typename T>
std::function< std::string(const T &)> m_splicing
template<typename TKEY, typename TVAL>
std::function< std::string(const TKEY &, const TVAL &)> m_splicingmap

Detailed Description

工具函数命名空间。

包含各种实用的工具函数和模板,用于简化常见的编程任务。

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Protobuf结构标识常量

Enumerator
epb_mid 

proto结构标识

◆ ENUM_MODE

HTTP协议模式枚举。

Enumerator
ENUM_MODE_HTTP 

未初始化模式

ENUM_MODE_HTTPS 

普通HTTP

◆ ENUM_TYPE

HTTP请求方法枚举。

Enumerator
ENUM_TYPE_POST 

未初始化方法

ENUM_TYPE_GET 

HTTP POST.

Function Documentation

◆ asscii2wasscii()

bool ngl::tools::asscii2wasscii ( const std::string & astr,
std::wstring & awstr )

将多字节ASCII字符串转换为宽字符串(wstring)

ASCII字符串转换为宽字符(wchar_t)。

Parameters
astr源ASCII字符串
awstr[out] 存储转换结果的宽字符串
Returns
成功转换返回true,失败返回false

使用std::codecvt进行编码转换

Note
如果源字符串为空,返回true但不修改目标字符串
Parameters
astr输入ASCII字符串
awstr输出宽字符串
Returns
true 转换成功
false 转换失败

◆ base64_decode() [1/2]

std::string ngl::tools::base64_decode ( const char * adata,
std::size_t alen )

将Base64字符串解码为二进制数据

将Base64字符串解码为数据。

Parameters
adataBase64编码的数据指针
alen数据长度
Returns
解码后的原始字符串

自动处理'='填充字符 遇到无效字符会提前终止解码

Parameters
adataBase64编码的数据
alen数据长度
Returns
解码后的字符串

◆ base64_decode() [2/2]

std::string ngl::tools::base64_decode ( const std::string & adata)

将Base64字符串解码

将Base64字符串解码为字符串。

Parameters
adataBase64编码的字符串
Returns
解码后的原始字符串
Parameters
adataBase64编码的字符串
Returns
解码后的字符串

◆ base64_encode() [1/2]

std::string ngl::tools::base64_encode ( const char * adata,
std::size_t alen )

将二进制数据编码为Base64字符串

将数据编码为Base64字符串。

Parameters
adata源数据指针
alen源数据长度
Returns
Base64编码后的字符串

使用RFC 4648标准的Base64编码 每3个字节编码为4个字符,不足时用'='填充

Parameters
adata要编码的数据
alen数据长度
Returns
Base64编码后的字符串

◆ base64_encode() [2/2]

std::string ngl::tools::base64_encode ( const std::string & astr)

将字符串编码为Base64

将字符串编码为Base64字符串。

Parameters
astr源字符串
Returns
Base64编码后的字符串
Parameters
astr要编码的字符串
Returns
Base64编码后的字符串

◆ bit()

bool ngl::tools::bit ( int32_t atype,
int32_t acjson )

检查指定位是否被设置

检查指定位是否设置

Parameters
atype要检查的值
acjson位掩码
Returns
如果指定位被设置返回true,否则返回false
Note
用于标志位检查
Parameters
atype位掩码值
acjson要检查的位位置
Returns
指定位设置返回true

◆ bytexor()

void ngl::tools::bytexor ( char * ap,
int32_t aplen,
int apos )

XOR异或加密/解密

对字节数组进行异或操作

使用配置的密钥对数据进行循环XOR异或操作

Parameters
ap待处理的数据缓冲区(原地修改)
aplen数据长度(字节数)
apos数据在整体流中的起始偏移量(用于确定密钥起始位置)
Note
如果sysconfig::isxor()返回false,则不执行任何操作
XOR操作是可逆的:对同一数据用相同密钥和偏移再次调用即可解密
See also
sysconfig::xorkey, sysconfig::xorkeynum
Parameters
ap字节数组指针
aplen数组长度
apos起始位置偏移

从指定位置开始,对数组中的每个字节与位置索引进行异或操作。 常用于简单的数据混淆或校验。

◆ char2hex()

std::string ngl::tools::char2hex ( char adec)

将单个字符转换为两位十六进制字符串

将字符转换为十六进制字符串。

Parameters
adec要转换的字符
Returns
两位十六进制字符串(大写)

使用预定义的十六进制查找表

Parameters
adec输入字符
Returns
std::string 两位十六进制字符串

◆ copy() [1/2]

template<typename TKEY, typename TVAL>
void ngl::tools::copy ( const google::protobuf::Map< TKEY, TVAL > & asrc,
std::map< TKEY, TVAL > & adst )

将Protobuf Map复制到std::map。

Template Parameters
TKEY键类型
TVAL值类型
Parameters
asrc源Protobuf Map
adst目标std::map

◆ copy() [2/2]

template<typename TKEY, typename TVAL>
void ngl::tools::copy ( const std::map< TKEY, TVAL > & asrc,
google::protobuf::Map< TKEY, TVAL > & adst )

将std::map复制到Protobuf Map。

Template Parameters
TKEY键类型
TVAL值类型
Parameters
asrc源std::map
adst目标Protobuf Map

◆ create_dir()

bool ngl::tools::create_dir ( const std::string & apath)

创建目录(包括父目录)

创建目录

Parameters
apath目录路径
Returns
成功创建或已存在返回true,失败返回false

如果目录已存在,检查是否为目录 否则递归创建所有父目录

Parameters
apath目录路径
Returns
创建成功返回true

支持递归创建多级目录。

◆ custom2json()

template<typename T>
bool ngl::tools::custom2json ( const T & adata,
std::string & ajson )

将自定义类型转换为JSON字符串。

Template Parameters
T自定义类型
Parameters
adata要转换的数据
ajson输出参数,存储JSON字符串
Returns
转换成功返回true,否则返回false

◆ dec_base()

template<typename T>
bool ngl::tools::dec_base ( const char * abuf,
int alen,
int32_t * abytes,
T * adata,
int32_t acnt )

基础解码函数(模板)

从缓冲区直接复制数据(字节序不变)

Template Parameters
T数据类型
Parameters
abuf输入缓冲区
alen输入缓冲区可用长度(字节数)
abytes[in/out] 已使用字节数,解码后累加
adata输出数据指针
acnt输出数据元素个数
Return values
true解码成功
false参数错误或缓冲区不足

◆ dir()

void ngl::tools::dir ( const std::string & apath,
std::vector< std::string > & afiles,
bool aiter )

获取目录下的所有文件

遍历目录获取文件列表

Parameters
apath目录路径
afiles[out] 存储文件路径的vector
aiter是否递归遍历子目录

跳过权限拒绝的目录,只收集常规文件 使用string存储路径便于序列化

Parameters
apath目录路径
afiles输出文件列表
aiter是否递归遍历子目录,默认为false

◆ directories_exists()

bool ngl::tools::directories_exists ( const std::string & apath)

检查目录是否存在

Parameters
apath目录路径
Returns
目录存在返回true,否则返回false

使用std::error_code避免异常

Parameters
apath目录路径
Returns
目录存在返回true

◆ enc_base()

template<typename T>
bool ngl::tools::enc_base ( char * abuf,
int alen,
const T * adata,
int32_t acnt,
int32_t * abytes )

基础编码函数(模板)

将数据直接复制到缓冲区(字节序不变)

Template Parameters
T数据类型
Parameters
abuf输出缓冲区
alen输出缓冲区长度(字节数)
adata待编码数据指针
acnt待编码数据元素个数
abytes[in/out] 已使用字节数,编码后累加
Return values
true编码成功
false参数错误或缓冲区不足

◆ erase_repeat()

void ngl::tools::erase_repeat ( std::string & astr,
char ach )

删除字符串中连续的重复字符

删除字符串中的重复字符

Parameters
astr[in/out] 要处理的字符串
ach要去重的字符

使用STL的unique算法,将连续的重复字符压缩为单个

Parameters
astr输入/输出字符串
ach要删除的字符

删除字符串中连续出现的指定字符,只保留第一个。

◆ erasemap()

template<typename TMAP, typename TKEY>
bool ngl::tools::erasemap ( TMAP & amap,
const TKEY & akey,
typename TMAP::mapped_type & adata )

从映射中提取并移除元素。

Template Parameters
TMAP映射类型
TKEY键类型
Parameters
amap映射引用
akey要移除的键
adata输出参数,存储移除的值
Returns
移除成功返回true,否则返回false

◆ file_exists()

bool ngl::tools::file_exists ( const std::string & apath)

检查文件是否存在

Parameters
apath文件路径
Returns
文件存在返回true,否则返回false

使用std::error_code避免异常

Parameters
apath文件路径
Returns
文件存在返回true

◆ file_remove()

bool ngl::tools::file_remove ( const std::string & afile)

删除文件

Parameters
afile文件路径
Returns
成功删除返回true,失败返回false

使用std::error_code避免异常

Parameters
afile文件路径
Returns
删除成功返回true

◆ findmap()

template<typename TMAP, typename TKEY>
auto ngl::tools::findmap ( TMAP & amap,
const TKEY & akey )

在映射中查找元素。

Template Parameters
TMAP映射类型
TKEY键类型
Parameters
amap映射引用
akey要查找的键
Returns
找到的值指针,未找到返回nullptr

◆ get_line()

std::vector< std::string_view > ngl::tools::get_line ( const char * apbuff,
std::size_t abuff_sz )

按行分割字符缓冲区

按行分割字符串。

Parameters
apbuff源字符缓冲区
abuff_sz缓冲区大小
Returns
每行的string_view vector

支持\r
换行符,使用string_view避免内存拷贝

Note
缓冲区必须在vector使用期间保持有效
Parameters
apbuff输入缓冲区
abuff_sz缓冲区大小
Returns
std::vector<std::string_view> 行视图列表

◆ hex_byte()

bool ngl::tools::hex_byte ( const unsigned char * asrc,
unsigned char * adst )

十六进制字符对转字节

将两个十六进制字符转换为一个字节

Parameters
asrc输入的两个十六进制字符数组
adst[out] 转换后的字节
Return values
true转换成功
false参数错误或包含无效的十六进制字符

◆ hex_get()

bool ngl::tools::hex_get ( unsigned char asrc,
unsigned char & adst )

十六进制字符转数值

将单个十六进制字符(0-9, a-f)转换为对应的数值(0-15)

Parameters
asrc十六进制字符
adst[out] 转换后的数值(0-15)
Return values
true转换成功
false输入字符不是有效的十六进制字符
Note
仅支持小写字母a-f,不支持大写A-F

◆ hex_pair()

void ngl::tools::hex_pair ( unsigned char asrc,
unsigned char & adst1,
unsigned char & adst2 )

字节转十六进制字符对

将单个字节转换为两个十六进制字符

Parameters
asrc待转换的字节(0-255)
adst1[out] 高4位对应的十六进制字符
adst2[out] 低4位对应的十六进制字符
Note
输出字符为小写形式(0-9, a-f)

◆ hmac_sha1()

std::string ngl::tools::hmac_sha1 ( const std::string & akey,
const std::string & atext )

计算HMAC-SHA1消息认证码

计算HMAC-SHA1消息认证码。

Parameters
akey密钥
atext要认证的消息
Returns
20字节的原始HMAC-SHA1(二进制)

使用RFC 2104标准的HMAC算法 用于消息认证和完整性校验

Parameters
akey密钥
atext输入文本
Returns
std::string HMAC-SHA1结果的十六进制字符串
Note
常用于OAuth签名、API请求验证等场景。

◆ insertmap()

template<typename TMAP, typename TKEY>
auto ngl::tools::insertmap ( TMAP & amap,
const TKEY & akey,
const typename TMAP::mapped_type & avalue )

向映射中插入元素。

Template Parameters
TMAP映射类型
TKEY键类型
Parameters
amap映射引用
akey要插入的键
avalue要插入的值
Returns
插入成功返回值指针,键已存在返回nullptr

◆ is_lanip()

bool ngl::tools::is_lanip ( const std::string & aip)

判断IP地址是否为局域网地址

判断IP地址是否为局域网地址。

Parameters
aipIPv4地址字符串
Returns
是局域网地址返回true,否则返回false

检查以下局域网地址段:

  • 127.0.0.1(本地回环)
  • 10.0.0.0/8(A类私有地址)
  • 172.16.0.0/12(B类私有地址)
  • 192.168.0.0/16(C类私有地址)
Parameters
aipIP地址字符串
Returns
是局域网地址返回true,否则返回false

◆ isincludeutf8mb4()

bool ngl::tools::isincludeutf8mb4 ( const std::string & astr)

检查UTF-8字符串是否包含4字节字符(UTF-8mb4)

检查字符串是否包含UTF-8四字节字符(emoji等)。

Parameters
astr要检查的UTF-8字符串
Returns
如果包含4字节字符返回true,否则返回false

遍历所有UTF-8字符,检查是否有码点>0xFFFF的字符 用于MySQL等数据库的utf8mb4兼容性检查

Note
如果字符串不是有效UTF-8,返回false
Parameters
astr输入字符串
Returns
true 包含四字节UTF-8字符
false 不包含

◆ islittle()

bool ngl::tools::islittle ( )
constexpr

判断当前系统是否为小端字节序。

Returns
是小端字节序返回true,否则返回false

◆ isnumber()

bool ngl::tools::isnumber ( const std::string & anum)

检查字符串是否全部由数字组成

检查字符串是否为纯数字。

Parameters
anum要检查的字符串
Returns
如果是纯数字返回true,否则返回false
Note
空字符串返回false
Parameters
anum输入字符串
Returns
true 是纯数字
false 不是纯数字

◆ isutf8()

bool ngl::tools::isutf8 ( const std::string & astr)

检查字符串是否为有效的UTF-8编码

检查字符串是否为合法UTF-8编码。

Parameters
astr要检查的字符串
Returns
如果是有效UTF-8返回true,否则返回false

使用utf8cpp库的is_valid函数进行验证

Parameters
astr输入字符串
Returns
true 是合法UTF-8
false 不是合法UTF-8

◆ json2custom()

template<typename T>
bool ngl::tools::json2custom ( const std::string & ajson,
T & adata )

将JSON字符串转换为自定义类型。

Template Parameters
T自定义类型
Parameters
ajsonJSON字符串
adata输出参数,存储转换后的数据
Returns
转换成功返回true,否则返回false

◆ json2proto()

template<typename T>
bool ngl::tools::json2proto ( const std::string & ajson,
T & adata )

将JSON字符串转换为Protobuf消息。

Template Parameters
TProtobuf消息类型
Parameters
ajsonJSON字符串
adata输出参数,存储转换后的Protobuf消息
Returns
转换成功返回true,否则返回false

◆ less_member() [1/3]

std::strong_ordering ngl::tools::less_member ( )

比较成员的递归终止函数

三路比较终止函数

Returns
返回std::strong_ordering::equal

用于可变参数模板递归比较的终止条件

Returns
始终返回 std::strong_ordering::equal

用于 less_member 模板递归的终止条件。

◆ less_member() [2/3]

template<typename T>
auto ngl::tools::less_member ( const T & alhs,
const T & arhs )

单成员三路比较

Template Parameters
T成员类型
Parameters
alhs左操作数
arhs右操作数
Returns
比较结果

◆ less_member() [3/3]

template<typename T, typename... TARGS>
auto ngl::tools::less_member ( const T & alhs,
const T & arhs,
const TARGS &... amems )

多成员三路比较

Template Parameters
T第一个成员类型
TARGS其余成员类型
Parameters
alhs左操作数第一个成员
arhs右操作数第一个成员
amems其余成员参数包
Returns
按成员顺序比较的结果

按参数顺序逐个比较成员,返回第一个不相等的比较结果。

auto result = less_member(obj1.a, obj2.a, obj1.b, obj2.b, obj1.c, obj2.c);

◆ lexical_cast()

template<typename To, typename From>
To ngl::tools::lexical_cast ( const From & afrom,
const std::source_location & asource = std::source_location::current() )

类型安全的lexical_cast实现。

使用boost::lexical_cast进行类型转换,并添加额外的安全检查。

Template Parameters
To目标类型
From源类型
Parameters
afrom要转换的值
asource源代码位置,默认为当前调用位置
Returns
转换后的值
Exceptions
boost::bad_lexical_cast转换失败时抛出异常

◆ log_lex_err()

void ngl::tools::log_lex_err ( const char * atotype,
const char * afromtype,
const char * aerror,
const std::source_location & asource )

记录lexical_cast类型转换失败的错误日志

记录lexical_cast错误日志。

Parameters
atotype目标类型名称
afromtype源类型名称
aerror错误描述信息
asource调用位置信息(自动捕获)

当lexical_cast转换失败时,记录详细的错误信息包括 源类型、目标类型、错误原因和调用位置

Note
用于统一的类型转换错误处理
Parameters
atotype目标类型名称
afromtype源类型名称
aerror错误信息
asource源代码位置

◆ make_request_url()

std::string ngl::tools::make_request_url ( const http_parm & ahttp)

构建完整的HTTP请求URL

将基础URL和查询参数拼接为完整URL

Parameters
ahttpHTTP请求参数
Returns
拼接后的完整URL字符串
Note
GET请求参数追加到URL,POST参数放在请求体中

◆ md5()

std::string ngl::tools::md5 ( const std::string & atext)

计算字符串的MD5哈希值

计算字符串的MD5摘要。

Parameters
atext要计算哈希的字符串
Returns
32位十六进制MD5哈希字符串

使用RFC 1321标准的MD5算法

Note
MD5已被认为不够安全,仅用于非安全场景
Parameters
atext输入文本
Returns
std::string 32字符的十六进制MD5摘要

◆ nguidstr2int64()

int64_t ngl::tools::nguidstr2int64 ( const char * anguid)

将GUID字符串转换为int64_t

将GUID字符串转换为64位整数

Parameters
anguidGUID字符串(格式:"类型#区域#数据ID")
Returns
转换后的int64_t GUID

如果anguid为nullptr或格式无效,生成新的GUID 使用"#"作为分隔符解析类型、区域和数据ID

Parameters
anguidGUID字符串
Returns
转换后的64位整数

用于将字符串格式的GUID转换为数值类型便于存储和比较。

◆ no_core_dump()

void ngl::tools::no_core_dump ( bool anocreate)

终止程序(用于致命错误)

禁用核心转储

Parameters
anocreate是否不创建核心转储,默认为false

当anocreate为false时调用std::abort() 用于不可恢复的错误情况

Parameters
anocreate是否禁止创建核心转储文件,默认为false

用于生产环境防止敏感信息泄露。

◆ print_json()

template<typename T>
void ngl::tools::print_json ( const T & adata,
bool aislog = false )

打印Protobuf消息的JSON表示。

Template Parameters
TProtobuf消息类型
Parameters
adata要打印的Protobuf消息
aislog是否使用日志输出

将Protobuf消息转换为JSON字符串并打印到错误日志。

Template Parameters
TProtobuf消息类型
Parameters
adata要打印的Protobuf消息
aislog是否使用日志输出(当前未使用)

◆ proto2json()

template<typename T>
bool ngl::tools::proto2json ( const T & adata,
std::string & ajson )

将Protobuf消息转换为JSON字符串。

Template Parameters
TProtobuf消息类型
Parameters
adata要转换的Protobuf消息
ajson输出参数,存储JSON字符串
Returns
转换成功返回true,否则返回false

◆ rand()

int ngl::tools::rand ( )

生成随机整数

生成随机数

Returns
0到RAND_MAX之间的随机整数

使用线程本地的MT19937_64引擎,确保线程安全 每个线程有独立的随机数生成器实例

Returns
随机整数

◆ replace()

void ngl::tools::replace ( const std::string & aexpr,
const std::string & arepl,
const std::string & adata,
std::string & aret )

使用正则表达式替换字符串

使用正则表达式替换字符串。

Parameters
aexpr正则表达式模式
arepl替换字符串(可包含反向引用$1,$2等)
adata源字符串
aret[out] 存储替换结果的字符串

使用std::regex_replace进行全局替换

Parameters
aexpr正则表达式
arepl替换字符串
adata输入数据
aret输出结果

◆ send_mail()

std::function< void()> ngl::tools::send_mail ( const std::string & acontent,
bool asynchronize )

创建邮件发送函数

发送邮件

Parameters
acontent邮件内容
asynchronize是否异步发送,默认为true
Returns
可调用的邮件发送函数

返回的函数具有以下特性:

  • 自动去重:相同内容在间隔时间内只发送一次
  • 自动限流:超过容量时清理旧记录
  • 支持同步/异步发送
Parameters
acontent邮件内容
asynchronize是否异步发送,默认为true
Returns
邮件发送函数对象

返回一个可调用对象,调用时执行实际的邮件发送操作。

◆ server_name()

const std::string & ngl::tools::server_name ( )

获取当前服务器名称

获取服务器名称

Returns
服务器名称的const引用

从ttab_servers配置表获取

Note
如果配置表为空,调用no_core_dump()终止程序
Returns
服务器名称字符串引用

◆ sh1()

std::string ngl::tools::sh1 ( std::string_view atext)

计算字符串的SHA1哈希值

计算字符串的SHA1摘要。

Parameters
atext要计算哈希的字符串
Returns
20字节的原始SHA1哈希(二进制)

使用FIPS 180-4标准的SHA1算法

Note
SHA1已被认为不够安全,仅用于非安全场景
Parameters
atext输入文本
Returns
std::string 40字符的十六进制SHA1摘要

◆ smatch()

void ngl::tools::smatch ( const std::string & aexpr,
const std::string & adata,
const std::function< void(std::smatch &)> & afun )

使用正则表达式查找所有匹配并获取捕获组

使用正则表达式匹配字符串并对匹配结果执行回调。

Parameters
aexpr正则表达式模式
adata要搜索的源数据
afun匹配结果的回调函数(包含捕获组)

遍历所有匹配项,对每个匹配的smatch对象调用回调

Parameters
aexpr正则表达式
adata输入数据
afun匹配结果回调函数(接收smatch对象)

◆ splicing() [1/2]

bool ngl::tools::splicing ( const std::set< std::string > & aset,
const char * afg,
std::string & astr )

将set中的字符串用分隔符拼接

Parameters
aset源字符串set
afg分隔符字符串
astr[out] 存储拼接结果的字符串
Returns
成功拼接返回true,失败返回false

预计算总长度并reserve,避免多次内存分配 set保证元素有序且唯一

Note
如果aset为空,astr保持不变

◆ splicing() [2/2]

bool ngl::tools::splicing ( const std::vector< std::string > & avec,
const char * afg,
std::string & astr,
int32_t apos )

将vector中的字符串用分隔符拼接

Parameters
avec源字符串vector
afg分隔符字符串
astr[out] 存储拼接结果的字符串
apos起始索引,默认为0
Returns
成功拼接返回true,失败返回false

从apos位置开始拼接,每个元素之间插入分隔符 预分配内存避免多次重新分配

Note
apos必须小于等于avec.size()

◆ split_str() [1/2]

std::vector< const char * > ngl::tools::split_str ( char * apbuff,
int32_t abuff_cnt )

按逗号分割字符缓冲区

分割字符串为子串数组

Parameters
apbuff源字符缓冲区(会被修改)
abuff_cnt缓冲区长度
Returns
分割后的字符串指针vector

将逗号替换为'\0',返回指向各子串的指针 会跳过逗号后的空格

Warning
函数会修改输入缓冲区
Parameters
apbuff输入字符串缓冲区(会被修改)
abuff_cnt缓冲区长度
Returns
分割后的子串数组

使用逗号作为分隔符,支持空格跳过。

◆ split_str() [2/2]

template<std::size_t N>
void ngl::tools::split_str ( char * apbuff,
int32_t abuff_cnt,
std::array< const char *, N > & aarr )

分割字符串到固定大小数组

Template Parameters
N数组大小
Parameters
apbuff输入字符串缓冲区(会被修改)
abuff_cnt缓冲区长度
aarr输出数组,存储分割后的子串指针

使用逗号作为分隔符,支持空格跳过。 超出数组大小的部分会被忽略。

◆ splite() [1/2]

bool ngl::tools::splite ( const char * abuff,
const char * afg,
std::vector< std::string > & avec )

按分隔符拆分C字符串到vector

Parameters
abuff源字符串(C风格)
afg分隔符字符串
avec[out] 存储拆分结果的vector
Returns
成功拆分返回true,失败返回false

使用string_view进行高效查找,避免不必要的内存分配 最后一个子串即使没有后续分隔符也会被添加

Note
如果源字符串为空或分隔符无效,返回false

◆ splite() [2/2]

bool ngl::tools::splite ( int32_t aindex,
const std::vector< std::string > & avec,
std::vector< std::string > & adata )

从指定索引开始提取子vector

Parameters
aindex起始索引
avec源字符串vector
adata[out] 存储提取结果的vector
Returns
成功提取返回true,失败返回false

将avec从aindex位置到末尾的元素插入到adata末尾 adata原有内容保留

Note
aindex必须小于等于avec.size()

◆ sregex()

void ngl::tools::sregex ( const std::string & apattern,
const std::string & adata,
const std::function< void(std::string &)> & afun )

使用正则表达式查找所有匹配的子串

使用正则表达式分割字符串并对每个匹配执行回调。

Parameters
apattern正则表达式模式
adata要搜索的源数据
afun匹配到的子串的回调函数

遍历所有匹配项,对每个匹配调用回调函数

Parameters
apattern正则表达式模式
adata输入数据
afun匹配回调函数

◆ strlen()

std::size_t ngl::tools::strlen ( const char * astr)

安全的字符串长度计算

获取字符串长度

Parameters
astrC风格字符串指针
Returns
字符串长度,如果指针为nullptr返回0
Note
避免nullptr导致的未定义行为
Parameters
astr输入字符串
Returns
字符串长度

◆ test_filterword()

void ngl::tools::test_filterword ( )

敏感词过滤功能测试函数

敏感词过滤器测试函数

测试UTF-8验证、敏感词加载、过滤、匹配、角色名检查等功能

用于验证过滤器功能的测试函数

◆ test_mail()

void ngl::tools::test_mail ( const char * atitle,
const char * acontent,
const std::vector< std::pair< std::string, std::string > > & amailvec )

测试邮件发送功能

Parameters
atitle邮件标题
acontent邮件内容
amailvec收件人列表(邮箱,姓名),为空时使用默认收件人

◆ test_manage_curl()

void ngl::tools::test_manage_curl ( )

测试HTTP请求功能

演示HTTPS POST请求的配置和回调处理

◆ time2str()

std::string ngl::tools::time2str ( int autc,
const char * aformat )

将UTC时间戳转换为格式化字符串

Parameters
autcUTC时间戳
aformat时间格式字符串(如"%Y-%m-%d %H:%M:%S")
Returns
格式化后的时间字符串

使用tools::time::time2str进行转换

Parameters
autcUTC时间戳(秒)
aformat时间格式字符串,默认为 "%y/%m/%d %H:%M:%S"
Returns
格式化后的时间字符串
std::string time_str = ngl::tools::time2str(time(nullptr), "%Y-%m-%d %H:%M:%S");

◆ to_asscii()

bool ngl::tools::to_asscii ( const std::string & astr1,
std::string & astr2 )

将UTF-8字符串转换为多字节ASCII字符串

将字符串转换为ASCII编码。

Parameters
astr1源UTF-8字符串
astr2[out] 存储转换结果的ASCII字符串
Returns
成功转换返回true,失败返回false

先转换为wstring,再转换为ASCII

Note
非ASCII字符可能丢失或转换失败
Parameters
astr1输入字符串
astr2输出ASCII字符串
Returns
true 转换成功
false 转换失败

◆ to_bytes()

bool ngl::tools::to_bytes ( void * apso,
int alen,
void * apto,
int & aout_len )

十六进制字符串转字节数组

将十六进制字符串转换为二进制数据

将十六进制字符表示转换为二进制字节数组

Parameters
apso源十六进制字符串指针
alen源字符串长度(字符数,必须为偶数)
apto输出字节数组指针(长度至少为 alen/2)
aout_len[out] 输出的字节数
Return values
true转换成功
false参数错误或包含无效的十六进制字符
See also
to_hex
Parameters
apso源十六进制字符串指针
alen源字符串长度
apto目标缓冲区指针,用于存储二进制数据
aout_len输出参数,实际转换的字节数
Returns
转换成功返回true,格式错误返回false

◆ to_hex()

int ngl::tools::to_hex ( void * apso,
int alen,
void * apto )

字节数组转十六进制字符串

将二进制数据转换为十六进制字符串

将二进制字节数组转换为十六进制字符表示

Parameters
apso源字节数组指针
alen源字节数组长度(字节数)
apto输出缓冲区指针(长度至少为 alen*2)
Returns
输出的十六进制字符数(alen*2),参数错误时返回0
Note
输出为小写十六进制字符(0-9, a-f)
See also
to_bytes
Parameters
apso源数据指针
alen源数据长度(字节数)
apto目标缓冲区指针,用于存储十六进制字符串
Returns
写入的字符数,失败返回0

◆ to_utf8()

bool ngl::tools::to_utf8 ( const std::string & astr1,
std::string & astr2 )

将多字节ASCII字符串转换为UTF-8字符串

将字符串转换为UTF-8编码。

Parameters
astr1源ASCII字符串
astr2[out] 存储转换结果的UTF-8字符串
Returns
成功转换返回true,失败返回false

先转换为wstring,再转换为UTF-8

Parameters
astr1输入字符串
astr2输出UTF-8字符串
Returns
true 转换成功
false 转换失败

◆ transform_tolower()

void ngl::tools::transform_tolower ( std::string & adata)

将字符串转换为小写

将字符串转换为小写(原地修改)。

Parameters
adata[in/out] 要转换的字符串

使用std::ranges::transform进行原地转换

Parameters
adata输入输出字符串

◆ transform_toupper()

void ngl::tools::transform_toupper ( std::string & adata)

将字符串转换为大写

将字符串转换为大写(原地修改)。

Parameters
adata[in/out] 要转换的字符串

使用std::ranges::transform进行原地转换

Parameters
adata输入输出字符串

◆ transformlittle() [1/6]

int16_t ngl::tools::transformlittle ( parm< int16_t > & avalues)

将int16_t转换为小端字节序

将int16_t值转换为小端字节序。

Parameters
avalues[in/out] 要转换的值
Returns
转换后的值

如果当前系统是小端序,直接返回原值 否则交换字节顺序

Parameters
avalues要转换的值
Returns
转换后的值

◆ transformlittle() [2/6]

int32_t ngl::tools::transformlittle ( parm< int32_t > & avalues)

将int32_t转换为小端字节序

将int32_t值转换为小端字节序。

Parameters
avalues[in/out] 要转换的值
Returns
转换后的值
Parameters
avalues要转换的值
Returns
转换后的值

◆ transformlittle() [3/6]

int64_t ngl::tools::transformlittle ( parm< int64_t > & avalues)

将int64_t转换为小端字节序

将int64_t值转换为小端字节序。

Parameters
avalues[in/out] 要转换的值
Returns
转换后的值
Parameters
avalues要转换的值
Returns
转换后的值

◆ transformlittle() [4/6]

uint16_t ngl::tools::transformlittle ( parm< uint16_t > & avalues)

将uint16_t转换为小端字节序

将uint16_t值转换为小端字节序。

Parameters
avalues[in/out] 要转换的值
Returns
转换后的值
Parameters
avalues要转换的值
Returns
转换后的值

◆ transformlittle() [5/6]

uint32_t ngl::tools::transformlittle ( parm< uint32_t > & avalues)

将uint32_t转换为小端字节序

将uint32_t值转换为小端字节序。

Parameters
avalues[in/out] 要转换的值
Returns
转换后的值
Parameters
avalues要转换的值
Returns
转换后的值

◆ transformlittle() [6/6]

uint64_t ngl::tools::transformlittle ( parm< uint64_t > & avalues)

将uint64_t转换为小端字节序

将uint64_t值转换为小端字节序。

Parameters
avalues[in/out] 要转换的值
Returns
转换后的值
Parameters
avalues要转换的值
Returns
转换后的值

◆ trim_ascii_spaces()

std::string_view ngl::tools::trim_ascii_spaces ( std::string_view avalue)

去除字符串首尾的ASCII空格

去除字符串两端的ASCII空格

Parameters
avalue源字符串视图
Returns
去除空格后的字符串视图

使用string_view避免内存分配 只处理ASCII空格,不处理Unicode空格

Parameters
avalue输入字符串视图
Returns
去除空格后的字符串视图

◆ try_lexical_cast()

template<typename To, typename From>
bool ngl::tools::try_lexical_cast ( const From & afrom,
To & ato,
const std::source_location & asource = std::source_location::current() )

安全的lexical_cast实现,不抛出异常。

Template Parameters
To目标类型
From源类型
Parameters
afrom要转换的值
ato输出参数,存储转换后的值
asource源代码位置,默认为当前调用位置
Returns
转换成功返回true,否则返回false

◆ type_name()

template<typename T>
std::string & ngl::tools::type_name ( )

获取类型的字符串表示

Template Parameters
T目标类型
Returns
类型的字符串表示引用

使用编译器类型推导获取类型名称,并进行缓存优化。

std::string& name = ngl::tools::type_name<MyClass>();

◆ type_name_handle()

std::string & ngl::tools::type_name_handle ( std::string & aname)

处理C++类型名称,使其更易读

处理类型名称字符串

Parameters
aname[in/out] 要处理的类型名称字符串
Returns
处理后的字符串引用

在GCC/Clang下进行名称demangle,然后删除 "struct "、"class "、命名空间前缀和空格

Note
用于日志输出和调试信息
Parameters
aname类型名称字符串引用
Returns
处理后的类型名称引用

移除类型名称中的命名空间前缀等冗余信息。

◆ url_decode()

std::string ngl::tools::url_decode ( const std::string & astr)

URL解码字符串

URL解码。

Parameters
astr要解码的URL字符串
Returns
解码后的原始字符串

将XX格式转换回原始字符,+转换为空格

Note
处理无效的序列时保留原字符
Parameters
astr输入URL编码字符串
Returns
std::string 解码后的字符串

◆ url_encode()

std::string ngl::tools::url_encode ( const std::string & astr)

URL编码字符串

URL编码(百分号编码)。

Parameters
astr要编码的字符串
Returns
编码后的URL字符串

将非URL安全字符转换为XX格式 URL安全字符包括字母、数字和-_.~

Note
预分配3倍空间避免频繁重新分配
Parameters
astr输入字符串
Returns
std::string URL编码后的字符串

◆ utf82wasscii()

bool ngl::tools::utf82wasscii ( const std::string & astr,
std::wstring & awstr )

将UTF-8字符串转换为宽字符串(wstring)

UTF-8编码转换为宽字符。

Parameters
astr源UTF-8字符串
awstr[out] 存储转换结果的宽字符串
Returns
成功转换返回true,失败返回false

使用utf8cpp库进行解码,捕获所有异常

Note
如果UTF-8格式无效,返回false并清空目标字符串
Parameters
astr输入UTF-8字符串
awstr输出宽字符串
Returns
true 转换成功
false 转换失败

◆ utf8firstbyte()

int32_t ngl::tools::utf8firstbyte ( uint8_t afirst)

获取UTF-8编码第一个字节的字节数

获取UTF-8首字节对应的字符长度。

Parameters
afirstUTF-8编码的第一个字节
Returns
UTF-8字符占用的字节数(1-4),无效返回0

根据UTF-8编码规则,通过前导位判断字符长度

Note
用于UTF-8字符串的逐字符遍历
Parameters
afirstUTF-8编码的首字节
Returns
int32_t 该UTF-8字符占用的字节数(1-4)

◆ uuid_make()

bool ngl::tools::uuid_make ( std::string & astr)

生成UUID字符串

生成UUID字符串。

Parameters
astr[out] 存储生成的UUID字符串
Returns
成功生成返回true,失败返回false

生成格式为"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"的UUID Windows使用CoCreateGuid,其他平台使用uuid_generate

Note
生成的UUID是随机的,不基于时间或MAC地址
Parameters
astr输出参数,存储生成的UUID字符串
Returns
生成成功返回true,否则返回false

◆ varint_decode() [1/2]

bool ngl::tools::varint_decode ( varint_parm< int32_t > & aparm)

32位整数varint解码

从varint格式解码32位整数

将变长格式解码为32位整数

Parameters
aparm解码参数包,包含:
  • m_buf: 输入缓冲区
  • m_len: 缓冲区可用长度
  • m_bytes: [in/out] 已使用字节数
  • m_value: [out] 解码后的32位整数
Return values
true解码成功
false参数错误或数据格式错误
Note
如果sysconfig::varint()返回false,则直接复制原始字节
See also
varint_encode, varint_length
Parameters
aparm解码参数,包含输入缓冲区和输出值
Returns
解码成功返回true,数据格式错误返回false

◆ varint_decode() [2/2]

bool ngl::tools::varint_decode ( varint_parm< int64_t > & aparm)

64位整数varint解码

从varint格式解码64位整数

将变长格式解码为64位整数

Parameters
aparm解码参数包,包含:
  • m_buf: 输入缓冲区
  • m_len: 缓冲区可用长度
  • m_bytes: [in/out] 已使用字节数
  • m_value: [out] 解码后的64位整数
Return values
true解码成功
false参数错误或数据格式错误
Note
如果sysconfig::varint()返回false,则直接复制原始字节
See also
varint_encode, varint_length
Parameters
aparm解码参数,包含输入缓冲区和输出值
Returns
解码成功返回true,数据格式错误返回false

◆ varint_encode() [1/2]

bool ngl::tools::varint_encode ( varint_parm< int32_t > & aparm)

32位整数varint编码

编码32位整数为varint格式

将32位整数编码为变长格式

Parameters
aparm编码参数包,包含:
  • m_buf: 输出缓冲区
  • m_len: 缓冲区长度
  • m_value: 待编码的32位整数
  • m_bytes: [in/out] 已使用字节数
Return values
true编码成功
false参数错误或缓冲区不足
Note
如果sysconfig::varint()返回false,则直接复制原始字节
See also
varint_decode, varint_length
Parameters
aparm编码参数,包含待编码值和输出缓冲区
Returns
编码成功返回true,缓冲区不足返回false

◆ varint_encode() [2/2]

bool ngl::tools::varint_encode ( varint_parm< int64_t > & aparm)

64位整数varint编码

编码64位整数为varint格式

将64位整数编码为变长格式

Parameters
aparm编码参数包,包含:
  • m_buf: 输出缓冲区
  • m_len: 缓冲区长度
  • m_value: 待编码的64位整数
  • m_bytes: [in/out] 已使用字节数
Return values
true编码成功
false参数错误或缓冲区不足
Note
如果sysconfig::varint()返回false,则直接复制原始字节
See also
varint_decode, varint_length
Parameters
aparm编码参数,包含待编码值和输出缓冲区
Returns
编码成功返回true,缓冲区不足返回false

◆ varint_length() [1/2]

int ngl::tools::varint_length ( parm< int32_t > & avalues)

计算32位整数的varint编码长度

获取32位整数的varint编码长度

根据数值大小计算编码后的字节数

Parameters
avalues待计算的32位整数参数包
Returns
编码所需的字节数(1-5)
Note
如果sysconfig::varint()返回false,则固定返回sizeof(int32_t)
See also
varint_encode
Parameters
avalues包含待编码值的参数包
Returns
编码所需的字节数

◆ varint_length() [2/2]

int ngl::tools::varint_length ( parm< int64_t > & avalues)

计算64位整数的varint编码长度

获取64位整数的varint编码长度

根据数值大小计算编码后的字节数

Parameters
avalues待计算的64位整数参数包
Returns
编码所需的字节数(1-10)
Note
如果sysconfig::varint()返回false,则固定返回sizeof(int64_t)
See also
varint_encode
Parameters
avalues包含待编码值的参数包
Returns
编码所需的字节数

◆ wasscii2asscii()

bool ngl::tools::wasscii2asscii ( const std::wstring & awstr,
std::string & astr )

将宽字符串(wstring)转换为多字节ASCII字符串

宽字符(wchar_t)转换为ASCII字符串。

Parameters
awstr源宽字符串
astr[out] 存储转换结果的字符串
Returns
成功转换返回true,失败返回false

使用std::codecvt进行编码转换,支持本地化字符集

Note
如果源字符串为空,目标字符串会被清空
Parameters
awstr输入宽字符串
astr输出ASCII字符串
Returns
true 转换成功
false 转换失败(含非ASCII字符)

◆ wasscii2utf8()

bool ngl::tools::wasscii2utf8 ( const std::wstring & awstr,
std::string & astr )

将宽字符串(wstring)转换为UTF-8字符串

宽字符转换为UTF-8编码。

Parameters
awstr源宽字符串
astr[out] 存储转换结果的UTF-8字符串
Returns
始终返回true

使用utf8cpp库进行转换,预分配3倍空间避免重新分配

Note
宽字符被当作char32_t处理
Parameters
awstr输入宽字符串
astr输出UTF-8字符串
Returns
true 转换成功
false 转换失败

Variable Documentation

◆ m_splicing

template<typename T>
std::function<std::string(const T&)> ngl::tools::m_splicing
inline
Initial value:
= [](const T& adata)
{
}

◆ m_splicingmap

template<typename TKEY, typename TVAL>
std::function<std::string(const TKEY&, const TVAL&)> ngl::tools::m_splicingmap
inline
Initial value:
= [](const TKEY& akey, const TVAL& aval)
{
std::string lret = tools::lexical_cast<std::string>(akey);
lret += ':';
return lret;
}