65.9K
CodeProject 正在变化。 阅读更多。
Home

Harlinn.Windows - Visual Studio 2022 解决方案

starIconstarIconstarIconstarIconstarIcon

5.00/5 (40投票s)

2021 年 12 月 10 日

CPOL

52分钟阅读

viewsIcon

93211

downloadIcon

18444

Harlinn.Windows 是我整合的一系列库,它们是我工作中使用的运行时很大一部分。

下载最后更新于 2022 年 1 月 26 日。有关更改的信息可在本文末尾找到。

如果您在下载完整的代码存档(单个 zip 文件)时遇到问题,以下所有文件都提供了分卷 zip 文件的下载方式。

注意:如果您下载的是单个文件,请将每个文件的内容解压到一个目录中,然后使用 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?

这是一个好问题,起初我确实尝试过,但遇到了一些障碍。

  1. 使用 vcpkg 构建的 grpc.lib 的发布版本大小为 325 MB;而 Harlinn.grpc.dll 的发布版本大小仅为 3.7 MB。目前,为解决方案的发布版本构建的所有本机 DLL 的总大小为 108 MB。
  2. 某些包依赖于相同包的不同版本,包括它们自己的私有副本。
  3. 有些包是以开启 /sdl 选项编译的,而有些则没有。我倾向于在发布版本中关闭 /sdl/GS,而在调试版本中开启它们。这可能不像以前那么重要了,但关闭 /sdl/GS 确实可以获得更好的性能。
  4. 许多包无法与
    • /std:c++latest 选项一起编译,该选项“启用当前已实现的所有编译器和标准库功能,以及一些正在进行和实验性的功能。”
  5. 许多包创建静态库,而不是 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: 1175
  • Harlinn.Windows.Tests: 271
  • Harlinn.OCI.Tests: 49
  • Harlinn.ODBC.Tests: 9
  • Harlinn.Timeseries.Tests: 10
  • Harlinn.Julia.Tests: 11
  • Harlinn.Common.Config.Tests: 34

所有测试都可以在 Tests 文件夹下找到。

示例代码呢?

到目前为止,我包含了 190 个示例项目。

所有示例都可以在 ExamplesDotNet\Examples 文件夹下找到。

它的稳定性如何?

这是解决方案的一个快照,虽然大部分功能似乎都能正常工作,但难免会有些小问题。最常见的问题可能是某个函数或变量未从 DLL 导出,而且可能还有其他错误。其中一些,可能是我自己造成的。

尽管如此,有了这个解决方案,您现在可以:

  • 使用 Open GL ES 在 DirectX 3D 之上创建图形应用程序

  • 创建精美的 2D 效果

  • 创建动画 3D 可视化

  • 使用 Visual Studio 2022 和 C++ 学习一些最常用的开源包。

Harlinn.Common.Core

Harlinn.Common.Core 是一个打包为 DLL 的库,它提供了对大多数 Windows C++ 项目有用的功能。

依赖项

  1. boost C++ 库

Harlinn.Common.Core 中包含的其他第三方代码

Harlinn.Common.Core 库包含来自多个库的代码。

  1. {fmt} 库,版本 8.0.1,作者:Victor Zverovich
  2. xxHash 库,版本 0.8.1
  3. CRC-32C (Castagnoli) for C++ 库
  4. xxhash_cx 库

关于 char, wchar_t, signed char 和 unsigned char

该库试图将 charwchar_t 作为仅用于表示字符数据的类型来处理,而 signed charunsigned 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 期望 buffer1buffer5 是零终止的;但由于它们不是,编译器将无法评估 LengthOf( buffer1 )LengthOf( buffer5 )LengthOf( buffer3 )LengthOf( buffer6 ) 的计算结果为 5,而 LengthOf( buffer2 )LengthOf( buffer4 ) 的计算结果为 3。

HCCPersistent.h 中的代码(由 HCCLogger.h 中的代码使用)依赖于此,从而消除了运行时对 strlenwcslen 的大量调用。

主头文件

  • 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,或根据参数类型的字节大小直接返回参数。floatdoubleenumByteSwap 实现为

      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
      ab 之间的绝对差值小于 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 如果 xy 保存相同的值,即使它们保存 NaN 值。
    • IsZero:
      constexpr bool IsZero( double x ) noexcept;
      constexpr bool IsZero( float x ) noexcept;

      如果 x0.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 的符号,返回 -10+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;

      返回 xy 方向上的下一个可表示值。

    • 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;

      如果 valNaN,则返回 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 * 2exp

    • 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;
      计算 ab 之间的线性插值,参数为 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_RADIXn 次幂。

    • 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

      分别计算 yy/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: 初始化并管理与 D3D12DeviceDXGI::SwapChain3D3D12GraphicsCommandList 以及与 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.hHWMessage.hHWMenu.hHWForm.hHWApplication.hHWStdCtrls.hHWFileDialog.hHWSkia.h 旨在一起使用,而 HWDXGI.hHWGraphicsD3D12.hHWGraphics.hHWImaging.hHWHandles.h 可以单独使用。

如今,我经常使用位于 3rdParty\Harlinn.ImGui 下的 Dear ImGuiImPlot 的稍作修改的版本,来为我的 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

版本: 3.21

描述

用于 VR、游戏、视觉效果、机器人、机器学习等的实时碰撞检测和多物理模拟。

项目Harlinn.bullet

逆向运动学

版本:来自 bullet 3.21

描述

选择性阻尼最小二乘法用于逆向运动学。

项目Harlinn.BussIK

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

版本: 1.41.1

描述

提供编写跨平台套接字代码的机制。该库最初只支持阻塞 TCP 套接字。多年来,它已扩展到支持 UDP 和 RAW 套接字。

项目Harlinn.clsocket

crossguid

版本: 0.2.2

描述

CrossGuid 是一个最小、跨平台、C++ 的 GUID 库。它使用给定平台上的最佳本机 GUID/UUID 生成器,并提供一个通用的类来解析、字符串化和比较 ID。GUID 生成技术取决于您的平台。

项目Harlinn.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

版本: 3.4.0

描述

Eigen 是一个用于线性代数(矩阵、向量、数值求解器及相关算法)的 C++ 模板库。

项目Harlinn.Eigen

ENet

版本: 1.3.17

描述

ENet 的目的是在 UDP(用户数据报协议)之上提供一个相对轻量、简单且健壮的网络通信层。它提供的主要功能是可选的可靠、有序的数据包传输。

项目Harlinn.enet

Expat

版本: 2.4.1

描述

这是 Expat,一个由 James Clark 于 1997 年推出的 C 语言 XML 解析库。Expat 是一个流式 XML 解析器。这意味着您在开始解析之前向解析器注册处理程序。当解析器在正在解析的文档中发现相关结构时,将调用这些处理程序。开始标签是一个示例,您可以在其中注册处理程序。

项目Harlinn.expat

FlatBuffers

版本: 2.0.0

描述

FlatBuffers 是一个高效的跨平台序列化库,支持 C++、C#、C、Go、Java、Kotlin、JavaScript、Lobster、Lua、TypeScript、PHP、Python、Rust 和 Swift。它最初由 Google 为游戏开发和其他性能关键型应用程序创建。

项目Harlinn.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

版本:来自 bullet 3.21

描述

一个 C++ GUI 库。

项目Harlinn.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 ImGuiImPlot

版本: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;
    };

    是实现了 IEnumStringIEnumVARIANT 的 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 的支持。
© . All rights reserved.