Harlinn.Windows - Visual Studio 2022 解决方案





5.00/5 (40投票s)
Harlinn.Windows 是我整合的一系列库,它们是我工作中使用的运行时很大一部分。
下载最后更新于 2022 年 1 月 26 日。有关更改的信息可在本文末尾找到。
如果您在下载完整的代码存档(单个 zip 文件)时遇到问题,以下所有文件都提供了分卷 zip 文件的下载方式。
- 下载 Harlinn.Windows 001 - 7.8 MB
- 下载 Harlinn.Windows 002 - 7.9 MB
- 下载 Harlinn.Windows 003 - 8 MB
- 下载 Harlinn.Windows 004 - 7.8 MB
- 下载 Harlinn.Windows 005 - 7.9 MB
- 下载 Harlinn.Windows 006 - 7.9 MB
- 下载 Harlinn.Windows 007 - 7.8 MB
- 下载 Harlinn.Windows 008 - 7.8 MB
- 下载 Harlinn.Windows 009 - 7.7 MB
- 下载 Harlinn.Windows 010 - 7.8 MB
- 下载 Harlinn.Windows 011 - 7.9 MB
- 下载 Harlinn.Windows 012 - 7.8 MB
- 下载 Harlinn.Windows 013 - 7.8 MB
- 下载 Harlinn.Windows 014 - 8 MB
- 下载 Harlinn.Windows 015 - 7.8 MB
- 下载 Harlinn.Windows 016 - 8 MB
- 下载 Harlinn.Windows 017 - 7.8 MB
- 下载 Harlinn.Windows 018 - 7.5 MB
- 下载 Harlinn.Windows 019 - 2.1 MB
注意:如果您下载的是单个文件,请将每个文件的内容解压到一个目录中,然后使用 7-Zip 或 WinZip 进行解压。
Github
我还创建了一个 Github 仓库,Harlinn.Windows,提供对代码的访问。仓库中的代码目前可以使用 Visual Studio 17.11.0(截至 2024 年 8 月 16 日)进行编译。之前,仓库中缺少一些文件,现在已已解决。与本文提供的版本相比,Github 仓库中的解决方案版本有许多更新和补充。该解决方案目前包含 625 个项目。
概述
本文档描述了 Harlinn.Windows
,一个 Visual Studio 2022 解决方案。
在构建解决方案之前,请阅读构建说明并相应地配置您的环境。
此解决方案仅用于 64 位 x64 构建。
引言
Harlinn.Windows
是我整合的一系列库,它们是我工作中使用的运行时很大一部分。其中一些是我自己的;但大多数都是,或多或少,知名开源库。
该解决方案目前有 521 个项目,本文档对其中的内容进行了高层概述。
为什么我没有使用 cmake 和 vcpkg?
这是一个好问题,起初我确实尝试过,但遇到了一些障碍。
- 使用 vcpkg 构建的 grpc.lib 的发布版本大小为 325 MB;而 Harlinn.grpc.dll 的发布版本大小仅为 3.7 MB。目前,为解决方案的发布版本构建的所有本机 DLL 的总大小为 108 MB。
- 某些包依赖于相同包的不同版本,包括它们自己的私有副本。
- 有些包是以开启 /sdl 选项编译的,而有些则没有。我倾向于在发布版本中关闭 /sdl 和 /GS,而在调试版本中开启它们。这可能不像以前那么重要了,但关闭 /sdl 和 /GS 确实可以获得更好的性能。
- 许多包无法与
- /std:c++latest 选项一起编译,该选项“启用当前已实现的所有编译器和标准库功能,以及一些正在进行和实验性的功能。”
- 许多包创建静态库,而不是 DLL。
请不要误会;我认为 CMake 和 vcpkg 是很棒的工具,但将所有内容放入一个解决方案中,至少对我来说,更容易理解它们是如何相互关联的。
为什么在每个 DLL 名称前加上 Harlinn?
为避免命名冲突。我拥有 harlinn.com 域名,因此不太可能有人意外地将 Harlinn 加到其 DLL 名称的前面。
单元测试呢?
其中包含了一些,但仍然只是原始包可用单元测试的一小部分。
特别是,我包含了所有可以在 Windows 上编译的单元测试,用于:
- Abseil - 4430 个测试通过,26 个失败,12 个测试被禁用
- boringssl
crypto_test
- 910 个测试通过,0 个失败,0 个测试被禁用ssl_test
- 330 个测试通过,0 个失败,0 个测试被禁用
- gRPC - 测试实现为 94 个独立的执行文件,使用多种测试方法。我认为这些测试会通过;但不确定,因为很多验证都是手动进行的。
- bullet - 31 个测试通过,0 个失败,0 个测试被禁用
- gdal - 84 个测试通过,0 个失败,0 个测试被禁用
-
skia - 大部分测试都能正常工作,大约 1500 个,但测试程序随后终止。
据我所能确定,这似乎与测试代码有关。
我还为我自己的项目创建了大量的测试:
Harlinn.Common.Core.Tests
: 1175Harlinn.Windows.Tests
: 271Harlinn.OCI.Tests
: 49Harlinn.ODBC.Tests
: 9Harlinn.Timeseries.Tests
: 10Harlinn.Julia.Tests
: 11Harlinn.Common.Config.Tests
: 34
所有测试都可以在 Tests 文件夹下找到。
示例代码呢?
到目前为止,我包含了 190 个示例项目。
所有示例都可以在 Examples 和 DotNet\Examples 文件夹下找到。
它的稳定性如何?
这是解决方案的一个快照,虽然大部分功能似乎都能正常工作,但难免会有些小问题。最常见的问题可能是某个函数或变量未从 DLL 导出,而且可能还有其他错误。其中一些,可能是我自己造成的。
尽管如此,有了这个解决方案,您现在可以:
-
使用 Open GL ES 在 DirectX 3D 之上创建图形应用程序
-
创建精美的 2D 效果
-
创建动画 3D 可视化
-
使用 Visual Studio 2022 和 C++ 学习一些最常用的开源包。
Harlinn.Common.Core
Harlinn.Common.Core
是一个打包为 DLL 的库,它提供了对大多数 Windows C++ 项目有用的功能。
依赖项
- boost C++ 库
Harlinn.Common.Core 中包含的其他第三方代码
Harlinn.Common.Core
库包含来自多个库的代码。
- {fmt} 库,版本 8.0.1,作者:Victor Zverovich
- xxHash 库,版本 0.8.1
- CRC-32C (Castagnoli) for C++ 库
- xxhash_cx 库
关于 char, wchar_t, signed char 和 unsigned char
该库试图将 char
和 wchar_t
作为仅用于表示字符数据的类型来处理,而 signed char
和 unsigned char
分别被期望表示有符号和无符号的 8 位整数。
通常,这不成问题,但请考虑:
constexpr char buffer1[] = { 1,2,3 };
constexpr unsigned char buffer2[] = { 1,2,3 };
constexpr char buffer3[] = "hello";
constexpr int buffer4[] = { 1,2,3 };
constexpr wchar_t_ buffer5[] = { 1,2,3 };
constexpr wchar_t_ buffer6[] = L"hello";
constexpr auto length1 = LengthOf( buffer1 );
constexpr auto length2 = LengthOf( buffer2 );
constexpr auto length3 = LengthOf( buffer3 );
constexpr auto length4 = LengthOf( buffer4 );
constexpr auto length5 = LengthOf( buffer5 );
constexpr auto length6 = LengthOf( buffer6 );
LengthOf
期望 buffer1
和 buffer5
是零终止的;但由于它们不是,编译器将无法评估 LengthOf( buffer1 )
和 LengthOf( buffer5 )
。LengthOf( buffer3 )
和 LengthOf( buffer6 )
的计算结果为 5,而 LengthOf( buffer2 )
和 LengthOf( buffer4 )
的计算结果为 3。
HCCPersistent.h 中的代码(由 HCCLogger.h 中的代码使用)依赖于此,从而消除了运行时对 strlen
和 wcslen
的大量调用。
主头文件
- HCC7BitEncoding.h: 提供 7 位编码值的
constexpr
支持。 -
HCCActiveObject.h: 提供
-
template<typename DerivedT> class ActiveObject
:基于
ConcurrentQueue<>
的活动对象实现。
-
-
HCCApplication.h: 提供
-
class Application
:每个程序都需要创建一个且仅创建一个此类或派生自此类的一个实例。
int main( int argc, char* argv[], char* envp[] ) { Harlinn::Common::Core::ApplicationOptions options; options.Load( ); Harlinn::Common::Core::Application application( options ); application.Start( ); // your code goes here, perhaps: int result = foo( ); application.Stop( ); return result; }
目前,它代表程序配置、启动和停止日志记录后端。
-
-
HCCArray.h: 提供
-
template<typename T, size_t N> ArrayEx
:一个派生自
std::array
的模板,支持使用运算符+
进行constexpr
连接。 -
template<typename T, size_t N> class Array
:std::array
的替代方案,支持使用运算符+
进行constexpr
连接。 -
template<size_t N> class ByteArray
:支持
constexpr
二进制数据序列化的模板。 -
template<size_t N, bool networkByteOrder = false, bool use7BitEncodedSize = true> class ArrayReader
:实现
constexpr
数据反序列化的模板。 -
template<size_t N, bool networkByteOrder = false, bool use7BitEncodedSize = true> class ArrayWriter
:实现
constexpr
数据序列化的模板。
-
- HCCBinaryReader.h: 提供
BinaryReaderBase
:template<typename Derived, bool networkByteOrder, bool use7BitEncodedSize> class BinaryReaderBase
可用于反序列化二进制数据的模板。BufferedBinaryReader
:template<typename StreamT, size_t BufferSizeValue, bool networkByteOrder = false, bool use7BitEncodedSize = true> class BufferedBinaryReader
可用于通过内部缓冲区从流中反序列化二进制数据的模板。BinaryReader
:template< IO::StreamReader StreamT, bool networkByteOrder = false, bool use7BitEncodedSize = true > class BinaryReader
可用于从流中反序列化二进制数据的模板。
- HCCBinaryWriter.h: 提供
BinaryWriterBase
:template<typename Derived, bool networkByteOrder, bool use7BitEncodedSize> class BinaryWriterBase
可用于序列化二进制数据的模板。BufferedBinaryWriter
:template<IO::StreamWriter StreamWriterT, size_t BufferSizeValue, bool networkByteOrder = false, bool use7BitEncodedSize = true > class BufferedBinaryWriter
可用于通过内部缓冲区将二进制数据序列化到流中的模板。
BinaryWriter
:template<IO::StreamWriter StreamT, bool networkByteOrder = false, bool use7BitEncodedSize = true> class BinaryWriter
可用于将二进制数据序列化到流中的模板。
- HCCBuffer.h: 提供
Blocks::Stream
,一个面向块的内存流。 - HCCCom.h: 提供
class Unknown
:IUnknown
接口的包装器template<typename T> class UnknownPtr
: COM 接口的通用智能指针template< class InterfaceType > class IUnknownImplementation
:IUnknown
接口的实现
- HCCConverters.h: 提供各种重载的
template <typename ResultType, typename ArgumentType> inline ResultType ConvertTo( ArgumentType arg )
实现基本数据类型之间高效且“安全”的转换。
- HCCCRC.h: 提供计算数据 CRC 值的一些方法。
- HCCCrypto.h: 提供处理证书的功能。
- HCCCurrency.h: 声明
Currency
类。 - HCCDateTime.h: 提供处理日期和时间的功能,声明
class TimeSpan
class DateTime
class Stopwatch
- HCCEnvironment.h: 提供对系统信息的便捷访问。
- HCCEse.h: 提供用于处理(Windows 可扩展存储引擎)的 C++ 类。
- HCCException.h: 提供广泛的异常类。
- HCCGuid.h: 处理 UUID/GUID 的功能,声明
class Guid
。 - HCCHandle.h: 声明
template<typename DerivedT, typename HandleT> class Handle
。 - HCCHTTP.h: 提供用于处理(HTTP 服务器 API)的 C++ 类。
- HCCIO.h: 提供与文件、目录和流 I/O 相关的 C++ 类。
- HCCIOContext.h: 声明
class Context
: 使用线程池处理 I/O 完成端口的异步 I/O。class ContextHandler
:Context
类的实例将特定操作系统句柄的工作委托给为派生自ContextHandler
的类实现的Process
覆盖。template<typename DerivedT> FileHandler
: 派生自ContextHandler
的模板,用于执行文件相关的异步 I/O。class FileRequest
: 文件相关异步 I/O 请求的基类。class ReadFileRequest
: 表示异步文件读取请求。class WriteFileRequest
: 表示异步文件写入请求。class FileDispatcher
: 派生自FileHandler
,将 I/O 完成事件广播到附加到boost::signals2::signal<>
处理程序的那些。
-
HCCLib.h: 提供许多有用的函数。
ByteSwap
:template<typename T> requires IsInteger<std::remove_cvref_t<T>> inline constexpr T ByteSwap( T value )
交换参数的字节,参数必须是某种整数类型。如果可能,在编译时执行此操作。如果必须在运行时执行,实现将调用
_byteswap_ushort
、_byteswap_ulong
、_byteswap_uint64
,或根据参数类型的字节大小直接返回参数。float
、double
和enum
的ByteSwap
实现为template<typename T> requires (IsFloatingPoint<std::remove_cvref_t<T>> || std::is_enum_v<std::remove_cvref_t<T>> ) inline constexpr T ByteSwap( const T value ) noexcept { using Type = std::remove_cvref_t<T>; using UIntType = MakeUnsigned<Type>; std::bit_cast<Type>( ByteSwap( std::bit_cast<UIntType>( value ) ) ); }
-
BitMask
:template<size_t N> struct BitMask { using type = ... static constexpr type value = ...; };
BitMask::type
:能够容纳 N 位(其中N <= 64
)的最小无符号整数的类型。BitMask::value
:具有 N 个最低位设置为1
的位掩码的值。 LengthOf
:返回数组中的元素数量、零终止字符串(char 或wchar_t
)的长度,或容器中的元素数量。template<typename T> inline int Compare( T v1, T v2 ) noexcept
:比较两个相同基本类型的参数,如果第一个值小于第二个值则返回< 0
;如果它们相等则返回0
;否则返回> 0
。对于零终止的字符串(char 或wchar_t
),nullptr
被认为等于长度为0
的字符串。AreNearlyEqual
:template<typename T> requires std::is_floating_point_v<T> constexpr bool AreNearlyEqual( T a, T b, T smallNumber = static_cast<T>( 0.0001 ) ) noexcept
当a
和b
之间的绝对差值小于smallNumber
时,返回true
。class XXH64Hasher
:使用此类从多个输入中逐步生成哈希值。IsPowerOfTwo
:如果整数是2
的幂,则返回true
。NextPowerOfTwo
:返回大于参数的下一个 2 的幂的值。
- HCCLMDB.h: 声明了一组用于使用 LMDB 的 C++ 类,基于 3rdParty\Harlinn.LMDB。
- HCCLogger.h: 日志记录实现。
- HCCLogging.h: 用于日志记录的预处理器宏。
-
HCCMath.h:
constexpr
数学,命名空间:Harlinn::Common::Core::Math
。IsSameValue
:constexpr bool IsSameValue( double x, double y ) noexcept; constexpr bool IsSameValue( float x, float y ) noexcept;
返回true
如果x
和y
保存相同的值,即使它们保存NaN
值。IsZero
:constexpr bool IsZero( double x ) noexcept; constexpr bool IsZero( float x ) noexcept;
如果
x
是0.0
或-0.0
,则返回true
。-
signum
:template< typename T> requires IsUnsignedInteger<std::remove_cvref_t<T>> || IsBoolean<std::remove_cvref_t<T>> inline constexpr T signum( T val ) noexcept; template< typename T> requires IsSignedInteger<std::remove_cvref_t<T>> inline constexpr T signum( T val ) noexcept; template< typename T> requires IsFloatingPoint<std::remove_cvref_t<T>> inline constexpr T signum( T val ) noexcept;
指示
val
的符号,返回-1
、0
或+1
。 Deg2Rad
:template< typename T> requires IsFloatingPoint<std::remove_cvref_t<T>> inline constexpr std::remove_cvref_t<T> Deg2Rad( T angleInDegrees ) noexcept;
将angleInDegrees
从度转换为弧度。Rad2Deg
:template< typename T> requires IsFloatingPoint<std::remove_cvref_t<T>> inline constexpr std::remove_cvref_t<T> Rad2Deg( T angleInRadians ) noexcept;
将
angleInRadians
从弧度转换为度。NextAfter
:inline constexpr double NextAfter( double x, double y ) noexcept; inline constexpr double NextAfter( float x, float y ) noexcept;
返回
x
在y
方向上的下一个可表示值。NextDown
:template<typename T> requires IsFloatingPoint<T> inline constexpr std::remove_cvref_t<T> NextDown( T x ) noexcept;
返回
x
在负无穷方向上的下一个可表示值。NextUp
:template<typename T> requires IsFloatingPoint<T> inline constexpr std::remove_cvref_t<T> NextUp( T x ) noexcept;
返回
x
在正无穷方向上的下一个可表示值。-
IsNaN
:template<typename T> requires IsInteger<T> constexpr inline bool IsNaN( T val ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline bool IsNaN( T val ) noexcept;
如果
val
是NaN
,则返回true
。 -
IsInf
:template<typename T> requires IsInteger<T> constexpr inline bool IsInf( T val ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline bool IsInf( T val ) noexcept;
如果
val
是无穷大,则返回true
。 -
Abs
:template<typename T> requires IsSignedInteger<T> constexpr inline std::remove_cvref_t<T> Abs( T val ) noexcept; template<typename T> requires IsUnsignedInteger<T> constexpr inline std::remove_cvref_t<T> Abs( T val ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Abs( T val ) noexcept;
返回
val
的绝对值。 -
SignBit
:template<typename T> requires IsSignedInteger<T> constexpr inline bool SignBit( T val ) noexcept; template<typename T> requires IsUnsignedInteger<T> constexpr inline bool SignBit( T val ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline bool SignBit( T val ) noexcept;
如果
val
的符号为负,则返回true
,否则返回false
。 -
FRExp
:template<typename T> requires IsInteger<T> constexpr inline std::pair<double,int> FRExp( T val ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::pair<double,int> FRExp( T val ) noexcept; template<typename T> requires IsInteger<T> constexpr inline double FRExp( T val, int* exp ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> FRExp( T val, int* exp ) noexcept; template<typename T> requires IsInteger<T> constexpr inline double FRExp( T val, int& exp ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> FRExp( T val, int& exp ) noexcept;
返回
(result,exp)
,使得result
的绝对值在区间[1/2, 1)
或0
内,且val
等于result
*2
exp
。 -
ModF
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::pair<std::remove_cvref_t<T>, std::remove_cvref_t<T>> ModF( T val ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ModF( T val, T* integerPart ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ModF( T val, T& integerPart ) noexcept;
返回数字的小数部分和整数部分组成的
std::pair<T,T>
。两部分都具有与参数相同的符号。 -
最小值
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Min( T first, T second ) noexcept; template<typename T> requires IsInteger<T> constexpr inline std::remove_cvref_t<T> Min( T first, T second ) noexcept;
返回参数值中较小的一个。
-
最大值
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Max( T first, T second ) noexcept; template<typename T> requires IsInteger<T> constexpr inline std::remove_cvref_t<T> Max( T first, T second ) noexcept;
返回参数值中较大的一个。
-
Trunc
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Trunc( T val ) noexcept; template<typename T> requires IsInteger<T> constexpr inline std::remove_cvref_t<T> Trunc( T val ) noexcept;
返回与
val
类型相同的最接近的整数值,其绝对值小于或等于val
的绝对值。 -
Floor
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Floor( T val ) noexcept; template<typename T> requires IsInteger<T> constexpr inline std::remove_cvref_t<T> Floor( T val ) noexcept;
返回与
val
类型相同的、小于或等于val
的最接近的整数值。 -
Ceil
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Ceil( T val ) noexcept; template<typename T> requires IsInteger<T> constexpr inline std::remove_cvref_t<T> Ceil( T val ) noexcept;
返回与
val
类型相同的、大于或等于val
的最接近的整数值。 -
Round
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Round( T val ) noexcept; template<typename T> requires IsInteger<T> constexpr inline std::remove_cvref_t<T> Round( T val ) noexcept;
返回四舍五入到最接近的整数值的
val
。 -
Clamp
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Clamp( T val, T minimumValue, T maximumValue ) noexcept; template<typename T> requires ( IsInteger<T> ) constexpr inline std::remove_cvref_t<T> Clamp( T val, T minimumValue, T maximumValue ) noexcept;
如果
val
小于minimumValue
,则返回minimumValue
;否则如果maximumValue
小于val
,则返回maximumValue
;否则返回val
。 Lerp
:template<typename T, typename U> requires ( ( IsInteger<T> || IsFloatingPoint<T> ) && ( IsInteger<U> || IsFloatingPoint<U> ) ) constexpr inline std::conditional_t<IsFloatingPoint<T>, T, std::conditional_t<IsFloatingPoint<U>, U, T>> Lerp( T a, T b, U t ) noexcept;
计算a
和b
之间的线性插值,参数为t
(或在t
范围 [0,1] 之外时进行外插)。CopySign
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> CopySign( T magnitude, T signValue ) noexcept;
返回一个具有
magnitude
幅度和signValue
符号的值。ScaleByN
:inline constexpr double ScaleByN( double x, int n ) noexcept; inline constexpr double ScaleByN( float x, int n ) noexcept;
将浮点值
x
乘以FLT_RADIX
的n
次幂。FMod
:inline constexpr double FMod( double x, double y ) noexcept; inline constexpr float FMod( float x, float y ) noexcept;
计算除法运算
x
/y
的浮点余数。Exp
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Exp( T x ) noexcept;
计算
e
(欧拉数,2.7182818)的x
次幂。Hypot
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Hypot( T x, T y ) noexcept;
计算斜边。
Log
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Log( T x ) noexcept;
计算
x
的自然对数(以e
为底)。Log2
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Log2( T x ) noexcept;
计算
x
的以 2 为底的对数。Log10
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Log10( T x ) noexcept;
计算
x
的以 10 为底的对数。Sin
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Sin( T x ) noexcept;
计算
x
的正弦值,其中x
以弧度为单位。ASin
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ASin( T x ) noexcept;
计算
x
的反正弦值,以弧度为单位。Cos
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Cos( T x ) noexcept;
计算
x
的余弦值,其中x
以弧度为单位。ACos
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ACos( T x ) noexcept;
计算
x
的反余弦值,结果以弧度为单位。Tan
:template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> Tan( T x ) noexcept;
计算
x
的正切值,其中x
以弧度为单位。-
ATan
,ATan2
template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ATan( T x ) noexcept; template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ATan( T x, T y ) noexcept template<typename T> requires IsFloatingPoint<T> constexpr inline std::remove_cvref_t<T> ATan2( T x, T y ) noexcept
分别计算
y
或y
/x
的反正切值。 SinCos
:template<typename T> requires IsFloatingPoint<T> inline constexpr void SinCos( T x, T& sinResult, T& cosResult ) noexcept;
同时计算
x
的正弦和余弦值,其中x
以弧度为单位。
- HCCObj.h: 提供一系列 Windows COM 接口的包装器 C++ 类。
- HCCObjBase.h: 提供核心 Windows COM 接口的包装器 C++ 类。
- HCCObservable.h: 声明
template<typename DerivedT> class Observable
和一些可用于实现可观察属性的宏。 - HCCPersistent.h: 提供灵活高效的序列化和反序列化机制。
- HCCPersistentDecoder.h: 提供一个通用解码器,用于解码使用 HCCPersistent.h 中提供的机制序列化后的数据。
- HCCPipe.h: 使用命名管道的同步和异步 I/O。
- HCCProcess.h: 处理 Windows 进程的类。
- HCCPropSys.h: 处理(Windows 属性系统)的类。
- HCCReference.h: 支持侵入式引用计数对象。
- HCCSecurity.h: 处理(Windows 安全性和身份)的类。
- HCCShell.h: 处理(Windows Shell API)的类。
- HCCSocket.h: 使用套接字的同步和异步 I/O。
- HCCSync.h: 处理同步的类。
- HCCThread.h: 处理线程的类。
- HCCTraits.h: 有用的元编程特性。
- HCCTuple.h: 另一个元组实现。
- HCCVariant.h: 提供处理 VARIANT 结构的功能。
- HCCVector.h: 另一个向量实现。
- HCCXml.h: 处理 MSXML SDK 的类。
Harlinn.Windows
Harlinn.Windows 提供用于在 C++ 中开发用户界面的功能。
它用于实现 73 个示例。
主头文件
- HWDXGI.h: 提供对 DirectX Graphics Infrastructure API 的支持。
- HWGraphicsD3D12.h: 提供对 Direct3D 12 API 的支持。
- HWGraphics.h: 提供对 Direct2D API 的支持。
- HWDWrite.h: 提供对 DirectWrite API 的支持。
- HWImaging.h: 提供对 Windows Imaging Component API 的支持。
- HWHandles.h: 提供对 Windows GDI API 的支持。
- HWControl.h: 提供处理 Windows 控件的功能。
- HWMessage.h: 提供
Message
类,这是 MSG 结构的一个简单抽象。 - HWMenu.h: 提供处理 Windows 菜单的支持。
- HWForm.h: 提供使用
Form
类处理顶级 Windows 控件的支持。 - HWApplication.h: 提供一个
Application
类和一个MessageLoop
类。 - HWDXApplication.h: 声明了一些
Direct3D
12 实用程序类。- class DXMessageLoop: 渲染/消息循环。
- class DXContext: 初始化并管理与
D3D12Device
、DXGI::SwapChain3
、D3D12GraphicsCommandList
以及与 Direct3D 12 API 交互所需的其他少量对象的交互。 - class DXApplication: 派生自
Windows::Application
,专为使用Windows::Form
开发 Direct3D 12 而设计。
- HWStdCtrls.h: 提供了一系列处理标准 Windows 控件的类。提供的功能数量非常有限。
- HWFileDialog.h: 提供对“打开”和“另存为”功能的支持,这些功能来自公共对话框库。
- HWEnvironment.h: 提供对系统信息的便捷访问。
- HWSkia.h: 提供创建 Skia 应用程序的支持。
- HWImGui.h: 提供创建 Dear ImGui 应用程序的支持。
HWControl.h、HWMessage.h、HWMenu.h、HWForm.h、HWApplication.h、HWStdCtrls.h、HWFileDialog.h、HWSkia.h 旨在一起使用,而 HWDXGI.h、HWGraphicsD3D12.h、HWGraphics.h、HWImaging.h 和 HWHandles.h 可以单独使用。
如今,我经常使用位于 3rdParty\Harlinn.ImGui 下的 Dear ImGui 和 ImPlot 的稍作修改的版本,来为我的 Harlinn\:\:Windows\:\:Form 基于的应用程序创建用户界面。
#include "HWDXApplication.h"
#include "HWImGui.h"
#include "HWmenu.h"
#include "HWstdctrls.h"
#include <iostream>
using namespace Harlinn;
int main()
{
try
{
Windows::ApplicationOptions applicationOptions;
applicationOptions.Load( );
Windows::ImGui::Application application( applicationOptions );
application.Start( );
Windows::ImGui::Form form;
form.SetText( L"ImGui & ImPlot Demo" );
bool showImGuiDemoWindow = true;
bool showImPlotDemoWindow = true;
bool showAnotherWindow = false;
form.OnRender.connect( [&showImGuiDemoWindow,&showImPlotDemoWindow,
&showAnotherWindow]( Windows::ImGui::Form* sender )
{
if ( showImGuiDemoWindow )
{
ImGui::ShowDemoWindow( &showImGuiDemoWindow );
}
if ( showImPlotDemoWindow )
{
ImPlot::ShowDemoWindow( &showImPlotDemoWindow );
}
} );
auto result = application.Run( form );
application.Stop( );
return result;
}
catch ( std::exception& exc )
{
std::cout << exc.what( ) << std::endl;
}
catch ( ... )
{
std::cout << "Unknown exception" << std::endl;
}
return 0;
}
Harlinn.OCI
Harlinn.OCI
提供高性能地通过 Oracle OCI API 访问 Oracle RDBMS。
Harlinn.ODBC
Harlinn.ODBC
通过 ODBC API 提供对数据库服务器和引擎的高性能访问。
Harlinn.Common.Config
此库实现了一个内存中的分层存储,适用于处理配置信息。
Harlinn.Julia
此库提供对 Julia 的便捷访问。
第三方库
此解决方案包含位于 3rdParty 文件夹下的几个有用的 C 和 C++ 库。
头文件库包含在“静态库(*.lib)”项目中,其他所有库都创建 DLL。
所有 C++ 代码都使用 /std:c++latest 和 /Zc:__cplusplus 编译。
abseil
版本: 20210324.2
描述
Abseil 是一个开源的 C++ 库集合,源自 Google 内部代码库中最基础的部分。这些库是 Google 运行的几乎所有东西的基础。这些 API 的部分内容嵌入在我们的大部分开源项目中,Abseil 旨在将它们整合到一个全面的项目中。Abseil 包含了 Google 代码库中最基本构建块:经过生产验证且将在未来几年内得到完全维护的代码。
项目
Harlinn.abseil
- Tests\3rdParty\abseil\abseil_test
abseil_test 包含 Harlinn.abseil
项目的单元测试。
libaec - 自适应熵编码库
版本:2021.08.26 的 master 分支
描述
Libaec 提供 1 到 32 位宽的有符号或无符号整数(样本)的快速无损压缩。
项目:Harlinn.aec
ANGLE - 几乎原生的图形层引擎
版本:2021.09.20 的 master 分支
描述
ANGLE 的目标是允许用户在多个操作系统上通过将 OpenGL ES API 调用转换为该平台可用的硬件支持 API 来无缝运行 WebGL 和其他 OpenGL ES 内容。ANGLE 目前提供从 OpenGL ES 2.0、3.0 和 3.1 到 Vulkan、桌面 OpenGL、OpenGL ES、Direct3D 9 和 Direct3D 11 的转换。
项目
Harlinn.angle
Harlinn.angle-egl
Harlinn.angle-gl
Harlinn.angle-glesv1
Harlinn.angle-glesv2
Harlinn.angle-opencl
Harlinn.angle-util
联盟媒体 - AV1 编解码器库
版本: 3.1.2
描述
AV1 编解码器库
项目:Harlinn.aom
Armadillo:C++ 线性代数与科学计算库
版本:10.6.x
描述
Armadillo 是一个高质量的 C++ 语言线性代数库(矩阵数学),旨在平衡速度和易用性。
提供高级语法和功能,故意模仿 Matlab。
适用于直接在 C++ 中进行算法开发,或将研究代码快速转换为生产环境。
提供高效的向量、矩阵和立方体类;支持密集和稀疏矩阵。
支持整数、浮点数和复数。
复杂的表达式求值器(基于模板元编程)自动组合多个操作以提高速度和效率。
通过与 LAPACK 或其高性能的替换品(例如 MKL 或 OpenBLAS)集成,提供各种矩阵分解(特征值、SVD、QR 等)。
可以自动使用 OpenMP 多线程(并行化)来加速计算密集型操作。
根据宽松的 Apache 2.0 许可证分发,适用于开源和专有(闭源)软件。
可用于机器学习、模式识别、计算机视觉、信号处理、生物信息学、统计学、金融等。
项目:Harlinn.armadillo
cpp-base64
版本:2.0.rc8
描述
C++ 的 Base64 编码和解码。
项目:Harlinn.base64
BoringSSL
版本:2021.09.20 的 master 分支
描述
BoringSSL 是 OpenSSL 的一个分支,旨在满足 Google 的需求。
项目
Harlinn.boringssl
- Tests\3rdParty\boringssl\crypto_test
- Tests\3rdParty\boringssl\ssl_test
Brotli
版本:2021.08.04 的 master 分支
描述
Brotli 是一种通用无损压缩算法,它使用现代变体的 LZ77 算法、霍夫曼编码和二阶上下文模型相结合来压缩数据,压缩率可与目前最好的通用压缩方法相媲美。其压缩速度与 deflate 相似,但压缩更密集。
项目:Harlinn.brotli
Bullet Physics SDK
逆向运动学
bzip2
版本: 1.0.8
描述
bzip2 是一种免费、无专利(见下文)、高质量的数据压缩器。它通常能将文件压缩到最佳可用技术(PPM 系列统计压缩器)的 10% 到 15% 以内,同时压缩速度是其两倍,解压缩速度是其六倍。
项目:Harlinn.bzip2
c-ares 是一个用于异步 DNS 请求(包括名称解析)的 C 库。
版本: 1.17.0
描述
c-ares 是一个用于异步 DNS 请求(包括名称解析)的 C 库。
项目:Harlinn.c-ares
CFITSIO - FITS 文件子例程库
版本: 4.0.0
描述
CFITSIO 是一个 C 和 Fortran 子例程库,用于读取和写入 FITS(灵活图像传输系统)数据格式的文件。CFITSIO 提供了简单的高级例程,用于读取和写入 FITS 文件,让程序员免受 FITS 格式内部复杂性的困扰。CFITSIO 还提供了许多用于处理和过滤 FITS 文件信息的先进功能。
项目:Harlinn.cfitsio
高级 DXTn 纹理压缩库
版本: 1.04
描述
crnlib 是一个有损纹理压缩库,供使用 DXT1/5/N 或 3DC 压缩颜色/法线贴图/立方体贴图 mipmap 纹理格式发布内容的开发者使用。
它可以将 mipmap 的 2D 纹理、法线贴图和立方体贴图压缩到大约 1-1.25 bits/texel,并将法线贴图压缩到 1.75-2 bits/texel。实际比特率取决于纹理本身的复杂性、指定的质量因子/目标比特率,以及最终针对特定纹理所需的质量。
项目:Harlinn.crnlib
clsocket
提供编写跨平台套接字代码的机制。该库最初只支持阻塞 TCP 套接字。多年来,它已扩展到支持 UDP 和 RAW 套接字。
crossguid
libcurl - 多协议文件传输库
版本: 7.78.0
描述
libcurl 是一个免费易用的客户端 URL 传输库,支持 DICT、FILE、FTP、FTPS、GOPHER、GOPHERS、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、MQTT、POP3、POP3S、RTMP、RTMPS、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET 和 TFTP。libcurl 支持 SSL 证书、HTTP POST、HTTP PUT、FTP 上传、基于 HTTP 表单的上传、代理、HTTP/2、HTTP/3、cookie、用户名/密码认证(基本、摘要、NTLM、Negotiate、Kerberos)、文件传输续传、http 代理隧道等等!
项目:Harlinn.curl
D3D12 内存分配器
版本:2.0.0-development (2021-07-26)
描述
易于集成 Direct3D 12 的内存分配库。
项目:Harlinn.d3d12allocator
libdeflate
版本: 1.8
描述
libdeflate
是一个用于快速、整个缓冲区 DEFLATE 压缩和解压缩的库。
项目:Harlinn.deflate
Adobe 数字负片 (DNG) SDK
版本: 1.5.1
描述
DNG SDK 提供对读取和写入 DNG 文件的支持,以及将 DNG 数据转换为易于显示或由成像应用程序处理的格式。
项目:Harlinn.dngsdk
Effcee
版本:2021.09.27 的 main 分支
描述
Effcee 是一个用于字符串有状态模式匹配的 C++ 库,其灵感来自 LLVM 的 FileCheck 命令。
项目:Harlinn.effcee
Eigen
ENet
ENet 的目的是在 UDP(用户数据报协议)之上提供一个相对轻量、简单且健壮的网络通信层。它提供的主要功能是可选的可靠、有序的数据包传输。
Expat
版本: 2.4.1
描述
这是 Expat,一个由 James Clark 于 1997 年推出的 C 语言 XML 解析库。Expat 是一个流式 XML 解析器。这意味着您在开始解析之前向解析器注册处理程序。当解析器在正在解析的文档中发现相关结构时,将调用这些处理程序。开始标签是一个示例,您可以在其中注册处理程序。
项目:Harlinn.expat
FlatBuffers
Freetype
版本: 2.11.0
描述
FreeType 是一个免费的软件库,用于渲染字体。
它用 C 语言编写,设计得小巧、高效、高度可定制且可移植,同时能够生成高质量的矢量和位图字体格式的输出(字形图像)。
项目:Harlinn.freetype
GDAL - 地理空间数据抽象库
版本: 3.4.0
描述
GDAL 是一个用于栅格和矢量地理空间数据格式的转换器库,由开源地理空间基金会根据 X/MIT 风格的开源许可证发布。作为一个库,它为调用应用程序提供了所有支持格式的单一栅格抽象数据模型和单一矢量抽象数据模型。
项目:Harlinn.gdal
GEOS - 坐标转换软件库
版本: 3.4.0
描述
GEOS 是一个 C/C++ 库,用于通常被“地理信息系统”软件使用的空间计算几何。
项目:Harlinn.geos
Google gflags
版本: 2.2.2
描述
Gflags
,Google 内部使用的命令行标志库,与getopt()
等其他库不同,它允许标志定义分布在源代码中,而不仅仅是在一个地方(如main()
)列出。实际上,这意味着一个源代码文件将定义和使用对该文件有意义的标志。链接到该文件的任何应用程序都将获得这些标志,gflags 库将自动适当地处理这些标志。这种技术带来了灵活性和代码复用性的巨大提升。
项目:Harlinn.gflags
Giflib
版本: 5.2.1
项目:Harlinn.gif
描述
giflib
是一个用于读取和写入 gif 图像的库。
Glad
版本:由 glad 0.1.35 生成于 2021 年 12 月 26 日 15:01:04
GLSC2、OpenGL、OpenGL ES 加载器,由 glad 0.1.35 生成于 2021 年 12 月 26 日 15:01:04,使用基于官方规范的多语言 GL/GLES/EGL/GLX/WGL 加载器生成器。
项目:Harlinn.glad
GLFW - 用于桌面 OpenGL、OpenGL ES 和 Vulkan 开发的多平台库
版本: 3.3.4
描述
GLFW 是一个开源的、多平台的库,用于桌面上的 OpenGL、OpenGL ES 和 Vulkan 开发。它提供了一个简单的 API 来创建窗口、上下文和表面,接收输入和事件。
项目:Harlinn.glfw
Glslang
版本: 2020.07.28
描述
参考验证器和 GLSL/ESSL -> AST 前端
OpenGL GLSL 和 OpenGL|ES GLSL (ESSL) 的前端,用于参考验证和将 GLSL/ESSL 转换为内部抽象语法树 (AST)。
HLSL -> AST 前端
HLSL 前端,用于将 HLSL 的近似转换到 glslang 的 AST 形式。
AST -> SPIR-V 后端
将 glslang 的 AST 转换为 Khronos 指定的 SPIR-V 中间语言。
Reflector
一个用于从 AST 获取反射信息、从 HLL 源(而非 SPIR-V)获取反射类型/变量等的 API。
项目:Harlinn.glslang
gRPC
版本: 1.41.1
描述
gRPC 是一个现代、开源、高性能的远程过程调用 (RPC) 框架,可以在任何环境中运行。它可以高效地连接数据中心内外的服务,并支持可插拔的负载均衡、跟踪、健康检查和身份验证。它也适用于分布式计算的最后一段,连接设备、移动应用程序和浏览器到后端服务。
项目
Harlinn.grpc
Harlinn.grpc-compiler
- Tools\3rdParty\grpc\gen_hpack_tables
- Tools\3rdParty\grpc\grpc_cpp_plugin
- Tools\3rdParty\grpc\grpc_csharp_plugin
- Tools\3rdParty\grpc\grpc_node_plugin
- Tools\3rdParty\grpc\grpc_objective_c_plugin
- Tools\3rdParty\grpc\grpc_php_plugin
- Tools\3rdParty\grpc\grpc_python_plugin
- Tools\3rdParty\grpc\grpc_ruby_plugin
- Tests\3rdParty\gRPC\core\address_utils\grpc_test_core_address_utils_parse_address_test
- Tests\3rdParty\gRPC\core\address_utils\grpc_test_core_address_utils_parse_address_with_named_scope_id_test
- Tests\3rdParty\gRPC\core\address_utils\grpc_test_core_address_utils_sockaddr_utils_test
- Tests\3rdParty\gRPC\core\avl\grpc_test_avl_avl_test
- Tests\3rdParty\gRPC\core\backoff\grpc_test_backoff_backoff_test
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_badreq
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_bad_streaming_id
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_connection_prefix
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_duplicate_header
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_headers
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_head_of_line_blocking
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_initial_settings_frame
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_large_metadata
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_out_of_bounds
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_server_registered_method
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_simple_request
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_unknown_frame
- Tests\3rdParty\gRPC\core\bad_client\grpc_test_bad_client_window_overflow
- Tests\3rdParty\gRPC\core\bad_connection\grpc_test_bad_connection_close_fd_test
- Tests\3rdParty\gRPC\core\bad_ssl\grpc_test_bad_ssl_alpn_server_test
- Tests\3rdParty\gRPC\core\bad_ssl\grpc_test_bad_ssl_bad_ssl_test
- Tests\3rdParty\gRPC\core\bad_ssl\grpc_test_bad_ssl_cert_server_test
- Tests\3rdParty\gRPC\core\channel\grpc_test_channel_channel_args_test
- Tests\3rdParty\gRPC\core\channel\grpc_test_channel_channel_stack_builder_test
- Tests\3rdParty\gRPC\core\channel\grpc_test_channel_channel_stack_test
- Tests\3rdParty\gRPC\core\channel\grpc_test_channel_channel_trace_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_channelz_registry_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_channelz_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_channel_status_util_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_minimal_stack_is_minimal_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_client_channel_certificate_provider_registry_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_client_channel_retry_throttle_test
- Tests\3rdParty\gRPC\core\client_channel\grpc_test_core_client_channel_service_config_test
- Tests\3rdParty\gRPC\core\client_channel\resolvers\dns_resolver_connectivity_test
- Tests\3rdParty\gRPC\core\client_channel\resolvers\dns_resolver_cooldown_test
- Tests\3rdParty\gRPC\core\client_channel\resolvers\grpc_test_dns_resolver_test
- Tests\3rdParty\gRPC\core\client_channel\resolvers\grpc_test_fake_resolver_test
- Tests\3rdParty\gRPC\core\client_channel\resolvers\grpc_test_sockaddr_resolver_test
- Tests\3rdParty\gRPC\core\compression\grpc_test_core_compression_algorithm_test
- Tests\3rdParty\gRPC\core\compression\grpc_test_core_compression_compression_test
- Tests\3rdParty\gRPC\core\compression\grpc_test_core_compression_message_compress_test
- Tests\3rdParty\gRPC\core\compression\grpc_test_core_compression_stream_compression_test
- Tests\3rdParty\gRPC\core\config\grpc_test_core_config_core_configuration_test
- Tests\3rdParty\gRPC\core\debug\grpc_test_core_debug_stats_test
- Tests\3rdParty\gRPC\core\event_engine\grpc_test_core_event_engine_endpoint_config_test
- Tests\3rdParty\gRPC\core\fling\fling_client
- Tests\3rdParty\gRPC\core\fling\fling_server
- Tests\3rdParty\gRPC\core\fling\grpc_test_core_fling_fling_stream_test
- Tests\3rdParty\gRPC\core\fling\grpc_test_core_fling_fling_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_alloc_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_arena_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_cpu_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_env_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_log_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_murmur_hash_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_spinlock_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_string_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_sync_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_time_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_tls_test
- Tests\3rdParty\gRPC\core\gpr\grpc_test_core_gpr_useful_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_bitset_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_capture_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_dual_ref_counted_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_examine_stack_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_fork_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_global_config_env_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_global_config_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_host_port_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_manual_constructor_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_match_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_mpscq_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_orphanable_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_overload_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_ref_counted_ptr_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_ref_counted_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_status_helper_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_stat_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_table_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_thd_test
- Tests\3rdParty\gRPC\core\gprpp\grpc_test_core_gprpp_time_util_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_combiner_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_endpoint_pair_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_error_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_grpc_ipv6_loopback_available_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_load_file_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_mpmcqueue_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_pollset_windows_starvation_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_resolve_address_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_resource_quota_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_threadpool_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_timer_heap_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_timer_list_test
- Tests\3rdParty\gRPC\core\iomgr\grpc_test_core_iomgr_time_averaged_stats_test
- Tests\3rdParty\gRPC\grpc_test_core_util
libgta - 通用标签数组
版本: 1.2.1
描述
Libgta
,一个用于读取和写入 GTA 文件的库。
项目:Harlinn.gta
GoogleTest
版本: 1.11.0
描述
GoogleTest 是 Google 的 C++ 测试和模拟框架。
项目:Harlinn.gtest
GWEN
HarfBuzz,文本整形库
版本: 3.0.0
描述
HarfBuzz
是一个文本整形库。使用HarfBuzz
库允许程序将 Unicode 输入序列转换为格式正确且位置正确的字形输出——适用于任何书写系统和语言。
项目:Harlinn.harfbuzz
HDF
版本: 4.2.15
描述
分层数据格式(HDF)是一种多对象文件格式,用于在分布式环境中共享科学数据。HDF 由国家超级计算应用中心创建,现在由 HDF 集团开发和维护,以满足各种领域科学家项目的需求。
项目:Harlinn.hdf4
HDF5
版本: 1.12.1
描述
HDF Group 是 HDF5® 的开发者,这是一个高性能的软件库和数据格式,已被多个行业采用,并已成为科学和研究界的的事实标准。
项目:Harlinn.hdf5
Highway
版本: 0.14.2
描述
Highway 是一个 C++ SIMD(单指令多数据)库,即使用单个 CPU 指令对多个“通道”应用相同的操作。
项目:Harlinn.highway
Imath
版本:2021.08.18 的 master 分支
描述
Imath 是计算机图形学应用程序中常见的 2D 和 3D 向量和矩阵以及其他简单但有用的数学对象、函数和数据类型的基本、轻量级且高效的 C++ 表示,包括“half”16 位浮点类型。
项目:Harlinn.imath
Dear ImGui 和 ImPlot
版本:2021.07.14 的 master 分支
描述:将 Dear ImGui 和 ImPlot 打包成一个 DLL。
描述 'Dear ImGui'
Dear ImGui 是一个无臃肿的 C++ 图形用户界面库。它输出优化的顶点缓冲区,您可以在 3D 管道启用的应用程序中的任何时间进行渲染。
描述 'ImPlot'
ImPlot 是一个即时模式、GPU 加速的绘图库,用于 Dear ImGui。它旨在提供 ImGui 用户会喜欢的头等 API。ImPlot 非常适合实时可视化程序数据或创建交互式图表,并且集成代码量最少。
项目:Harlinn.ImGui
JasPer 图像处理/编码工具包
版本: 2.0.33
描述
JasPer 图像处理/编码工具包
项目:Harlinn.jasper
独立 JPEG 组织 (IJG) 的 JPEG 软件
版本:9d
描述
IJG 是一个编写和分发广泛使用的免费 JPEG 图像压缩库的非正式组织。
项目:Harlinn.jpeg
libjpeg-turbo
版本: 2.1.1
描述
libjpeg-turbo
是一个 JPEG 图像编解码器,它使用 SIMD 指令(MMX、SSE2、AVX2、Neon、AltiVec)来加速 x86、x86-64、Arm 和 PowerPC 系统上的基线 JPEG 压缩和解压缩,以及 x86 和 x86-64 系统上的渐进式 JPEG 压缩。在这些系统上,libjpeg-turbo
通常比libjpeg
快 2-6 倍,其他条件相同。在其他类型的系统上,由于其高度优化的霍夫曼编码例程,libjpeg-turbo
的性能仍然可以显著优于libjpeg
。在许多情况下,libjpeg-turbo
的性能与专有高速 JPEG 编解码器相当。
libjpeg-turbo
实现传统 libjpeg API 和功能较少但更直接的 TurboJPEG API。libjpeg-turbo
还具有颜色空间扩展,允许它从/解压到 32 位和 big-endian 像素缓冲区(RGBX、XBGR 等),以及功能齐全的 Java 接口。
项目:Harlinn.jpeg-turbo
JSON-C - C 语言的 JSON 实现
版本:2021.08.01 的 master 分支
描述
C 语言的 JSON 实现。
项目:Harlinn.json-c
JsonCpp
版本: 1.9.4
描述
JsonCpp
是一个 C++ 库,允许操作 JSON 值,包括序列化和反序列化到字符串。它还可以在反序列化/序列化步骤中保留现有注释,使其成为存储用户输入文件的便捷格式。
项目:Harlinn.jsoncpp
JPEG XL 参考实现
版本: 0.6.1
描述
JPEG XL (编码器和解码器) 的参考实现,称为
libjxl
。
项目:Harlinn.jxl
kml
版本: 1.3.0
描述
这是 Google 对 OGC KML 2.2 的参考实现。
项目
Harlinn.kmlbase
Harlinn.kmlconvenience
Harlinn.kmldom
Harlinn.kmlengine
Harlinn.kmlregionator
Harlinn.kmlxsd
Little CMS
版本: 2.12
描述
Little CMS 旨在成为一个开源的小型色彩管理引擎,特别侧重于准确性和性能。它使用国际色彩联盟 (ICC) 标准,这是色彩管理方面的现代标准。ICC 规范被广泛使用,并在许多国际和事实上的标准中被引用。它于 2005 年被批准为国际标准 ISO 15076-1。
项目:Harlinn.lcms2
LERC - 有限误差栅格压缩
版本: 3.0
描述
LERC 是一种开源图像或栅格格式,支持对任何像素类型(不仅仅是 RGB 或 Byte)进行快速编码和解码。
项目:Harlinn.Lerc
libde265 - 开源 h.265 编解码器实现
版本: 1.0.8
描述
libde265
是 h.265 视频编解码器的开源实现。它是从头开始编写的,并提供了一个简单的 C API,便于集成到其他软件中。
libde265
支持 WPP 和基于瓦片的多线程,并包含 SSE 优化。解码器支持 Main 配置文件中的所有功能,并且可以正确解码几乎所有符合标准的码流。
项目:Harlinn.libde265
FLAC - 免费无损音频编解码器
版本: 1.3.2
描述
FLAC 是一个开源的无损音频编解码器。
项目:Harlinn.libflac
libheif
版本: 1.12.0
描述
libheif 是一个 ISO/IEC 23008-12:2017 HEIF 和 AVIF(AV1 图像文件格式)文件格式的解码器和编码器。
HEIF 和 AVIF 是采用 HEVC (h.265) 或 AV1 图像编码的新图像文件格式,分别实现了目前可能达到的最高压缩比。
项目:Harlinn.libheif
liblzma
版本: 5.2.5
描述
LZMA Utils 尝试将 LZMA 压缩功能提供给类 Unix 系统。其理念是提供一个类似 gzip 的命令行工具和一个类似 zlib 的库,这将使将新的压缩技术轻松适应现有应用程序变得容易。
项目:Harlinn.liblzma
libmysofa
版本: 1.2.1
描述
这是一组简单的 C 函数,用于读取 AES SOFA 文件,如果它们包含根据 AES69-2015 标准存储的 HRTF。
项目:Harlinn.libmysofa
libogg
版本: 1.3.5
描述
Ogg 是一种多媒体容器格式,也是 Xiph.org 多媒体编解码器的原生文件和流格式。
项目:Harlinn.libogg
LIBSVM -- 支持向量机库
版本: 3.16
描述
LIBSVM 是一个集成的软件,用于支持向量分类(C-SVC、nu-SVC)、回归(epsilon-SVR、nu-SVR)和分布估计(单类 SVM)。它支持多类分类。
项目:Harlinn.libsvm
VMAF - 视频多方法评估融合
版本: 2.2.0
描述
VMAF 是 Netflix 开发的一种感知视频质量评估算法。
项目:Harlinn.libvmaf
Libxml2
版本: 2.9.12
描述
Libxml2
是为 Gnome 项目开发的 XML C 解析器和工具包。
项目:Harlinn.libxml2
Lightning Memory-Mapped Database
版本: 0.9.70
描述
一个超快、超紧凑、防崩溃的键值嵌入式数据存储。
项目:Harlinn.LMDB
LodePNG - 无依赖的 C 和 C++ PNG 编码器和解码器
版本: 20200215
描述
LodePNG
是一个 PNG 图像解码器和编码器,集于一身,无需依赖 zlib 或 libpng。
项目:Harlinn.lodepng
LZ4 - 极速压缩
版本: 1.9.3
描述
LZ4 是一种无损压缩算法,每核压缩速度超过 500 MB/s,支持多核 CPU 扩展。它具有极其快速的解码器,每核速度可达数 GB/s,在多核系统上通常能达到内存速度的极限。
项目:Harlinn.lz4
LZMA SDK
版本: 21.03
描述
LZMA / LZMA2 是 7z 格式的默认和通用压缩方法。LZMA 提供高压缩比和快速解压缩,因此非常适合嵌入式应用。
项目:Harlinn.lzma
网格数据抽象库 (MDAL)
版本: 0.8.1
描述
网格数据抽象库。
项目:Harlinn.mdal
minizip
版本: 1.1
描述
此包可用于从 .zip 存档文件中提取文件。
项目:Harlinn.minizip
Unidata NetCDF
版本:待定 - 此项目目前只是一个占位符
项目:Harlinn.netcdf-c
现代 C++ 的 JSON
版本:2021.08.16 的 develop 分支
描述
现代 C++ 的 JSON
项目:Harlinn.nlohmann-json
OpenAL Soft 是一个 LGPL 许可的、跨平台的、软件实现的 OpenAL 3D 音频 API。
版本: 1.21.1
描述
OpenAL Soft 是一个 LGPL 许可的、跨平台的、软件实现的 OpenAL 3D 音频 API。
OpenAL 提供在虚拟 3D 环境中播放音频的能力。API 处理的功能包括距离衰减、多普勒效应和定向声源。
项目:Harlinn.openal-soft
OpenCensus - 统计信息收集和分布式跟踪框架
版本: 0.4.0
描述
OpenCensus 是一个用于收集应用程序性能和行为数据的工具包。它目前包含一个用于跟踪和统计的 API。
项目:Harlinn.opencensus
OpenEXR
版本:2021.08.18 的 master 分支
描述
OpenEXR 提供了 EXR 文件格式的规范和参考实现,该格式是电影行业专业的图像存储格式。
EXR 格式的目的是准确有效地表示高动态范围的场景线性图像数据和相关元数据,并有力支持多部分、多通道用例。
项目
Harlinn.iex
Harlinn.ilmthread
Harlinn.openexr
Harlinn.openexrcore
Harlinn.openexrutil
OpenFYBA
版本: 4.1.1
描述
OpenFYBA
是 FYBA 库的源代码发行版,由挪威国家测绘局(Statens kartverk)分发,用于读取和写入国家地理空间数据标准格式 SOSI 的文件。
项目:Harlinn.openfyba
预览图像提取器 (PIEX)
版本:2021.09.24 的 master 分支
描述
预览图像提取器 (PIEX) 旨在查找并提取 RAW 文件中包含的最大 JPEG 压缩预览图像。
项目:Harlinn.piex
libpng
版本: 1.6.37
描述
libpng
是官方 PNG 参考库。它支持几乎所有的 PNG 功能,是可扩展的,并且经过了 23 年以上的广泛测试。
项目:Harlinn.png
PROJ 是一个通用坐标转换软件
版本: 8.1.0
描述
PROJ 是一个通用的坐标转换软件,可以将地理空间坐标从一个坐标参考系统 (CRS) 转换为另一个。这包括地图投影以及大地测量转换。
项目:Harlinn.proj
Protocol Buffers
版本: 3.17.3
描述
Protocol buffers 是 Google 的语言无关、平台无关、可扩展的结构化数据序列化机制——可以把它想象成 XML,但更小、更快、更简单。您只需定义一次数据结构,然后就可以使用特殊的生成源代码,以多种语言轻松地将结构化数据写入和读取各种数据流。
项目
Harlinn.protobuf
- Tools\3rdParty\protobuf\protoc
pthreads4w
版本: 3.0.0
描述
也称为“
pthreads-win32
”,Windows 的 POSIX Threads 实现了一部分单 Unix 规范版本 3 中的线程相关 API。符合性和质量是该成熟库的重中之重。开发始于 1998 年,并随着众多重要的专业贡献而持续发展。
项目:Harlinn.pthreads4w
Qpid Proton - AMQP 消息传递工具包
版本: 0.35.0
描述
Qpid Proton 是一个高性能、轻量级的消息传递库。它可以用于最广泛的消息传递应用程序,包括代理、客户端库、路由器、桥接器、代理等。Proton 可以轻松地从任何平台、环境或语言集成到 AMQP 1.0 生态系统中。
项目
Harlinn.qpid-proton
Harlinn.qpid-proton-cpp
RapidJSON
版本:2021.09.26 的 master 分支
描述
一个快速的 C++ JSON 解析器/生成器,同时具有 SAX/DOM 风格的 API。
项目:Harlinn.RapidJSON
RE2 - 正则表达式库
版本: 2021-09-01
描述
RE2 在设计和实现时明确以能够无风险地处理来自不受信任用户的正则表达式为目标。其主要保证之一是匹配时间与输入字符串的长度成线性关系。它在设计时也考虑了生产环境的顾虑:解析器、编译器和执行引擎通过在可配置的预算内工作来限制内存使用——在耗尽时优雅地失败——并且它们通过避免递归来防止堆栈溢出。
项目:Harlinn.re2
RocksDB:适用于闪存和 RAM 存储的持久键值存储
版本: 6.26.1
描述
RocksDB 是一个具有键/值接口的存储引擎,其中键和值是任意字节流。它是一个 C++ 库。它在 Facebook 开发,基于 LevelDB 并提供对 LevelDB API 的向后兼容支持。
RocksDB 支持各种存储硬件,最初专注于快速闪存。它使用日志结构数据库引擎进行存储,完全用 C++ 编写。
项目:Harlinn.rocksdb
Scintilla - 免费源代码编辑组件
版本: 5.1.3
描述
Scintilla 是一个免费的源代码编辑组件。它附带完整的源代码和允许在任何免费项目或商业产品中使用的许可证。
除了标准文本编辑组件中的功能外,Scintilla 还包括在编辑和调试源代码时特别有用的功能。这些功能包括对语法着色、错误指示器、代码完成和调用提示的支持。选择边距可以包含调试器中用于指示断点和当前行的标记。样式选择比许多编辑器更开放,允许使用比例字体、粗体和斜体、多种前景色和背景色以及多种字体。
项目:Harlinn.scintilla
Simple DirectMedia Layer (SDL) 版本 2.0
版本: 2.0.16
描述
Simple DirectMedia Layer 是一个跨平台开发库,旨在通过 OpenGL 和 Direct3D 提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。
项目:Harlinn.SDL2
简单快速多媒体库
版本: 2.5.1
描述
SFML 提供了一个简单的接口来访问 PC 的各个组件,以简化游戏和多媒体应用程序的开发。它由五个模块组成:系统、窗口、图形、音频和网络。
项目
Harlinn.sfml-audio
Harlinn.sfml-graphics
Harlinn.sfml-network
Harlinn.sfml-system
Harlinn.sfml-window
sjpeg 库
版本:2021.09.11 的 master 分支
描述
sjpeg
是一个用于编码基线 JPEG 文件的简单编码库。
项目:Harlinn.sjpeg
skcms
版本:2021.09.12 的 main 分支
描述:Skia 颜色管理
项目:Harlinn.skcms
Skia - 2D 图形库
版本: 0.31
描述
Skia 是一个开源的 2D 图形库,它提供了一套通用的 API,可在各种硬件和软件平台上使用。它是 Google Chrome 和 Chrome OS、Android、Flutter、Mozilla Firefox 和 Firefox OS 以及许多其他产品的图形引擎。
项目
Harlinn.skia
- Tools\3rdParty\Skia\skslc
Snappy - 压缩/解压缩库
版本:2021.08.02 的 master 分支
描述
Snappy 是一个压缩/解压缩库。它不追求极致的压缩率,也不追求与其他压缩库的兼容性;相反,它以极高的速度和合理的压缩率为目标。例如,与 zlib 的最快模式相比,Snappy 对于大多数输入而言速度快一个数量级,但产生的压缩文件大小会增加 20% 到 100%。
项目: Harlinn.snappy
SPIRV-Cross
版本: MoltenVK 1.1.5 版本使用的版本
描述
SPIRV-Cross 是一个用于解析 SPIR-V 并将其转换为其他着色器语言的工具。
项目: Harlinn.spirv-cross
SPIR-V 头文件
版本: 1.5.4
描述: 来自 https://github.com/KhronosGroup/SPIRV-Headers 的头文件
项目: Harlinn.spirv-headers
SPIR-V 工具
版本: 2021.3
描述
该项目包含用于 SPIR-V 的汇编器、二进制模块解析器、反汇编器、验证器和优化器。
项目: Harlinn.spirv-tools
sqlite3
版本: 3.36.0
描述
SQLite 是一个 C 语言库,它实现了一个小型、快速、自包含、高可靠性、功能齐全的 SQL 数据库引擎。
项目
Harlinn.SQLite3
- Tools\3rdParty\SQLite3\sqlite3
单一文件公共领域/开源库,依赖性最小 (STB)
版本: 截至 2021.09.10 的 master 分支
描述
小型、易于集成、可移植的库,可从 C 和/或 C++ 使用
项目: Harlinn.stb
SuperLU
版本: 5.2.2
描述
SuperLU 是一个通用的库,用于直接求解大型、稀疏、非对称线性方程组。
项目: Harlinn.superlu
LibTIFF
版本: 4.3.0
描述
此软件支持 Tag Image File Format (TIFF),这是一种广泛用于存储图像数据的格式。
项目: Harlinn.tiff
TinyXML-2
版本: 截至 2021.06.07 的 master 分支
描述
TinyXML-2 是一个简单、小型、高效的 C++ XML 解析器,可以轻松集成到其他程序中。
项目: Harlinn.tinyxml2
μpb: 小型、快速 C Protobuf
版本: 截至 2021.10.21 的 master 分支
描述
μpb (通常写为 'upb') 是一个用 C 编写的小型 protobuf 实现。
项目
Harlinn.upb
- Tools\3rdParty\upb\protoc-gen-upb
- Tools\3rdParty\upb\protoc-gen-upbdefs
uriparser
版本: 0.9.5
描述
uriparser
是一个严格遵守 RFC 3986 的 URI 解析和处理库,用 C89 (“ANSI C”) 编写。
项目: Harlinn.uriparser
libvorbis, libvorbisfile 和 libvorbisenc
版本: 1.3.7
描述
Vorbis 是一种通用的音频和音乐编码格式,与 MPEG-4 的 AAC 和 TwinVQ 同时代,是继 MPEG 音频层 3 之后的下一代格式。
项目: Harlinn.vorbis
Vulkan 头文件
版本: 截至 2021.09.21 的 main 分支
描述
Vulkan 头文件
项目: Harlinn.vulkan
Vulkan 内存分配器
版本: 2.3.0
描述
Vulkan® 内存分配器 (VMA) 库提供了一个简单易用的 API,帮助您为 Vulkan® 缓冲区和图像存储分配内存。
项目: Harlinn.vulkanmemoryallocator
libwebm
版本: 截至 2021.09.08 的 main 分支
描述
WebM 项目致力于开发一种高质量、开放的 Web 视频格式,该格式对所有人免费。
项目: Harlinn.webm
WebP - 适用于 Web 的图像格式
版本: 截至 2021.09.08 的 main 分支
描述
WebP 是一种现代图像格式,可为 Web 上的图像提供卓越的无损和有损压缩。使用 WebP,网站管理员和 Web 开发人员可以创建更小、更丰富的图像,使 Web 运行更快。
项目: Harlinn.webp
Xerces-C++ - 一个验证性 XML 解析器
版本: 3.2.3
描述
Xerces-C++ 是一个用可移植的 C++ 子集编写的验证性 XML 解析器。Xerces-C++ 使您的应用程序能够轻松地读写 XML 数据。
项目: Harlinn.xerces-c
XMP-Toolkit-SDK
版本: 6.0.0
描述
XMP Toolkit 允许您将 XMP 功能集成到您的产品或解决方案中。
项目: Harlinn.xmptoolkitsdk
libyuv
版本: 截至 2021-09-07 的 main 分支
描述
libyuv
是一个开源项目,包括 YUV 缩放和转换功能。
项目: Harlinn.yuv
zlib
版本: 1.2.11
描述
zlib 被设计成一个免费的、通用的、法律上不受限制的——也就是说,不受任何专利保护——无损数据压缩库,可用于几乎任何计算机硬件和操作系统。
项目: Harlinn.zlib
zlib-ng
版本: 截至 2021.05.08 的 develop 分支
描述
下一代系统的 zlib 数据压缩库
项目: Harlinn.zlibng
Zstandard (zstd)
版本: 截至 2021.08.04 的 dev 分支
描述
Zstandard,或简称 zstd,是一种快速无损压缩算法,目标是实现 zlib 级别或更好的压缩比的实时压缩场景。
项目: Harlinn.zstd
2022.01.26
- 改进了 Harlinn.Common.Core.Tests 中
BitVector
(BitVectorTests.cpp) 的测试。
2022.01.25
- 为
template<typename VectorT> BitVector
添加了功能。- 实现了
template<typename T> void append( const T* bits, size_t bitCount )
。 - 实现了
template<typename VectorU> void append( const BitVector<VectorU>& other )
。
- 实现了
- 在 Harlinn.Common.Core.Tests 的 BitVectorTests.cpp 中为
BitVector
添加了更多的单元测试。
2022.01.24
- 为
template<typename VectorT> BitVector
添加了功能。- 实现了
BitVector operator~( ) const
。 - 实现了
template<typename VectorU> void And( const BitVector<VectorU>& other )
。 - 实现了
template<typename VectorU> void Or( const BitVector<VectorU>& other )
。 - 实现了
template<typename VectorU> void Xor( const BitVector<VectorU>& other )
。 - 实现了
template<typename VectorU> BitVector& operator &= ( const BitVector<VectorU>& other )
。 - 实现了
template<typename VectorU> BitVector& operator |= ( const BitVector<VectorU>& other )
。 - 实现了
template<typename VectorU> BitVector& operator ^= ( const BitVector<VectorU>& other )
。 - 实现了
bool all( ) const noexcept
。 - 实现了
bool none( ) const noexcept
。 - 实现了
bool any( ) const
。
- 实现了
- 在 Harlinn.Common.Core.Tests 的 BitVectorTests.cpp 中为
BitVector
添加了更多的单元测试。
2022.01.23
- 为
template<typename VectorT> BitVector
添加了功能。- 实现了
explicit operator bool( ) const noexcept
。 - 实现了
constexpr bool empty( ) const noexcept
。 - 实现了
BitVector 构造函数
。 - 实现了
operator & ( const BitVector<VectorT>& lhs, const BitVector<VectorU>& rhs )
。 - 实现了
operator | ( const BitVector<VectorT>& lhs, const BitVector<VectorU>& rhs )
。 - 实现了
operator ^ ( const BitVector<VectorT>& lhs, const BitVector<VectorU>& rhs )
。
- 实现了
- 在 Harlinn.Common.Core.Tests 的 BitVectorTests.cpp 中为
BitVector
添加了更多的单元测试。
2022.01.22
- 为
template<typename VectorT> BitVector
添加了功能。- 实现了
void resize( size_t newSize, bool value = false )
。 - 实现了
void emplace_back( bool value )
。 - 实现了
void push_back( bool value )
。 - 实现了
template<size_t N> void append( const Bits<N> values )
。 - 实现了
template<typename T> void append( const T value, size_t bitCount = sizeof(T) * BitsPerByte )
。 - 实现了
void flip( ) noexcept
。 - 实现了
constexpr size_t capacity( ) const noexcept
。 - 实现了
void reserve( size_t numberOfBits )
。 - 实现了
void clear( )
。 - 实现了
void swap( BitVector& other ) noexcept
。 - 实现了
BitVector::reference
。 - 实现了
reference operator[]( size_t index ) noexcept
。 - 实现了
bool operator[]( size_t index ) const noexcept
。 - 实现了
bool test( size_t index ) const noexcept
。 - 实现了
template<typename VectorU> bool EqualTo( const BitVector<VectorU>& other ) const noexcept
。 - 实现了
template<typename VectorU> bool operator == ( const BitVector<VectorU>& other ) const noexcept
。 - 实现了
template<typename VectorU> bool operator != ( const BitVector<VectorU>& other ) const noexcept
。 - 实现了
word_type* data( ) noexcept
。 - 实现了
const word_type* data( ) const noexcept
。 - 实现了
constexpr size_t size( ) const noexcept
。 - 实现了
constexpr size_t DataSize( ) const noexcept
。 - 实现了
const VectorType& Vector( ) const noexcept
。
- 实现了
2022.01.21
- 改进了
template<size_t bitCount> Bits
的实现。- 对
template<size_t bitCount> Bits::reference
进行了性能改进。
- 对
2022.01.20
- 在 Harlinn.Common.Core.Tests 的 BitsTests.cpp 中为
template<size_t bitCount> Bits
添加了更多单元测试。 - 在 HCCMathPerfTest01 的 BitsOperations.cpp 中为
template<size_t bitCount> Bits
添加了更多性能测试。
2022.01.19
- 在 Harlinn.Common.Core.Tests 的 BitsTests.cpp 中为
template<size_t bitCount> Bits
添加了更多单元测试。
2022.01.18
- 修复了
template<size_t N> struct BitMask
中的一个 bug,该 bug 导致 N=8、N=16、N=32 和 N=64 的位掩码计算溢出 (HCCLib.h)。 - 实现了
template<size_t bitCount> Bits
。 - 在 Harlinn.Common.Core.Tests 中为
template<size_t bitCount> Bits
(BitsTests.cpp) 添加了单元测试。 - 在 HCCMathPerfTest01 中为
template<size_t bitCount> Bits
(BitsOperations.cpp) 添加了性能测试。
2022.01.17
- 添加了新的头文件 HCCBits.h。
- 添加了
template<size_t bitCount> Bits
。类似于
template< std::size_t N > class bitset
,此模板实现了一个固定大小的位容器。此模板使用能够容纳
bitCount
位所需的最小无符号整数来存储其值。它实现了与std::bitset
类似的 API。由于它使用无符号整数来存储位,因此bitCount
必须小于或等于 64。这也使得大多数操作比对std::bitset
进行相同操作快得多。我主要使用此模板来解析在网络上接收到的二进制、固定大小的位掩码。 - 添加了
template<typename VectorT> BitVector
。类似于
template<class Allocator> class vector<bool, Allocator>
,此模板实现了一个可变大小的位容器,但其 API 与template<size_t bitCount> Bits
类似。与std::vector<bool>
不同,BitVector
允许我指定用于存储位的容器,该容器必须是某种整数类型的类似std::vector
的容器。我主要使用此模板来解析在网络上接收到的二进制、可变大小的位掩码。想法是能够使用boost::container::small_vector
来存储位掩码,并避免对大约 99% 的接收到的位掩码进行动态内存分配。
- 添加了
- 修复了
FileSystemEntriesBase::Read( )
中的一个 bug。
2022.01.16
- 修复了 HCCTraits.h 中 WideStringType 概念声明中的 bug。
- 完成了 HCCwbem.h 中类的初始/最小实现。
- 添加了对常见 COM 接口的缺失包装器的初始实现。
- 将
ServiceProvider
添加到 HCCObj.h。
- 将
2022.01.15
- 添加了对常见 COM 接口的缺失包装器的初始实现。
- 将
OleLink
添加到 HCCObj.h。 - 将
OleItemContainer
添加到 HCCObj.h。 - 将
OleInPlaceUIWindow
添加到 HCCObj.h。 - 将
OleInPlaceActiveObject
添加到 HCCObj.h。 - 将
OleInPlaceFrame
添加到 HCCObj.h。 - 将
Continue
添加到 HCCObj.h。 - 将
DropSource
添加到 HCCObj.h。 - 将
DropTarget
添加到 HCCObj.h。 - 将
DropSourceNotify
添加到 HCCObj.h。 - 将
EnterpriseDropTarget
添加到 HCCObj.h。 - 将
CreateTypeInfo
添加到 HCCObj.h。 - 将
CreateTypeInfo2
添加到 HCCObj.h。 - 将
CreateTypeLib
添加到 HCCObj.h。 - 将
CreateTypeLib2
添加到 HCCObj.h。 - 将
TypeInfo2
添加到 HCCObj.h。 - 将
TypeChangeEvents
添加到 HCCObj.h。 - 将
TypeFactory
添加到 HCCObj.h。 - 将
TypeMarsha
添加到 HCCObj.h。 - 将
RecordInfo
添加到 HCCObj.h。 - 将
ErrorLog
添加到 HCCObj.h。 - 将
TypeLibRegistrationReader
添加到 HCCObj.h。 - 将
TypeLibRegistration
添加到 HCCObj.h。 - 将
ClassFactory2
添加到 HCCObj.h。 - 将
ProvideClassInfo2
添加到 HCCObj.h。 - 将
ProvideMultipleClassInfo
添加到 HCCObj.h。 - 将
OleControl
添加到 HCCObj.h。 - 将
OleControlSite
添加到 HCCObj.h。 - 将
PropertyPage
添加到 HCCObj.h。 - 将
PropertyPage2
添加到 HCCObj.h。 - 将
PropertyPageSite
添加到 HCCObj.h。 - 将
PropertyNotifySink
添加到 HCCObj.h。 - 将
SpecifyPropertyPages
添加到 HCCObj.h。 - 将
PersistMemory
添加到 HCCObj.h。 - 将
PersistStreamInit
添加到 HCCObj.h。 - 将
PersistPropertyBag
添加到 HCCObj.h。 - 将
SimpleFrameSite
添加到 HCCObj.h。 - 将
Font
添加到 HCCObj.h。 - 将
Picture
添加到 HCCObj.h。 - 将
Picture2
添加到 HCCObj.h。 - 将
FontEventsDisp
添加到 HCCObj.h。 - 将
FontDisp
添加到 HCCObj.h。 - 将
PictureDisp
添加到 HCCObj.h。 - 将
OleInPlaceObject
添加到 HCCObj.h。 - 将
OleInPlaceObjectWindowless
添加到 HCCObj.h。 - 将
OleInPlaceSite
添加到 HCCObj.h。 - 将
OleInPlaceSiteEx
添加到 HCCObj.h。 - 将
OleInPlaceSiteWindowless
添加到 HCCObj.h。 - 将
ViewObject
添加到 HCCObj.h。 - 将
ViewObject2
添加到 HCCObj.h。 - 将
ViewObjectEx
添加到 HCCObj.h。 - 将
OleUndoUnit
添加到 HCCObj.h。 - 将
OleParentUndoUnit
添加到 HCCObj.h。 - 将
EnumOleUndoUnits
添加到 HCCObj.h。 - 将
OleUndoManager
添加到 HCCObj.h。 - 将
PointerInactive
添加到 HCCObj.h。 - 将
ObjectWithSite
添加到 HCCObj.h。 - 将
PerPropertyBrowsing
添加到 HCCObj.h。 - 将
PropertyBag
添加到 HCCObj.h。 - 将
PropertyBag2
添加到 HCCObj.h。 - 将
PersistPropertyBag2
添加到 HCCObj.h。 - 将
AdviseSinkEx
添加到 HCCObj.h。 - 将
QuickActivate
添加到 HCCObj.h。
- 将
2022.01.14
- 将
template<...> class ObjectBase
添加到 HCCComImpl.h。 - 将
template<...>
class Interfaces 添加到 HCCComImpl.h。 - 向 Harlinn.Common.Core.Tests 添加了 ComInterfacesTests.cpp,用于验证
QueryInterface
对当前超过 1000 个不同 COM 接口是否有效。 - 向 Harlinn.Common.Core.Tests 添加了 ComImplTests.cpp,用于验证
class ObjectImpl : public Com::ObjectBase<ObjectImpl, IEnumString, IEnumVARIANT> { int value_ = 0; public: virtual HRESULT __stdcall Next( ULONG celt, LPOLESTR* rgelt, ULONG* pceltFetched ) override; virtual HRESULT __stdcall Next( ULONG celt, VARIANT* rgVar, ULONG* pCeltFetched ) override; virtual HRESULT __stdcall Skip( ULONG celt ) override; virtual HRESULT __stdcall Reset( ) override; virtual HRESULT __stdcall Clone( IEnumString** ppenum ) override; virtual HRESULT STDMETHODCALLTYPE Clone( IEnumVARIANT** ppEnum ) override; };
是实现了
IEnumString
和IEnumVARIANT
的 COM 对象的有效实现。演示了一种比替代 COM 实现框架更简单的实现。
2022.01.13
- 向 Harlinn.Common.Core 添加了 HCCComImpl.h:用于实现 COM 对象的类。
- 向 Harlinn.Common.Core 添加了 HCCComInterfaces.h。
struct Interface : std::false_type template<typename ...InterfaceTypes> { };
对许多派生自的常见 COM 接口进行了特化。
template<> struct Interface<IUnknown> : std::true_type { using InterfaceType = IUnknown; template<typename DerivedInterfaceType> static void* QueryInterface( const Guid& interfaceId, const DerivedInterfaceType* impl ) { if ( interfaceId == __uuidof( InterfaceType ) ) { auto* result = static_cast<InterfaceType*>( const_cast<DerivedInterfaceType*>( impl ) ); return result; } else { return nullptr; } } };
使用此宏实现了派生自 IUnknown 的接口的特化。
#define HCC_COM_DEFINE_INTERFACE( Itf, BaseItf ) \ template<> \ struct Interface<Itf> : Interface<BaseItf> \ { \ using Base = Interface<BaseItf>; \ using InterfaceType = Itf; \ template<typename DerivedInterfaceType> \ static void* QueryInterface( const Guid& interfaceId, const DerivedInterfaceType* impl ) \ { \ if ( interfaceId == __uuidof( InterfaceType ) ) \ { \ auto* result = static_cast<InterfaceType*>( const_cast<DerivedInterfaceType*>( impl ) ); \ return result; \ } \ else \ { \ return Base::QueryInterface<DerivedInterfaceType>( interfaceId, impl ); \ } \ } \ }
然后使用此宏来实现 Interface<...> 的特化,用于 COM 接口,例如:
HCC_COM_DEFINE_INTERFACE( IEnumString, IUnknown ); HCC_COM_DEFINE_INTERFACE( IClassFactory, IUnknown ); HCC_COM_DEFINE_INTERFACE( ISequentialStream, IUnknown ); HCC_COM_DEFINE_INTERFACE( IStream, ISequentialStream ); HCC_COM_DEFINE_INTERFACE( IPersist, IUnknown ); HCC_COM_DEFINE_INTERFACE( IPersistStream, IPersist ); HCC_COM_DEFINE_INTERFACE( IEnumMoniker, IUnknown ); HCC_COM_DEFINE_INTERFACE( IMoniker, IPersistStream ); . . .
2022.01.11
- 重新实现了 IUnknownImplementation;除了其他之外,还修复了 QueryInterface 中的一个棘手 bug。
- 继续重写 HWGraphics.h 中 Direct2D 的支持,在 Harlinn::Windows::Graphics 命名空间中重写了以下类/模板:
- CommandSink2
- GdiMetafile1
- GdiMetafileSink1
- SpriteBatch
- DeviceContext3
- Device3
- Factory4
- CommandSink3
- SvgGlyphStyle
- DeviceContext4
- Device4
- Factory5
- CommandSink4
- ColorContext1
- SvgAttribute
- SvgPaint
- SvgStrokeDashArray
- SvgPointCollection
- SvgPathData
- SvgElement
- SvgDocument
- DeviceContext5
- Device5
- Factory6
- CommandSink5
- DeviceContext6
- Device6
- Factory7
2022.01.10
- 继续重写 HWGraphics.h 中 Direct2D 的支持,在 Harlinn::Windows::Graphics 命名空间中重写了以下类/模板:
- Device
- Factory1
- Multithread
- GeometryRealization
- DeviceContext1
- Device1
- Factory2
- CommandSink1
- InkStyle
- Ink
- GradientMesh
- ImageSource
- ImageSourceFromWic
- TransformedImageSource
- LookupTable3D
- DeviceContext2
- Device2
- Factory3
2022.01.09
- 继续重写 HWGraphics.h 中 Direct2D 的支持,在 Harlinn::Windows::Graphics 命名空间中重写了以下类/模板:
- DeviceContextRenderTarget
- Factory
- GdiMetafileSink
- ID2D1GdiMetafileSinkImplementationBase
- GdiMetafile
- CommandSink
- ID2D1CommandSinkImplementationBase
- CommandList
- PrintControl
- ImageBrush
- BitmapBrush1
- StrokeStyle1
- PathGeometry1
- Properties
- Effect
- Bitmap1
- GradientStopCollection1
- DrawingStateBlock1
- DeviceContext
2022.01.08
- 将 DirectWrite 的支持从 HWGraphics.h 和 Harlinn::Windows::Graphics 命名空间移出,移入 HWDWrite.h 和 Harlinn::Windows::DirectWrite 命名空间。
- 重写了 HWGraphics.h 中 Direct2D 的支持,在 Harlinn::Windows::Graphics 命名空间中重写了以下类/模板:
- Resource
- Image
- ColorContext
- Bitmap
- GradientStopCollection
- Brush
- BitmapBrush
- SolidColorBrush
- LinearGradientBrush
- RadialGradientBrush
- StrokeStyle
- Geometry
- RectangleGeometry
- RoundedRectangleGeometry
- EllipseGeometry
- GeometryGroup
- TransformedGeometry
- SimplifiedGeometrySink
- ID2D1SimplifiedGeometrySinkImplementationBase
- GeometrySink
- ID2D1GeometrySinkImplementationBase
- TessellationSink
- ID2D1TessellationSinkImplementationBase
- PathGeometry
- Mesh
- Layer
- DrawingStateBlock
- RenderTarget
- BitmapRenderTarget
- ControlRenderTarget
- GdiInteropRenderTarget
此次重写提供了更好的文档、改进的错误处理、对处理原始 COM 接口的改进支持以及与我早在 2012 年创建的 API 相比改进的 API。
2022.01.06/07
- 向 Tools\WMI\CIMTool 添加了新类。
- Renderable
- TreeNode
- 命令
- CommandManager
- Window
- MenuItem
- SubMenuItem
- Menu
- ClassObjectNode
- NamespaceNode
- Connection
- ConnectionManager
- ExplorerWindow
- PropertiesWindow
- FileMenu
- EditMenu
- ViewMenu
- MainMenuBar
- Main
2022.01.05
- 添加了新项目 Tools\WMI\CIMTool - 一个用于探索 Windows Management Instrumentation (WMI) API 的工具,使用 ImGui 实现。
2022.01.04
- 添加了新项目 Examples\Core\WMI\HCCExampleSimpleWMIClient。
- 添加了新项目 Examples\Core\WMI\HCCExampleSimpleAsyncWMIClient。
2022.01.03
- 添加了更多用于与 Windows Management Instrumentation (WMI) API 交互的类。
- WbemMethodSignature
- WbemMethod
2022.01.02
- 添加了用于与 Windows Management Instrumentation (WMI) API 交互的类。
- WbemProperty
- WbemClassObject
- WbemObjectAccess
- WbemQualifierSet
- WbemServices
- WbemLocator
- WbemObjectSink
- EnumWbemClassObject
- WbemCallResult
- WbemContext
- UnsecuredApartment
- WbemUnsecuredApartment
- WbemStatusCodeText
- WbemBackupRestore
- WbemBackupRestoreEx
- WbemRefresher
- WbemHiPerfEnum
- WbemConfigureRefresher
- WbemObjectSinkEx
- WbemShutdown
- WbemObjectTextSrc
- MofCompiler
- WbemPropertyProvider
- WbemUnboundObjectSink
- WbemEventProvider
- WbemEventProviderQuerySink
- WbemEventProviderSecurity
- WbemEventConsumerProvider
- WbemProviderInitSink
- WbemProviderInit
- WbemHiPerfProvider
- WbemDecoupledRegistrar
- WbemProviderIdentity
- WbemDecoupledBasicEventProvider
- WbemEventSink
- WbemTransport
- WbemLevel1Login
- WbemConnectorLogin
- WbemAddressResolution
- WbemClientTransport
- WbemClientConnectionTransport
- WbemConstructClassObject
2022.01.01
- 添加了用于与 Windows Location API 交互的类。
- LocationReport
- LatLongReport
- CivicAddressReport
- Location
- LocationPower
- DefaultLocation
- DispLatLongReport
- DispCivicAddressReport
- LocationReportFactory
- LatLongReportFactory
- CivicAddressReportFactory
- 添加了用于与 Windows 传感器 API 交互的类。
- WpdSerializer
- PortableDeviceValues
- PortableDeviceKeyCollection
- PortableDevicePropVariantCollection
- PortableDeviceValuesCollection
- SensorManager
- LocationPermissions
- SensorCollection
- Sensor
- SensorDataReport
- SensorManagerEvents
- SensorEvents
- SensorManagerEventSinkBase
- SensorManagerEventSink
- SensorEventSinkBase
- SensorEventSink
2021.12.29
- 向 Harlinn.Common.Core 添加了用于串行端口设备 I/O 的类。
- DeviceControlBlock
- CommConfig
- SerialPort
- SerialPorts
- CommDeviceStream
- CommDeviceRequest
- ReadCommDeviceRequest
- WriteCommDeviceRequest
- CommDeviceHandler
- CommDeviceDispatcher
- 向 Harlinn.ImGui 添加了几个后端:DirectX 9 到 11:OpenGL 2 和 3;以及 Vulkan。
2021.12.28
- 将 Harlinn.ImGui 更新到 Docking 分支,合并了 master 分支的 1.86 版本,将 ImPlot 更新到 0.12 版本。
- 修复了构建问题,重建了整个解决方案(Debug 和 Release)。
- 修复了 Harlinn.gdal 构建时 Harlinn.tiff 缺失的导出。
2021.12.27
- 添加了新项目 Examples\3rdParty\bullet\BulletBasicDemo。
- 将 bullet\examples\Importers 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\examples\OpenGLWindow 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\examples\Importers 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\Extras\Serialize 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\Extras\InverseDynamics 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\Extras\HACD 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\Extras\GIMPACTUtils 添加到 3rdParty\Harlinn.bullet。
- 将 bullet\Extras\ConvexDecomposition 添加到 3rdParty\Harlinn.bullet。
- 添加了新项目 3rdParty\Harlinn.rtmidi。
- 添加了新项目 3rdParty\Harlinn.gwen。
- 添加了新项目 3rdParty\Harlinn.enet。
- 添加了新项目 3rdParty\Harlinn.crossguid。
- 添加了新项目 3rdParty\Harlinn.base64。
- 添加了新项目 Tools\3rdParty\lua\luac。
- 添加了新项目 Tools\3rdParty\lua\lua。
- 添加了新项目 3rdParty\Harlinn.lua。
- 添加了新项目 3rdParty\Harlinn.clsocket。
2021.12.26
- 添加了新项目 3rdParty\Harlinn.BussIK。
- 添加了新项目 3rdParty\Harlinn.glad。
2021.12.23
- 向 Tests\3rdParty\bullet\Harlinn.bullet.tests 添加了 31 个测试。
- 添加了新项目 Tests\3rdParty\bullet\Harlinn.bullet.tests。
2021.12.22
- 添加了新项目 3rdParty\Harlinn.Eigen。
2021.12.21
- 添加了新项目 3rdParty\Harlinn.bullet。
- 添加了新项目 3rdParty\Harlinn.tinyobjloader。
- 添加了新项目 Examples\3rdParty\flatbuffers\FlatbuffersGreeterClient。
- 添加了新项目 Examples\3rdParty\flatbuffers\FlatbuffersGreeterServer。
- 添加了新项目 Tools\3rdParty\flatbuffers\flatc。
- 添加了新项目 3rdParty\Harlinn.flatbuffers。
2021.12.20
- 更新了 Harlinn.Julia,所需的 Julia 版本现为 1.7。
- 添加了新项目 Tools\3rdParty\proj\projinfo。
- 添加了新项目 Tools\3rdParty\proj\gie。
- 添加了新项目 Tools\3rdParty\proj\proj。
- 添加了新项目 Tools\3rdParty\proj\geod。
- 添加了新项目 Tools\3rdParty\proj\cs2cs。
- 添加了新项目 Tools\3rdParty\proj\projsync。
- 添加了新项目 Tools\3rdParty\proj\cct。
2021.12.19
- 添加了新项目 Examples\3rdParty\rocksdb\RocksDBOptimisticTransactionExample。
- 添加了新项目 Examples\3rdParty\rocksdb\RocksDBCompactionFilterExample。
- 添加了新项目 Examples\3rdParty\rocksdb\RocksDBCompactFilesExample。
- 添加了新项目 Examples\3rdParty\rocksdb\RocksDBColumnFamiliesExample。
- 添加了新项目 Tools\3rdParty\rocksdb\rocksdb_dump。
- 添加了新项目 Tools\3rdParty\rocksdb\rocksdb_undump。
- 添加了新项目 Tools\3rdParty\rocksdb\write_stress。
- 添加了新项目 Tools\3rdParty\rocksdb\trace_analyzer。
- 添加了新项目 Tools\3rdParty\rocksdb\sst_dump。
- 添加了新项目 Tools\3rdParty\rocksdb\io_tracer_parser。
2021.12.18
- 添加了新项目 Tools\3rdParty\rocksdb\db_sanity_test。
- 添加了新项目 Tools\3rdParty\rocksdb\db_repl_stress。
- 添加了新项目 Tools\3rdParty\rocksdb\db_bench。
- 添加了新项目 Tools\3rdParty\rocksdb\ldb。
- 添加了新项目 Examples\3rdParty\rocksdb\RocksDBSimpleExample2。
- 修改了 3rdParty\Harlinn.rocksdb,使 Harlinn.rocksdb.dll 现在导出 C++ API。
2021.12.17
- 添加了新项目 Examples\3rdParty\rocksdb\RocksDBSimpleExample。
- 添加了新项目 Tools\3rdParty\rocksdb\blob_dump。
- 添加了新项目 Tools\3rdParty\rocksdb\cache_bench。
- 将 3rdParty\Harlinn.rocksdb 升级到 rocksdb 6.26.1。
- 向 Tools\3rdParty\gdal\gdal_tests 添加了 5 个测试,总计 84 个测试。
2021.12.16
- 向 Tools\3rdParty\gdal\gdal_tests 添加了 79 个测试。
- 将 gdal 运行时数据文件添加到 Share\gdal。
- 将 proj 运行时数据文件添加到 Share\proj。
2021.12.15
- 添加了新项目 Harlinn.Java - Java Native Interface 的一个轻量级包装器。动态定位 jvm.dll。
2021.12.14
- 添加了新项目 Tools\3rdParty\gdal\gdal_tests。
- 将 3rdParty\Harlinn.jxl 升级到 libjxl 0.6.1。
- 将 3rdParty\Harlinn.gdal 升级到 gdal 3.4。
- 使用来自 gdal 3.4 的修改更新了 3rdParty\Harlinn.tiff。
- 添加了新项目 Tools\3rdParty\gdal\dumpoverviews。
- 添加了新项目 Tools\3rdParty\gdal\gdal_contour。
- 添加了新项目 Tools\3rdParty\gdal\gdal_create。
- 添加了新项目 Tools\3rdParty\gdal\gdal_grid。
- 添加了新项目 Tools\3rdParty\gdal\gdal_rasterize。
- 添加了新项目 Tools\3rdParty\gdal\gdal_translate。
- 添加了新项目 Tools\3rdParty\gdal\gdal_viewshed。
- 添加了新项目 Tools\3rdParty\gdal\gdal2ogr。
- 添加了新项目 Tools\3rdParty\gdal\gdaladdo。
- 添加了新项目 Tools\3rdParty\gdal\gdasyncread。
- 添加了新项目 Tools\3rdParty\gdal\gdalbuildvrt。
- 添加了新项目 Tools\3rdParty\gdal\gdaldem。
- 添加了新项目 Tools\3rdParty\gdal\gdalenhance。
- 添加了新项目 Tools\3rdParty\gdal\gdalflattenmask。
- 添加了新项目 Tools\3rdParty\gdal\gdalinfo。
- 添加了新项目 Tools\3rdParty\gdal\gdallocationinfo。
- 添加了新项目 Tools\3rdParty\gdal\gdalmanage。
- 添加了新项目 Tools\3rdParty\gdal\gdalmdiminfo。
- 添加了新项目 Tools\3rdParty\gdal\gdalmultidimtranslate。
- 添加了新项目 Tools\3rdParty\gdal\gdalsrsinfo。
- 添加了新项目 Tools\3rdParty\gdal\gdaltindex。
- 添加了新项目 Tools\3rdParty\gdal\gdaltorture。
- 添加了新项目 Tools\3rdParty\gdal\gdaltransform。
- 添加了新项目 Tools\3rdParty\gdal\gdalwarp。
- 添加了新项目 Tools\3rdParty\gdal\gnmanalyse。
- 添加了新项目 Tools\3rdParty\gdal\gnmmanage。
- 添加了新项目 Tools\3rdParty\gdal\nearblack。
- 添加了新项目 Tools\3rdParty\gdal\ogr2ogr。
- 添加了新项目 Tools\3rdParty\gdal\ogrinfo。
- 添加了新项目 Tools\3rdParty\gdal\ogrlineref。
- 添加了新项目 Tools\3rdParty\gdal\ogrtindex。
2021.12.12
- 向 Tests\3rdParty\skia\skia_test 添加了新的项目。相当多的测试可以正常工作,大约 1500 个,然后测试程序终止。据我所知,这似乎与测试代码有关。
- 更改了 3rdParty\Harlinn.skia 的构建,以支持 Vulkan、Open GL 和 DirectX 3D。暂时移除了 3rdParty\Harlinn.skia 中对 3rdParty\Harlinn.Angle 的支持。