命名审查与垃圾代码清理(纯重命名 / 死代码删除,无行为变更)

前提:加载完成后全部采样都已驻留内存,程序此后与源文件再无联系。
据此修正了一批会让人误以为"仍在读写文件"的命名:

- SampleFileAt → SampleSignalAt(取的是内存信号在给定时刻的采样值)。
- DataSet::AddPreparedFile → AddDataFile。
- PlotView::InvalidatePolylineCache → InvalidateDerivedCaches
  (它同时清空折线、边沿统计、中心平均值曲线、静态场景缓存与悬停引用)。
- PlotView::CursorColor(int which) → CursorColor()(两条光标同色,参数从未使用)。
- UiEllipsize(g,…) → UiEllipsize(…):纯测量不绘制,删掉被忽略的绘图上下文参数;
  同时删除与 UiMeasureTextWidth 完全重复的 UiTextWidth,调用点统一到 UiMeasureTextWidth。

清理残留参数((void)xxx;):
- TabConfig 的可见性/网格族(SetVisible / ToggleVisible / SetFileVisible / SetAllVisible /
  SoloSignal / SetMode / SyncLanes / FileHasVisible / FileAllVisible)去掉从未使用的
  const DataSet& 参数(仅 SyncToDataSet 真正需要数据层,保留)。
- PlotView::OnLButtonUp(int y)、OnMouseWheel(int delta, bool shift);PainterSignalHalo 去掉未用的 ref。
- BuildDataFile 中未使用的局部 rowCount。

删除无人调用的死函数:
  DataSet::Clear / AddFromTable;SignalColorCount;WideToUtf8 / StartsWith;
  PlotView::ViewMinTime / ViewMaxTime / EdgePanelRect / EdgePanelCloseRect /
  EdgeCenterPanelRect / ScaleLaneRange / BeginLaneValueEdit / LaneContentHeight;
  SignalPanel::NeedsScrollBar / IsFilterEditing / FilterText / ContentHeight;
  PopupMenu::EditingItemId;TabBar::IsDragging;TextEdit::PlaceCaret。

删除只写不读的死字段:CsvTable::sourceRowCount(与 rowCount 等义)与 skippedRowCount。

以 VERY_BIG_DATA.CSV 回归验证:加载与勾选、筛选框(含"无匹配的筛选信号")、
样式区线宽文案省略、选区放大(横向与纵向)、双光标读数与 Δt、右键菜单(Y 轴数值与
实验性功能子菜单)、合并/拆分网格、标签与信号重命名省略号,行为均与改动前一致;
make clean && make all 无任何警告。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-10-09 21:52:46 +08:00
1 parent f5028b1e18
commit 350538c634
21 files changed
+118 -456

No files matched your search

+1 -3
View File
@@ -23,9 +23,7 @@ namespace jdi
std::vector<std::vector<double>> columns; /**< 列优先数值矩阵:columns[列][行],缺失处为 NaN。 */
std::size_t rowCount = 0; /**< 有效数据行数。 */
wchar_t delimiter = L','; /**< 实际使用的分隔符。 */
std::size_t sourceRowCount = 0; /**< 文件中有效数据行数(不含空行与注释行)。 */
std::size_t skippedRowCount = 0; /**< 因格式异常被置为缺失值的行数。 */
unsigned long long fileBytes = 0; /**< 源文件字节数(用于按比例预留容量与进度显示)。 */
unsigned long long fileBytes = 0; /**< 源文件字节数(用于按比例预留容量)。 */
/**
* @brief 判断解析结果是否包含可用的表格数据。
+17 -37
View File
@@ -189,28 +189,13 @@ namespace jdi
class DataSet
{
public:
/**
* @brief 清空全部已加载文件。
*/
void Clear();
/**
* @brief 依据 CSV 解析结果追加一个数据文件。
* @param [IN] table CSV 解析结果。
* @param [IN] filePath 源文件路径。
* @param [OUT] error 失败原因描述(成功时清空)。
* @param [OUT] fileIndex 新文件下标,失败时为 -1。
* @return 追加成功返回 true。
*/
bool AddFromTable(const CsvTable& table, const std::wstring& filePath, std::wstring& error, int& fileIndex);
/**
* @brief 追加一个已构建好的数据文件(仅做一次移动,不拷贝采样数据)。
* @param [IN,OUT] file 数据文件(内部缓冲会被移走)。
* @param [OUT] fileIndex 新文件下标。
* @return 追加成功返回 true。
*/
bool AddPreparedFile(DataFile&& file, int& fileIndex);
bool AddDataFile(DataFile&& file, int& fileIndex);
/**
* @brief 在指定文件的指定信号**下方**插入一条新信号(派生信号)。
@@ -431,15 +416,19 @@ namespace jdi
};
/**
* @brief 计算某条信号在给定时刻的取值。
* @param [IN] file 信号所属文件。
* @brief 从内存中的信号采样点取某一时刻的取值。
*
* 加载完成后全部采样值已在内存中,本函数只查询内存数据,与源文件无关。
*
* @param [IN] file 信号所属的已加载数据分组(提供时间轴)。
* @param [IN] signal 目标信号。
* @param [IN] time 采样时刻。
* @param [IN] interpolate 是否在相邻采样点之间做线性插值。
* @param [OUT] value 输出采样值,缺失时为 NaN。
* @return 时间点落在数据范围内且取到有效值返回 true。
*/
bool SampleFileAt(const DataFile& file, const SignalData& signal, double time, bool interpolate, double& value);
bool SampleSignalAt(const DataFile& file, const SignalData& signal, double time, bool interpolate,
double& value);
/**
* @brief 计算 N 点滑动平均(窗口 = [i-N, i+N],边界按实际窗口长度)。
@@ -506,56 +495,49 @@ namespace jdi
/**
* @brief 设置指定信号的可见性,并同步网格划分。
* @param [IN] dataSet 数据集合。
* @param [IN] ref 信号引用。
* @param [IN] visible 目标可见状态。
*/
void SetVisible(const DataSet& dataSet, const SignalRef& ref, bool visible);
void SetVisible(const SignalRef& ref, bool visible);
/**
* @brief 切换指定信号的可见性,并同步网格划分。
* @param [IN] dataSet 数据集合。
* @param [IN] ref 信号引用。
*/
void ToggleVisible(const DataSet& dataSet, const SignalRef& ref);
void ToggleVisible(const SignalRef& ref);
/**
* @brief 设置某个文件全部信号的可见性,并同步网格划分。
* @param [IN] dataSet 数据集合。
* @param [IN] fileIndex 文件下标。
* @param [IN] visible 目标可见状态。
*/
void SetFileVisible(const DataSet& dataSet, int fileIndex, bool visible);
void SetFileVisible(int fileIndex, bool visible);
/**
* @brief 设置全部信号可见性,并同步网格划分。
* @param [IN] dataSet 数据集合。
* @param [IN] visible 目标可见状态。
*/
void SetAllVisible(const DataSet& dataSet, bool visible);
void SetAllVisible(bool visible);
/**
* @brief 仅显示指定信号,其余全部隐藏。
* @param [IN] dataSet 数据集合。
* @param [IN] ref 需要保持可见的信号。
*/
void SoloSignal(const DataSet& dataSet, const SignalRef& ref);
void SoloSignal(const SignalRef& ref);
/**
* @brief 判断某文件是否存在可见信号。
* @param [IN] dataSet 数据集合。
* @param [IN] fileIndex 文件下标。
* @return 存在可见信号返回 true。
*/
bool FileHasVisible(const DataSet& dataSet, int fileIndex) const;
bool FileHasVisible(int fileIndex) const;
/**
* @brief 判断某文件是否全部信号可见。
* @param [IN] dataSet 数据集合。
* @param [IN] fileIndex 文件下标。
* @return 全部可见且至少有一条信号返回 true。
*/
bool FileAllVisible(const DataSet& dataSet, int fileIndex) const;
bool FileAllVisible(int fileIndex) const;
/**
* @brief 判断是否存在任何可见信号。
@@ -577,16 +559,14 @@ namespace jdi
/**
* @brief 设置网格划分策略并同步网格。
* @param [IN] dataSet 数据集合。
* @param [IN] mode 目标策略。
*/
void SetMode(const DataSet& dataSet, LaneMode mode);
void SetMode(LaneMode mode);
/**
* @brief 依据当前可见性与策略重新生成网格划分。
* @param [IN] dataSet 数据集合。
*/
void SyncLanes(const DataSet& dataSet);
void SyncLanes();
/**
* @brief 获取网格集合(只读)。
+2 -12
View File
@@ -137,15 +137,6 @@ namespace jdi
void UiText(gd::Graphics& g, const std::wstring& text, HFONT font, const gd::RectF& rect, std::uint32_t argb,
TextAlign align = TextAlign::LEFT);
/**
* @brief 测量单行文本的像素宽度。
* @param [IN,OUT] g 绘图上下文。
* @param [IN] text 文本内容。
* @param [IN] font 字体句柄。
* @return 文本像素宽度。
*/
float UiTextWidth(gd::Graphics& g, const std::wstring& text, HFONT font);
/**
* @brief 测量单行文本的像素宽度(无需 GDI+ 上下文,可在布局阶段调用)。
* @param [IN] font 字体句柄。
@@ -193,14 +184,13 @@ namespace jdi
std::size_t UiEditOffsetAt(HFONT font, const std::wstring& text, float localX);
/**
* @brief 在超出可用宽度时对文本做尾部省略截断。
* @param [IN,OUT] g 绘图上下文。
* @brief 在超出可用宽度时对文本做尾部省略截断(不绘制任何内容)。
* @param [IN] text 原始文本。
* @param [IN] font 字体句柄。
* @param [IN] maxWidth 允许的最大像素宽度。
* @return 截断后的文本。
*/
std::wstring UiEllipsize(gd::Graphics& g, const std::wstring& text, HFONT font, float maxWidth);
std::wstring UiEllipsize(const std::wstring& text, HFONT font, float maxWidth);
/**
* @brief 处理输入框内的鼠标按下:命中则把插入符定位到最近的字符边界并开始拖拽框选。
-6
View File
@@ -183,12 +183,6 @@ namespace jdi
*/
bool IsEditing() const { return m_editIndex >= 0; }
/**
* @brief 获取当前正在编辑的菜单项命令标识。
* @return 命令标识,未编辑时返回 0。
*/
int EditingItemId() const;
/**
* @brief 判断坐标是否落在当前正在编辑的输入框内。
* @param [IN] x 客户区横坐标。
-7
View File
@@ -144,13 +144,6 @@ namespace jdi
*/
bool DeselectToEnd();
/**
* @brief 把插入符定位到指定偏移(单击输入框内时使用),并清除选区。
* @param [IN] offset 目标偏移(内部会夹到合法范围)。
* @return 光标或选区发生变化返回 true。
*/
bool PlaceCaret(std::size_t offset);
/**
* @brief 开始鼠标拖拽框选:把锚点与插入符都放在给定偏移。
* @param [IN] offset 起始偏移。
-6
View File
@@ -121,12 +121,6 @@ namespace jdi
*/
const std::uint32_t* SignalPalette(int& count);
/**
* @brief 获取波形默认配色数量。
* @return 配色数量。
*/
int SignalColorCount();
} // namespace jdi
#endif // __THEME_HPP__
-15
View File
@@ -18,13 +18,6 @@ namespace jdi
*/
std::wstring Utf8ToWide(const char* text, int length = -1);
/**
* @brief 将宽字符串(UTF-16LE)转换为 UTF-8 编码的字节序列。
* @param [IN] text 宽字符文本起始地址。
* @return 转换后的 UTF-8 字符串,输入非法时返回空字符串。
*/
std::string WideToUtf8(const wchar_t* text);
/**
* @brief 去除字符串首尾的空白字符(含制表、换行与不间断空格)。
* @param [IN] text 待处理文本。
@@ -46,14 +39,6 @@ namespace jdi
*/
std::wstring ToLowerAscii(const std::wstring& text);
/**
* @brief 判断字符串是否以指定前缀开头。
* @param [IN] text 被检索文本。
* @param [IN] prefix 前缀文本。
* @return 以该前缀开头返回 true,否则返回 false。
*/
bool StartsWith(const std::wstring& text, const std::wstring& prefix);
/**
* @brief 判断字符串是否包含指定子串(ASCII 大小写不敏感)。
* @param [IN] text 被检索文本。
-6
View File
@@ -303,11 +303,6 @@ namespace jdi
return true;
}
if (state.fields.size() != table.headers.size())
{
++table.skippedRowCount;
}
bool rowHasValue = false;
for (std::size_t column = 0; column < state.rowValues.size(); ++column)
{
@@ -332,7 +327,6 @@ namespace jdi
table.columns[column].push_back(state.rowValues[column]);
}
++table.rowCount;
++table.sourceRowCount;
return true;
}
}
+19 -43
View File
@@ -464,7 +464,6 @@ namespace jdi
}
const std::size_t columnCount = table.headers.size();
const std::size_t rowCount = table.rowCount;
if (table.columns.size() < columnCount)
{
error = L"数据表列结构不完整。";
@@ -599,18 +598,12 @@ namespace jdi
}
file.minTime = tMin;
file.maxTime = tMax;
(void)rowCount;
return true;
}
// ============================ DataSet ============================
void DataSet::Clear()
{
m_files.clear();
}
bool DataSet::AddPreparedFile(DataFile&& file, int& fileIndex)
bool DataSet::AddDataFile(DataFile&& file, int& fileIndex)
{
fileIndex = -1;
if (file.signals.empty())
@@ -622,21 +615,6 @@ namespace jdi
return true;
}
bool DataSet::AddFromTable(const CsvTable& table, const std::wstring& filePath, std::wstring& error,
int& fileIndex)
{
fileIndex = -1;
// 兼容入口:复制一份表格后走与后台加载完全一致的构建流程。
CsvTable local = table;
DataFile file;
if (!BuildDataFile(std::move(local), filePath, SignalCount(), file, error))
{
return false;
}
return AddPreparedFile(std::move(file), fileIndex);
}
bool DataSet::InsertDerivedSignal(int fileIndex, int afterSignalIndex, SignalData&& signal,
int& newSignalIndex)
{
@@ -992,7 +970,8 @@ namespace jdi
return best;
}
bool SampleFileAt(const DataFile& file, const SignalData& signal, double time, bool interpolate, double& value)
bool SampleSignalAt(const DataFile& file, const SignalData& signal, double time, bool interpolate,
double& value)
{
value = kMissing;
@@ -1093,7 +1072,7 @@ namespace jdi
[](const Lane& lane) { return lane.signals.empty(); }),
m_lanes.end());
SyncLanes(dataSet);
SyncLanes();
}
void TabConfig::RemapAfterFileRemoval(int fileIndex)
@@ -1147,7 +1126,7 @@ namespace jdi
return fileVisible[static_cast<std::size_t>(ref.signalIndex)];
}
void TabConfig::SetVisible(const DataSet& dataSet, const SignalRef& ref, bool visible)
void TabConfig::SetVisible(const SignalRef& ref, bool visible)
{
if (ref.fileIndex < 0 || static_cast<std::size_t>(ref.fileIndex) >= m_visible.size())
{
@@ -1171,15 +1150,15 @@ namespace jdi
m_laneMode = LaneMode::CUSTOM;
}
SyncLanes(dataSet);
SyncLanes();
}
void TabConfig::ToggleVisible(const DataSet& dataSet, const SignalRef& ref)
void TabConfig::ToggleVisible(const SignalRef& ref)
{
SetVisible(dataSet, ref, !IsVisible(ref));
SetVisible(ref, !IsVisible(ref));
}
void TabConfig::SetFileVisible(const DataSet& dataSet, int fileIndex, bool visible)
void TabConfig::SetFileVisible(int fileIndex, bool visible)
{
if (fileIndex < 0 || static_cast<std::size_t>(fileIndex) >= m_visible.size())
{
@@ -1187,30 +1166,29 @@ namespace jdi
}
std::vector<bool>& fileVisible = m_visible[static_cast<std::size_t>(fileIndex)];
std::fill(fileVisible.begin(), fileVisible.end(), visible);
SyncLanes(dataSet);
SyncLanes();
}
void TabConfig::SetAllVisible(const DataSet& dataSet, bool visible)
void TabConfig::SetAllVisible(bool visible)
{
for (std::vector<bool>& fileVisible : m_visible)
{
std::fill(fileVisible.begin(), fileVisible.end(), visible);
}
SyncLanes(dataSet);
SyncLanes();
}
void TabConfig::SoloSignal(const DataSet& dataSet, const SignalRef& ref)
void TabConfig::SoloSignal(const SignalRef& ref)
{
for (std::vector<bool>& fileVisible : m_visible)
{
std::fill(fileVisible.begin(), fileVisible.end(), false);
}
SetVisible(dataSet, ref, true);
SetVisible(ref, true);
}
bool TabConfig::FileHasVisible(const DataSet& dataSet, int fileIndex) const
bool TabConfig::FileHasVisible(int fileIndex) const
{
(void)dataSet;
if (fileIndex < 0 || static_cast<std::size_t>(fileIndex) >= m_visible.size())
{
return false;
@@ -1219,9 +1197,8 @@ namespace jdi
return std::find(fileVisible.begin(), fileVisible.end(), true) != fileVisible.end();
}
bool TabConfig::FileAllVisible(const DataSet& dataSet, int fileIndex) const
bool TabConfig::FileAllVisible(int fileIndex) const
{
(void)dataSet;
if (fileIndex < 0 || static_cast<std::size_t>(fileIndex) >= m_visible.size())
{
return false;
@@ -1256,15 +1233,14 @@ namespace jdi
return count;
}
void TabConfig::SetMode(const DataSet& dataSet, LaneMode mode)
void TabConfig::SetMode(LaneMode mode)
{
m_laneMode = mode;
SyncLanes(dataSet);
SyncLanes();
}
void TabConfig::SyncLanes(const DataSet& dataSet)
void TabConfig::SyncLanes()
{
(void)dataSet;
RebuildLanes(m_visible, m_lanes, m_laneMode);
}
+4 -14
View File
@@ -249,16 +249,6 @@ namespace jdi
g.ReleaseHDC(hdc);
}
float UiTextWidth(gd::Graphics& g, const std::wstring& text, HFONT font)
{
// 直接复用 UiMeasureTextWidth:后者用 GetDC(nullptr) 取度量 HDC,
// 不会触发 **Graphics::GetHDC() 的 GDI+ 批次刷新**(实测每次约 5µs)。
// UiEllipsize 会反复调用本函数(逐字符回退时每步一次),
// 若走 GetHDC 路线,一个长名称就要刷新十几次,是拖拽掉帧的隐性来源之一。
(void)g;
return UiMeasureTextWidth(font, text);
}
float UiMeasureTextWidth(HFONT font, const std::wstring& text)
{
if (text.empty() || font == nullptr)
@@ -281,19 +271,19 @@ namespace jdi
return static_cast<float>(size.cx);
}
std::wstring UiEllipsize(gd::Graphics& g, const std::wstring& text, HFONT font, float maxWidth)
std::wstring UiEllipsize(const std::wstring& text, HFONT font, float maxWidth)
{
if (text.empty() || font == nullptr || maxWidth <= 0.0f)
{
return std::wstring();
}
if (UiTextWidth(g, text, font) <= maxWidth)
if (UiMeasureTextWidth(font, text) <= maxWidth)
{
return text;
}
const std::wstring ellipsis = L"…";
const float ellipsisWidth = UiTextWidth(g, ellipsis, font);
const float ellipsisWidth = UiMeasureTextWidth(font, ellipsis);
if (ellipsisWidth > maxWidth)
{
return std::wstring();
@@ -303,7 +293,7 @@ namespace jdi
while (!result.empty())
{
result.pop_back();
if (UiTextWidth(g, result, font) + ellipsisWidth <= maxWidth)
if (UiMeasureTextWidth(font, result) + ellipsisWidth <= maxWidth)
{
return result + ellipsis;
}
+6 -15
View File
@@ -318,15 +318,6 @@ namespace jdi
rect.Y + (rect.Height - height) * 0.5f, width, height);
}
int PopupMenu::EditingItemId() const
{
if (m_editIndex < 0 || m_editIndex >= static_cast<int>(m_items.size()))
{
return 0;
}
return m_items[static_cast<std::size_t>(m_editIndex)].id;
}
bool PopupMenu::IsOnEditField(int x, int y) const
{
if (m_editIndex < 0)
@@ -1050,7 +1041,7 @@ namespace jdi
const float labelLeft = rect.X + kItemPad * m_scale;
const gd::RectF fieldRect = EditFieldRect(static_cast<int>(index));
const float labelWidth = std::max(8.0f, fieldRect.X - labelLeft - kEditFieldGap * m_scale);
UiText(g, UiEllipsize(g, item.label, m_fonts->uiSmall, labelWidth), m_fonts->uiSmall,
UiText(g, UiEllipsize(item.label, m_fonts->uiSmall, labelWidth), m_fonts->uiSmall,
gd::RectF(labelLeft, rect.Y, labelWidth, rect.Height), labelColor, TextAlign::LEFT);
if (static_cast<int>(index) == m_editIndex)
@@ -1062,7 +1053,7 @@ namespace jdi
UiFillRoundRect(g, fieldRect, 3.0f * m_scale, m_theme->pressed);
UiDrawRoundRect(g, fieldRect, 3.0f * m_scale, m_theme->border, 1.0f);
const std::wstring text =
UiEllipsize(g, item.value, m_fonts->uiSmall, fieldRect.Width - 12.0f * m_scale);
UiEllipsize(item.value, m_fonts->uiSmall, fieldRect.Width - 12.0f * m_scale);
UiText(g, text, m_fonts->uiSmall,
gd::RectF(fieldRect.X + 6.0f * m_scale, fieldRect.Y,
std::max(8.0f, fieldRect.Width - 12.0f * m_scale), fieldRect.Height),
@@ -1146,7 +1137,7 @@ namespace jdi
const float textLeft = rect.X + kItemPad * m_scale;
const float textWidth =
rect.Width - 2.0f * kItemPad * m_scale - kMarkerColumn * m_scale - kMarkerGap * m_scale;
UiText(g, UiEllipsize(g, item.label, m_fonts->uiSmall, textWidth), m_fonts->uiSmall,
UiText(g, UiEllipsize(item.label, m_fonts->uiSmall, textWidth), m_fonts->uiSmall,
gd::RectF(textLeft, rect.Y, std::max(8.0f, textWidth), rect.Height), textColor,
TextAlign::LEFT);
}
@@ -1206,12 +1197,12 @@ namespace jdi
const float labelLeft = rect.X + kItemPad * m_scale;
const gd::RectF fieldRect = EditFieldRect(static_cast<int>(index));
const float labelWidth = std::max(8.0f, fieldRect.X - labelLeft - kEditFieldGap * m_scale);
UiText(g, UiEllipsize(g, item.label, m_fonts->uiSmall, labelWidth), m_fonts->uiSmall,
UiText(g, UiEllipsize(item.label, m_fonts->uiSmall, labelWidth), m_fonts->uiSmall,
gd::RectF(labelLeft, rect.Y, labelWidth, rect.Height), labelColor, TextAlign::LEFT);
UiFillRoundRect(g, fieldRect, 3.0f * m_scale, m_theme->pressed);
UiDrawRoundRect(g, fieldRect, 3.0f * m_scale, m_theme->border, 1.0f);
const std::wstring text =
UiEllipsize(g, item.value, m_fonts->uiSmall, fieldRect.Width - 12.0f * m_scale);
UiEllipsize(item.value, m_fonts->uiSmall, fieldRect.Width - 12.0f * m_scale);
UiText(g, text, m_fonts->uiSmall,
gd::RectF(fieldRect.X + 6.0f * m_scale, fieldRect.Y,
std::max(8.0f, fieldRect.Width - 12.0f * m_scale), fieldRect.Height),
@@ -1258,7 +1249,7 @@ namespace jdi
const float textLeft = rect.X + kItemPad * m_scale;
const float textWidth =
rect.Width - 2.0f * kItemPad * m_scale - kMarkerColumn * m_scale - kMarkerGap * m_scale;
UiText(g, UiEllipsize(g, item.label, m_fonts->uiSmall, textWidth), m_fonts->uiSmall,
UiText(g, UiEllipsize(item.label, m_fonts->uiSmall, textWidth), m_fonts->uiSmall,
gd::RectF(textLeft, rect.Y, std::max(8.0f, textWidth), rect.Height), textColor,
TextAlign::LEFT);
}
-15
View File
@@ -322,21 +322,6 @@ namespace jdi
return changed;
}
bool TextEdit::PlaceCaret(std::size_t offset)
{
if (!m_active)
{
return false;
}
const std::size_t target = ClampOffset(offset);
const bool changed = HasSelection() || (m_caret != target);
m_caret = target;
m_anchor = target;
m_fresh = false;
return changed;
}
void TextEdit::BeginDrag(std::size_t offset)
{
if (!m_active)
-5
View File
@@ -80,9 +80,4 @@ namespace jdi
return kSignalPalette;
}
int SignalColorCount()
{
return static_cast<int>(sizeof(kSignalPalette) / sizeof(kSignalPalette[0]));
}
} // namespace jdi
-33
View File
@@ -50,30 +50,6 @@ namespace jdi
return result;
}
std::string WideToUtf8(const wchar_t* text)
{
if (text == nullptr)
{
return std::string();
}
int wideCount = static_cast<int>(std::wcslen(text));
if (wideCount <= 0)
{
return std::string();
}
int byteCount = WideCharToMultiByte(CP_UTF8, 0, text, wideCount, nullptr, 0, nullptr, nullptr);
if (byteCount <= 0)
{
return std::string();
}
std::string result(static_cast<size_t>(byteCount), '\0');
WideCharToMultiByte(CP_UTF8, 0, text, wideCount, &result[0], byteCount, nullptr, nullptr);
return result;
}
std::wstring Trim(const std::wstring& text)
{
size_t begin = 0;
@@ -117,15 +93,6 @@ namespace jdi
return result;
}
bool StartsWith(const std::wstring& text, const std::wstring& prefix)
{
if (prefix.size() > text.size())
{
return false;
}
return text.compare(0, prefix.size(), prefix) == 0;
}
bool ContainsInsensitive(const std::wstring& text, const std::wstring& needle)
{
if (needle.empty())