diff --git a/.clang-tidy b/.clang-tidy index 723927b..2e37cac 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1 +1,3 @@ -Checks: '-*,clang-analyzer-*,-clang-analyzer-cplusplus*' +Checks: 'performance-*,modernize-*,readability-*,-readability-identifier-length' +CheckOptions: + UnusedIncludes: Strict diff --git a/.clangd b/.clangd index aea4fe2..4acf8b4 100644 --- a/.clangd +++ b/.clangd @@ -2,3 +2,8 @@ CompileFlags: Add: - '-std=c++17' - '-Iinclude' +Diagnostics: + UnusedIncludes: Strict + ClangTidy: + Add: [performance-*, modernize-*, readability-*] + Remove: [readability-identifier-length] diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index d962713..71b101b 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -13,7 +13,7 @@ "name": "Win32", "includePath": ["${workspaceFolder}/**", "${workspaceFolder}/include"], "defines": [], - "compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.40.33617/bin/Hostx64/x64/cl.exe", + "compilerPath": "${env:VCINSTALLDIR}/bin/Hostx64/x64/cl.exe", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-msvc-x64" diff --git a/compile_flags.txt b/compile_flags.txt new file mode 100644 index 0000000..e69de29 diff --git a/include/RhythmGameUtilities/Audio.hpp b/include/RhythmGameUtilities/Audio.hpp index e1186ed..a5ee826 100644 --- a/include/RhythmGameUtilities/Audio.hpp +++ b/include/RhythmGameUtilities/Audio.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #ifdef _WIN32 @@ -23,10 +24,10 @@ extern "C" * @public */ - PACKAGE_API int **ConvertSamplesToWaveform(float *samples, int size, + PACKAGE_API int **ConvertSamplesToWaveform(const float *samples, int size, int width, int height) { - auto waveform = new int *[width]; + auto *waveform = new int *[width]; auto step = floor(size / width); auto amp = height / 2; @@ -35,24 +36,17 @@ extern "C" { waveform[x] = new int[height]; - auto min = 1.0f; - auto max = -1.0f; + auto min = 1.0F; + auto max = -1.0F; for (auto j = 0; j < step; j += 1) { - auto index = static_cast(x * step + j); + auto index = static_cast((x * step) + j); auto datum = samples[index]; - if (datum < min) - { - min = datum; - } - - if (datum > max) - { - max = datum; - } + min = std::min(datum, min); + max = std::max(datum, max); } auto minY = static_cast((1 + min) * amp); diff --git a/include/RhythmGameUtilities/Common.hpp b/include/RhythmGameUtilities/Common.hpp index 73d5eee..6d810a3 100644 --- a/include/RhythmGameUtilities/Common.hpp +++ b/include/RhythmGameUtilities/Common.hpp @@ -26,7 +26,7 @@ extern "C" PACKAGE_API float Lerp(float a, float b, float t) { - return (1 - t) * a + b * t; + return ((1 - t) * a) + (b * t); } /** @@ -40,7 +40,7 @@ extern "C" PACKAGE_API float InverseLerp(float a, float b, float v) { - return std::clamp(((v - a) / (b - a)), 0.0f, 1.0f); + return std::clamp(((v - a) / (b - a)), 0.0F, 1.0F); } } @@ -82,7 +82,7 @@ inline std::vector Split(const char *contents, } inline std::vector FindAllMatches(const char *contents, - std::regex pattern) + const std::regex &pattern) { auto currentMatch = std::cregex_iterator(contents, contents + strlen(contents), pattern); @@ -103,14 +103,14 @@ inline std::vector FindAllMatches(const char *contents, } inline std::vector FindMatchGroups(const char *contents, - std::regex pattern) + const std::regex &pattern) { auto currentMatch = std::cregex_iterator(contents, contents + strlen(contents), pattern); auto matches = std::vector(); - auto match = *currentMatch; + const auto &match = *currentMatch; for (auto i = 0; i < match.size(); i += 1) { diff --git a/include/RhythmGameUtilities/Enums/Difficulty.h b/include/RhythmGameUtilities/Enums/Difficulty.hpp similarity index 99% rename from include/RhythmGameUtilities/Enums/Difficulty.h rename to include/RhythmGameUtilities/Enums/Difficulty.hpp index 257b295..2f041a2 100644 --- a/include/RhythmGameUtilities/Enums/Difficulty.h +++ b/include/RhythmGameUtilities/Enums/Difficulty.hpp @@ -7,7 +7,6 @@ namespace RhythmGameUtilities typedef enum Difficulty { - // Easy Difficulty Easy, @@ -19,7 +18,6 @@ typedef enum Difficulty // Expert Difficulty Expert - } DifficultyType; inline std::string ToString(Difficulty difficulty) diff --git a/include/RhythmGameUtilities/Enums/NamedSection.h b/include/RhythmGameUtilities/Enums/NamedSection.hpp similarity index 100% rename from include/RhythmGameUtilities/Enums/NamedSection.h rename to include/RhythmGameUtilities/Enums/NamedSection.hpp diff --git a/include/RhythmGameUtilities/Enums/TypeCode.h b/include/RhythmGameUtilities/Enums/TypeCode.hpp similarity index 99% rename from include/RhythmGameUtilities/Enums/TypeCode.h rename to include/RhythmGameUtilities/Enums/TypeCode.hpp index 304b370..0b805c4 100644 --- a/include/RhythmGameUtilities/Enums/TypeCode.h +++ b/include/RhythmGameUtilities/Enums/TypeCode.hpp @@ -7,7 +7,6 @@ namespace RhythmGameUtilities typedef enum TypeCode { - /// BPM Marker BPM_Marker, @@ -19,7 +18,6 @@ typedef enum TypeCode /// Event Marker EventMarker - } TypeCodeType; inline std::string ToString(TypeCode typeCode) diff --git a/include/RhythmGameUtilities/File.hpp b/include/RhythmGameUtilities/File.hpp index 5a5f6cc..f25f566 100644 --- a/include/RhythmGameUtilities/File.hpp +++ b/include/RhythmGameUtilities/File.hpp @@ -22,7 +22,7 @@ inline std::vector ReadBytesFromFile(const char *path) if (!file.is_open()) { - std::cerr << "Failed to open " << path << "." << std::endl; + std::cerr << "Failed to open " << path << ".\n"; } auto fileSize = file.tellg(); @@ -49,13 +49,13 @@ inline std::string ReadStringFromFile(const char *path) if (!file) { - std::cerr << "Failed to open " << path << "." << std::endl; + std::cerr << "Failed to open " << path << ".\n"; return ""; } - return std::string((std::istreambuf_iterator(file)), - std::istreambuf_iterator()); + return {(std::istreambuf_iterator(file)), + std::istreambuf_iterator()}; } } // namespace RhythmGameUtilities diff --git a/include/RhythmGameUtilities/Parsers.hpp b/include/RhythmGameUtilities/Parsers.hpp index d9d6d1f..8f5520f 100644 --- a/include/RhythmGameUtilities/Parsers.hpp +++ b/include/RhythmGameUtilities/Parsers.hpp @@ -5,13 +5,11 @@ #include #include -#include "Enums/Difficulty.h" -#include "Enums/NamedSection.h" -#include "Enums/TypeCode.h" +#include "Enums/TypeCode.hpp" -#include "Structs/Note.h" -#include "Structs/Tempo.h" -#include "Structs/TimeSignature.h" +#include "Structs/Note.hpp" +#include "Structs/Tempo.hpp" +#include "Structs/TimeSignature.hpp" #include "Common.hpp" @@ -32,12 +30,12 @@ typedef struct int lineCount; } ChartSectionInternal; -std::regex CHART_SECTION_PATTERN("\\[([a-z]+)\\]\\s*\\{([^\\}]+)\\}", +std::regex CHART_SECTION_PATTERN(R"(\[([a-z]+)\]\s*\{([^\}]+)\})", std::regex_constants::icase); -std::regex CHART_SECTION_LINE_PATTERN("([^=]+)\\s*=([^\\r\\n]+)"); +std::regex CHART_SECTION_LINE_PATTERN(R"(([^=]+)\s*=([^\r\n]+))"); -std::regex JSON_VALUE_PATTERN("(\"[^\"]+\"|\\S+)"); +std::regex JSON_VALUE_PATTERN(R"(("[^"]+"|\S+))"); inline std::map>>> @@ -78,7 +76,7 @@ ParseSectionsFromChart(const char *contents) std::regex_replace(values[k], std::regex("^\"|\"$"), ""); } - items.push_back(std::make_pair(key, values)); + items.emplace_back(key, values); } sections.insert({parts[1].c_str(), items}); diff --git a/include/RhythmGameUtilities/ParsersInternal.hpp b/include/RhythmGameUtilities/ParsersInternal.hpp index 24580ad..580c9d4 100644 --- a/include/RhythmGameUtilities/ParsersInternal.hpp +++ b/include/RhythmGameUtilities/ParsersInternal.hpp @@ -22,33 +22,33 @@ extern "C" *outSize = internalSections.size(); - auto sections = (ChartSectionInternal *)malloc( + auto *sections = (ChartSectionInternal *)malloc( internalSections.size() * sizeof(ChartSectionInternal)); int i = 0; - for (auto section = internalSections.begin(); - section != internalSections.end(); section++) + for (auto &internalSection : internalSections) { - auto nameLength = section->first.size() + 1; + auto nameLength = internalSection.first.size() + 1; sections[i].name = (char *)malloc(nameLength); - strncpy(sections[i].name, section->first.c_str(), nameLength - 1); + strncpy(sections[i].name, internalSection.first.c_str(), + nameLength - 1); sections[i].name[nameLength - 1] = '\0'; sections[i].lines = (KeyValuePairInternal *)malloc( - section->second.size() * sizeof(KeyValuePairInternal)); + internalSection.second.size() * sizeof(KeyValuePairInternal)); - sections[i].lineCount = section->second.size(); + sections[i].lineCount = internalSection.second.size(); - for (auto j = 0; j < section->second.size(); j += 1) + for (auto j = 0; j < internalSection.second.size(); j += 1) { - auto keyLength = section->second[j].first.size() + 1; + auto keyLength = internalSection.second[j].first.size() + 1; sections[i].lines[j].key = (char *)malloc(keyLength); strncpy(sections[i].lines[j].key, - section->second[j].first.c_str(), keyLength - 1); + internalSection.second[j].first.c_str(), keyLength - 1); sections[i].lines[j].key[keyLength - 1] = '\0'; - auto values = section->second[j].second; + auto values = internalSection.second[j].second; for (auto k = 0; k < values.size(); k += 1) { diff --git a/include/RhythmGameUtilities/Structs/BeatBar.h b/include/RhythmGameUtilities/Structs/BeatBar.hpp similarity index 99% rename from include/RhythmGameUtilities/Structs/BeatBar.h rename to include/RhythmGameUtilities/Structs/BeatBar.hpp index 82249ad..365d4af 100644 --- a/include/RhythmGameUtilities/Structs/BeatBar.h +++ b/include/RhythmGameUtilities/Structs/BeatBar.hpp @@ -5,7 +5,6 @@ namespace RhythmGameUtilities struct BeatBar { - int Position; int BPM; diff --git a/include/RhythmGameUtilities/Structs/Note.h b/include/RhythmGameUtilities/Structs/Note.hpp similarity index 99% rename from include/RhythmGameUtilities/Structs/Note.h rename to include/RhythmGameUtilities/Structs/Note.hpp index bbb199a..91b32ac 100644 --- a/include/RhythmGameUtilities/Structs/Note.h +++ b/include/RhythmGameUtilities/Structs/Note.hpp @@ -5,7 +5,6 @@ namespace RhythmGameUtilities struct Note { - int Position; int HandPosition; diff --git a/include/RhythmGameUtilities/Structs/Tempo.h b/include/RhythmGameUtilities/Structs/Tempo.hpp similarity index 100% rename from include/RhythmGameUtilities/Structs/Tempo.h rename to include/RhythmGameUtilities/Structs/Tempo.hpp diff --git a/include/RhythmGameUtilities/Structs/TimeSignature.h b/include/RhythmGameUtilities/Structs/TimeSignature.hpp similarity index 100% rename from include/RhythmGameUtilities/Structs/TimeSignature.h rename to include/RhythmGameUtilities/Structs/TimeSignature.hpp diff --git a/include/RhythmGameUtilities/Structs/TrackEvent.h b/include/RhythmGameUtilities/Structs/TrackEvent.hpp similarity index 92% rename from include/RhythmGameUtilities/Structs/TrackEvent.h rename to include/RhythmGameUtilities/Structs/TrackEvent.hpp index 7dda66e..06cfc88 100644 --- a/include/RhythmGameUtilities/Structs/TrackEvent.h +++ b/include/RhythmGameUtilities/Structs/TrackEvent.hpp @@ -1,13 +1,13 @@ #pragma once #include +#include namespace RhythmGameUtilities { struct TrackEvent { - int Position; std::string TypeCode; diff --git a/include/RhythmGameUtilities/Utilities.hpp b/include/RhythmGameUtilities/Utilities.hpp index fa8ecfb..ab3a456 100644 --- a/include/RhythmGameUtilities/Utilities.hpp +++ b/include/RhythmGameUtilities/Utilities.hpp @@ -6,17 +6,17 @@ #include #include -#include "Structs/BeatBar.h" -#include "Structs/Note.h" -#include "Structs/Tempo.h" -#include "Structs/TimeSignature.h" +#include "Structs/BeatBar.hpp" +#include "Structs/Note.hpp" +#include "Structs/Tempo.hpp" +#include "Structs/TimeSignature.hpp" #include "Common.hpp" namespace RhythmGameUtilities { -const float SECONDS_PER_MINUTE = 60.0f; +const float SECONDS_PER_MINUTE = 60.0F; /** * Convert seconds to ticks. @@ -95,7 +95,7 @@ ConvertSecondsToTicks(float seconds, int resolution, */ inline std::vector> -GenerateAdjacentKeyPairs(std::map keyValuePairs) +GenerateAdjacentKeyPairs(const std::map &keyValuePairs) { auto adjacentKeyPairs = std::vector>(); @@ -110,16 +110,15 @@ GenerateAdjacentKeyPairs(std::map keyValuePairs) for (auto i = 0; i < sortedKeys.size() - 1; i += 1) { - adjacentKeyPairs.push_back( - std::make_tuple(sortedKeys[i], sortedKeys[i + 1])); + adjacentKeyPairs.emplace_back(sortedKeys[i], sortedKeys[i + 1]); } return adjacentKeyPairs; } -inline std::vector CalculateBeatBars(std::vector tempoChanges, - int resolution, int ts, - bool includeHalfNotes) +inline std::vector +CalculateBeatBars(const std::vector &tempoChanges, int resolution, + int ts, bool includeHalfNotes) { std::vector beatBars; @@ -146,7 +145,7 @@ inline std::vector CalculateBeatBars(std::vector tempoChanges, if (includeHalfNotes && tick != endTick) { - beatBars.push_back({tick + resolution / 2, bpm}); + beatBars.push_back({tick + (resolution / 2), bpm}); } } } @@ -205,7 +204,7 @@ inline float ConvertTickToPosition(int tick, int resolution) * @public */ -inline bool IsOnTheBeat(int bpm, float currentTime, float delta = 0.05f) +inline bool IsOnTheBeat(int bpm, float currentTime, float delta = 0.05F) { auto beatInterval = SECONDS_PER_MINUTE / static_cast(bpm); diff --git a/include/RhythmGameUtilities/UtilitiesInternal.hpp b/include/RhythmGameUtilities/UtilitiesInternal.hpp index 85d15d4..6c2e5f7 100644 --- a/include/RhythmGameUtilities/UtilitiesInternal.hpp +++ b/include/RhythmGameUtilities/UtilitiesInternal.hpp @@ -55,7 +55,7 @@ extern "C" *outSize = internalBeatBars.size(); - auto beatBars = + auto *beatBars = (BeatBar *)malloc(internalBeatBars.size() * sizeof(BeatBar)); for (auto i = 0; i < internalBeatBars.size(); i += 1) @@ -72,7 +72,7 @@ extern "C" } PACKAGE_API bool IsOnTheBeatInternal(int bpm, float currentTime, - float delta = 0.05f) + float delta = 0.05F) { return IsOnTheBeat(bpm, currentTime, delta); } diff --git a/tests/RhythmGameUtilities/Common.cpp b/tests/RhythmGameUtilities/Common.cpp index 216e920..a5c4573 100644 --- a/tests/RhythmGameUtilities/Common.cpp +++ b/tests/RhythmGameUtilities/Common.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "RhythmGameUtilities/Common.hpp" diff --git a/tests/RhythmGameUtilities/Enum.cpp b/tests/RhythmGameUtilities/Enum.cpp index 294741a..5be8433 100644 --- a/tests/RhythmGameUtilities/Enum.cpp +++ b/tests/RhythmGameUtilities/Enum.cpp @@ -1,9 +1,9 @@ #include #include -#include "RhythmGameUtilities/Enums/Difficulty.h" -#include "RhythmGameUtilities/Enums/NamedSection.h" -#include "RhythmGameUtilities/Enums/TypeCode.h" +#include "RhythmGameUtilities/Enums/Difficulty.hpp" +#include "RhythmGameUtilities/Enums/NamedSection.hpp" +#include "RhythmGameUtilities/Enums/TypeCode.hpp" using namespace RhythmGameUtilities; diff --git a/tests/RhythmGameUtilities/Parsers.cpp b/tests/RhythmGameUtilities/Parsers.cpp index 42360d2..e0d7ea1 100644 --- a/tests/RhythmGameUtilities/Parsers.cpp +++ b/tests/RhythmGameUtilities/Parsers.cpp @@ -2,6 +2,8 @@ #include #include +#include "RhythmGameUtilities/Enums/Difficulty.hpp" +#include "RhythmGameUtilities/Enums/NamedSection.hpp" #include "RhythmGameUtilities/Parsers.hpp" using namespace RhythmGameUtilities; diff --git a/tests/RhythmGameUtilities/ParsersInternal.cpp b/tests/RhythmGameUtilities/ParsersInternal.cpp index 55dbcdd..ae6f140 100644 --- a/tests/RhythmGameUtilities/ParsersInternal.cpp +++ b/tests/RhythmGameUtilities/ParsersInternal.cpp @@ -2,6 +2,8 @@ #include #include +#include "RhythmGameUtilities/Enums/Difficulty.hpp" +#include "RhythmGameUtilities/Enums/NamedSection.hpp" #include "RhythmGameUtilities/ParsersInternal.hpp" using namespace RhythmGameUtilities; diff --git a/tests/RhythmGameUtilities/Utilities.cpp b/tests/RhythmGameUtilities/Utilities.cpp index 23ff507..d9b7960 100644 --- a/tests/RhythmGameUtilities/Utilities.cpp +++ b/tests/RhythmGameUtilities/Utilities.cpp @@ -3,8 +3,8 @@ #include #include -#include "RhythmGameUtilities/Structs/Tempo.h" -#include "RhythmGameUtilities/Structs/TimeSignature.h" +#include "RhythmGameUtilities/Structs/Tempo.hpp" +#include "RhythmGameUtilities/Structs/TimeSignature.hpp" #include "RhythmGameUtilities/Utilities.hpp" diff --git a/tests/RhythmGameUtilities/UtilitiesInternal.cpp b/tests/RhythmGameUtilities/UtilitiesInternal.cpp index 35b6a58..ede3144 100644 --- a/tests/RhythmGameUtilities/UtilitiesInternal.cpp +++ b/tests/RhythmGameUtilities/UtilitiesInternal.cpp @@ -1,10 +1,9 @@ #include #include #include -#include -#include "RhythmGameUtilities/Structs/Tempo.h" -#include "RhythmGameUtilities/Structs/TimeSignature.h" +#include "RhythmGameUtilities/Structs/Tempo.hpp" +#include "RhythmGameUtilities/Structs/TimeSignature.hpp" #include "RhythmGameUtilities/UtilitiesInternal.hpp"