simplejsble 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/VERSION +1 -0
  2. package/android/CMakeLists.txt +62 -20
  3. package/cmake/epilogue.cmake +81 -0
  4. package/cmake/find/FindDBus1.cmake +20 -0
  5. package/cmake/find/Findfmt.cmake +41 -0
  6. package/cmake/find/Findgoogletest.cmake +18 -0
  7. package/cmake/parse_version.cmake +45 -0
  8. package/cmake/prelude.cmake +8 -0
  9. package/dependencies/README +4 -0
  10. package/dependencies/external/kvn/kvn_bytearray.h +297 -0
  11. package/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  12. package/dependencies/external/kvn/logfwd.hpp +35 -0
  13. package/dependencies/internal/include/fmt/LICENSE +27 -0
  14. package/dependencies/internal/include/fmt/args.h +220 -0
  15. package/dependencies/internal/include/fmt/base.h +2962 -0
  16. package/dependencies/internal/include/fmt/chrono.h +2338 -0
  17. package/dependencies/internal/include/fmt/color.h +610 -0
  18. package/dependencies/internal/include/fmt/compile.h +539 -0
  19. package/dependencies/internal/include/fmt/core.h +5 -0
  20. package/dependencies/internal/include/fmt/format-inl.h +1949 -0
  21. package/dependencies/internal/include/fmt/format.h +4244 -0
  22. package/dependencies/internal/include/fmt/os.h +427 -0
  23. package/dependencies/internal/include/fmt/ostream.h +166 -0
  24. package/dependencies/internal/include/fmt/printf.h +633 -0
  25. package/dependencies/internal/include/fmt/ranges.h +850 -0
  26. package/dependencies/internal/include/fmt/std.h +726 -0
  27. package/dependencies/internal/include/fmt/xchar.h +373 -0
  28. package/dependencies/internal/include/nanopb/pb.h +948 -0
  29. package/dependencies/internal/include/nanopb/pb_common.h +49 -0
  30. package/dependencies/internal/include/nanopb/pb_decode.h +204 -0
  31. package/dependencies/internal/include/nanopb/pb_encode.h +195 -0
  32. package/dependencies/internal/include/simplejni/Common.hpp +598 -0
  33. package/dependencies/internal/include/simplejni/References.hpp +151 -0
  34. package/dependencies/internal/include/simplejni/Registry.hpp +249 -0
  35. package/dependencies/internal/include/simplejni/VM.hpp +93 -0
  36. package/dependencies/internal/src/nanopb/pb_common.c +388 -0
  37. package/dependencies/internal/src/nanopb/pb_decode.c +1763 -0
  38. package/dependencies/internal/src/nanopb/pb_encode.c +1009 -0
  39. package/dependencies/internal/src/simplejni/Common.cpp +4 -0
  40. package/package.json +5 -1
  41. package/simpleble/CMakeLists.txt +519 -0
  42. package/simpleble/cmake/simpleble.pc.in +11 -0
  43. package/simpleble/include/simpleble/Adapter.h +102 -0
  44. package/simpleble/include/simpleble/AdapterSafe.h +58 -0
  45. package/simpleble/include/simpleble/Advanced.h +50 -0
  46. package/simpleble/include/simpleble/Characteristic.h +39 -0
  47. package/simpleble/include/simpleble/Config.h +64 -0
  48. package/simpleble/include/simpleble/Descriptor.h +30 -0
  49. package/simpleble/include/simpleble/Exceptions.h +72 -0
  50. package/simpleble/include/simpleble/Logging.h +73 -0
  51. package/simpleble/include/simpleble/Peripheral.h +82 -0
  52. package/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  53. package/simpleble/include/simpleble/Service.h +34 -0
  54. package/simpleble/include/simpleble/SimpleBLE.h +8 -0
  55. package/simpleble/include/simpleble/Types.h +49 -0
  56. package/simpleble/include/simpleble/Utils.h +13 -0
  57. package/simpleble/include/simpleble_c/DEPRECATED +2 -0
  58. package/simpleble/include/simpleble_c/adapter.h +188 -0
  59. package/simpleble/include/simpleble_c/logging.h +37 -0
  60. package/simpleble/include/simpleble_c/peripheral.h +304 -0
  61. package/simpleble/include/simpleble_c/simpleble.h +21 -0
  62. package/simpleble/include/simpleble_c/types.h +73 -0
  63. package/simpleble/include/simpleble_c/utils.h +27 -0
  64. package/simpleble/src/CommonUtils.h +63 -0
  65. package/simpleble/src/Config.cpp +25 -0
  66. package/simpleble/src/Exceptions.cpp +31 -0
  67. package/simpleble/src/Logging.cpp +136 -0
  68. package/simpleble/src/LoggingInternal.h +85 -0
  69. package/simpleble/src/Utils.cpp +24 -0
  70. package/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  71. package/simpleble/src/backends/android/AdapterAndroid.h +67 -0
  72. package/simpleble/src/backends/android/BackendAndroid.cpp +41 -0
  73. package/simpleble/src/backends/android/BackendAndroid.h +26 -0
  74. package/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  75. package/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  76. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  77. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  78. package/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  79. package/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  80. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  81. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  82. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  83. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  84. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  85. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  86. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  87. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  88. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  89. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  90. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  91. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  92. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  93. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  94. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  95. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  96. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  97. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  98. package/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  99. package/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  100. package/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  101. package/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  102. package/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  103. package/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  104. package/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  105. package/simpleble/src/backends/android/types/java/util/List.h +27 -0
  106. package/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  107. package/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  108. package/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  109. package/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  110. package/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  111. package/simpleble/src/backends/common/AdapterBase.h +81 -0
  112. package/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  113. package/simpleble/src/backends/common/BackendBase.h +20 -0
  114. package/simpleble/src/backends/common/BackendUtils.h +33 -0
  115. package/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  116. package/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  117. package/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  118. package/simpleble/src/backends/common/DescriptorBase.h +19 -0
  119. package/simpleble/src/backends/common/PeripheralBase.h +82 -0
  120. package/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  121. package/simpleble/src/backends/common/ServiceBase.h +28 -0
  122. package/simpleble/src/backends/dongl/AdapterBaseTypes.h +22 -0
  123. package/simpleble/src/backends/dongl/AdapterDongl.cpp +369 -0
  124. package/simpleble/src/backends/dongl/AdapterDongl.h +60 -0
  125. package/simpleble/src/backends/dongl/BackendDongl.cpp +35 -0
  126. package/simpleble/src/backends/dongl/PeripheralDongl.cpp +562 -0
  127. package/simpleble/src/backends/dongl/PeripheralDongl.h +136 -0
  128. package/simpleble/src/backends/dongl/protocol/basic.pb.c +33 -0
  129. package/simpleble/src/backends/dongl/protocol/basic.pb.h +172 -0
  130. package/simpleble/src/backends/dongl/protocol/d2h.pb.c +18 -0
  131. package/simpleble/src/backends/dongl/protocol/d2h.pb.h +118 -0
  132. package/simpleble/src/backends/dongl/protocol/h2d.pb.c +12 -0
  133. package/simpleble/src/backends/dongl/protocol/h2d.pb.h +69 -0
  134. package/simpleble/src/backends/dongl/protocol/simpleble.pb.c +123 -0
  135. package/simpleble/src/backends/dongl/protocol/simpleble.pb.h +908 -0
  136. package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +18 -0
  137. package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +815 -0
  138. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +339 -0
  139. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +2086 -0
  140. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +114 -0
  141. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +772 -0
  142. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +117 -0
  143. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +766 -0
  144. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +207 -0
  145. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +1686 -0
  146. package/simpleble/src/backends/dongl/serial/Protocol.cpp +887 -0
  147. package/simpleble/src/backends/dongl/serial/Protocol.h +117 -0
  148. package/simpleble/src/backends/dongl/serial/ProtocolBase.cpp +95 -0
  149. package/simpleble/src/backends/dongl/serial/ProtocolBase.h +54 -0
  150. package/simpleble/src/backends/dongl/serial/Wire.cpp +133 -0
  151. package/simpleble/src/backends/dongl/serial/Wire.h +116 -0
  152. package/simpleble/src/backends/dongl/usb/UsbHelper.cpp +53 -0
  153. package/simpleble/src/backends/dongl/usb/UsbHelper.h +32 -0
  154. package/simpleble/src/backends/dongl/usb/UsbHelperApple.cpp +266 -0
  155. package/simpleble/src/backends/dongl/usb/UsbHelperApple.h +34 -0
  156. package/simpleble/src/backends/dongl/usb/UsbHelperImpl.h +29 -0
  157. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.cpp +21 -0
  158. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.h +22 -0
  159. package/simpleble/src/backends/dongl/usb/UsbHelperNull.cpp +21 -0
  160. package/simpleble/src/backends/dongl/usb/UsbHelperNull.h +22 -0
  161. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.cpp +21 -0
  162. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.h +22 -0
  163. package/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  164. package/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  165. package/simpleble/src/backends/linux/BackendBluez.cpp +90 -0
  166. package/simpleble/src/backends/linux/PeripheralLinux.cpp +394 -0
  167. package/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  168. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.cpp +102 -0
  169. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.h +55 -0
  170. package/simpleble/src/backends/linux_legacy/BackendBluezLegacy.cpp +87 -0
  171. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.cpp +376 -0
  172. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.h +90 -0
  173. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Adapter.h +46 -0
  174. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Agent.h +52 -0
  175. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Bluez.h +37 -0
  176. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrg.h +22 -0
  177. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrgBluez.h +26 -0
  178. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezRoot.h +32 -0
  179. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Characteristic.h +47 -0
  180. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Descriptor.h +33 -0
  181. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Device.h +64 -0
  182. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Exceptions.h +43 -0
  183. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Service.h +27 -0
  184. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Types.h +9 -0
  185. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Adapter1.h +49 -0
  186. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Agent1.h +100 -0
  187. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/AgentManager1.h +24 -0
  188. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Battery1.h +32 -0
  189. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Device1.h +62 -0
  190. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattCharacteristic1.h +48 -0
  191. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattDescriptor1.h +41 -0
  192. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattService1.h +28 -0
  193. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Interface.h +67 -0
  194. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/InterfaceRegistry.h +62 -0
  195. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Proxy.h +117 -0
  196. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Connection.h +50 -0
  197. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Exceptions.h +56 -0
  198. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Holder.h +147 -0
  199. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Logging.h +57 -0
  200. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Message.h +89 -0
  201. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Path.h +24 -0
  202. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/interfaces/ObjectManager.h +26 -0
  203. package/simpleble/src/backends/linux_legacy/src/Adapter.cpp +78 -0
  204. package/simpleble/src/backends/linux_legacy/src/Agent.cpp +72 -0
  205. package/simpleble/src/backends/linux_legacy/src/Bluez.cpp +45 -0
  206. package/simpleble/src/backends/linux_legacy/src/BluezOrg.cpp +20 -0
  207. package/simpleble/src/backends/linux_legacy/src/BluezOrgBluez.cpp +23 -0
  208. package/simpleble/src/backends/linux_legacy/src/BluezRoot.cpp +44 -0
  209. package/simpleble/src/backends/linux_legacy/src/Characteristic.cpp +64 -0
  210. package/simpleble/src/backends/linux_legacy/src/Descriptor.cpp +27 -0
  211. package/simpleble/src/backends/linux_legacy/src/Device.cpp +104 -0
  212. package/simpleble/src/backends/linux_legacy/src/Exceptions.cpp +29 -0
  213. package/simpleble/src/backends/linux_legacy/src/Service.cpp +33 -0
  214. package/simpleble/src/backends/linux_legacy/src/advanced/Interface.cpp +155 -0
  215. package/simpleble/src/backends/linux_legacy/src/advanced/Proxy.cpp +374 -0
  216. package/simpleble/src/backends/linux_legacy/src/base/Connection.cpp +219 -0
  217. package/simpleble/src/backends/linux_legacy/src/base/Exceptions.cpp +39 -0
  218. package/simpleble/src/backends/linux_legacy/src/base/Holder.cpp +739 -0
  219. package/simpleble/src/backends/linux_legacy/src/base/Message.cpp +622 -0
  220. package/simpleble/src/backends/linux_legacy/src/base/Path.cpp +129 -0
  221. package/simpleble/src/backends/linux_legacy/src/interfaces/Adapter1.cpp +123 -0
  222. package/simpleble/src/backends/linux_legacy/src/interfaces/Agent1.cpp +143 -0
  223. package/simpleble/src/backends/linux_legacy/src/interfaces/AgentManager1.cpp +34 -0
  224. package/simpleble/src/backends/linux_legacy/src/interfaces/Battery1.cpp +30 -0
  225. package/simpleble/src/backends/linux_legacy/src/interfaces/Device1.cpp +170 -0
  226. package/simpleble/src/backends/linux_legacy/src/interfaces/GattCharacteristic1.cpp +118 -0
  227. package/simpleble/src/backends/linux_legacy/src/interfaces/GattDescriptor1.cpp +78 -0
  228. package/simpleble/src/backends/linux_legacy/src/interfaces/GattService1.cpp +28 -0
  229. package/simpleble/src/backends/linux_legacy/src/interfaces/ObjectManager.cpp +58 -0
  230. package/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  231. package/simpleble/src/backends/macos/AdapterBaseMacOS.mm +235 -0
  232. package/simpleble/src/backends/macos/AdapterMac.h +78 -0
  233. package/simpleble/src/backends/macos/AdapterMac.mm +156 -0
  234. package/simpleble/src/backends/macos/BackendCoreBluetooth.mm +45 -0
  235. package/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  236. package/simpleble/src/backends/macos/PeripheralBaseMacOS.mm +714 -0
  237. package/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  238. package/simpleble/src/backends/macos/PeripheralMac.mm +229 -0
  239. package/simpleble/src/backends/macos/Utils.h +9 -0
  240. package/simpleble/src/backends/macos/Utils.mm +23 -0
  241. package/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  242. package/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  243. package/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  244. package/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  245. package/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  246. package/simpleble/src/backends/windows/AdapterWindows.cpp +338 -0
  247. package/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  248. package/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  249. package/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  250. package/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  251. package/simpleble/src/backends/windows/MtaManager.h +90 -0
  252. package/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  253. package/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  254. package/simpleble/src/backends/windows/Utils.cpp +146 -0
  255. package/simpleble/src/backends/windows/Utils.h +47 -0
  256. package/simpleble/src/builders/BuildVec.h +32 -0
  257. package/simpleble/src/builders/BuilderBase.h +87 -0
  258. package/simpleble/src/external/TaskRunner.hpp +99 -0
  259. package/simpleble/src/external/ThreadRunner.h +52 -0
  260. package/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  261. package/simpleble/src/external/kvn_safe_map.hpp +94 -0
  262. package/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  263. package/simpleble/src/external/logfwd.hpp +35 -0
  264. package/simpleble/src/frontends/base/Adapter.cpp +111 -0
  265. package/simpleble/src/frontends/base/Advanced.cpp +34 -0
  266. package/simpleble/src/frontends/base/Backend.cpp +95 -0
  267. package/simpleble/src/frontends/base/Backend.h +76 -0
  268. package/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  269. package/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  270. package/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  271. package/simpleble/src/frontends/base/Service.cpp +26 -0
  272. package/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  273. package/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
@@ -0,0 +1,373 @@
1
+ // Formatting library for C++ - optional wchar_t and exotic character support
2
+ //
3
+ // Copyright (c) 2012 - present, Victor Zverovich
4
+ // All rights reserved.
5
+ //
6
+ // For the license information refer to format.h.
7
+
8
+ #ifndef FMT_XCHAR_H_
9
+ #define FMT_XCHAR_H_
10
+
11
+ #include "color.h"
12
+ #include "format.h"
13
+ #include "ostream.h"
14
+ #include "ranges.h"
15
+
16
+ #ifndef FMT_MODULE
17
+ # include <cwchar>
18
+ # if FMT_USE_LOCALE
19
+ # include <locale>
20
+ # endif
21
+ #endif
22
+
23
+ FMT_BEGIN_NAMESPACE
24
+ namespace detail {
25
+
26
+ template <typename T>
27
+ using is_exotic_char = bool_constant<!std::is_same<T, char>::value>;
28
+
29
+ template <typename S, typename = void> struct format_string_char {};
30
+
31
+ template <typename S>
32
+ struct format_string_char<
33
+ S, void_t<decltype(sizeof(detail::to_string_view(std::declval<S>())))>> {
34
+ using type = char_t<S>;
35
+ };
36
+
37
+ template <typename S>
38
+ struct format_string_char<
39
+ S, enable_if_t<std::is_base_of<detail::compile_string, S>::value>> {
40
+ using type = typename S::char_type;
41
+ };
42
+
43
+ template <typename S>
44
+ using format_string_char_t = typename format_string_char<S>::type;
45
+
46
+ inline auto write_loc(basic_appender<wchar_t> out, loc_value value,
47
+ const format_specs& specs, locale_ref loc) -> bool {
48
+ #if FMT_USE_LOCALE
49
+ auto& numpunct =
50
+ std::use_facet<std::numpunct<wchar_t>>(loc.get<std::locale>());
51
+ auto separator = std::wstring();
52
+ auto grouping = numpunct.grouping();
53
+ if (!grouping.empty()) separator = std::wstring(1, numpunct.thousands_sep());
54
+ return value.visit(loc_writer<wchar_t>{out, specs, separator, grouping, {}});
55
+ #endif
56
+ return false;
57
+ }
58
+ } // namespace detail
59
+
60
+ FMT_BEGIN_EXPORT
61
+
62
+ using wstring_view = basic_string_view<wchar_t>;
63
+ using wformat_parse_context = parse_context<wchar_t>;
64
+ using wformat_context = buffered_context<wchar_t>;
65
+ using wformat_args = basic_format_args<wformat_context>;
66
+ using wmemory_buffer = basic_memory_buffer<wchar_t>;
67
+
68
+ template <typename Char, typename... T> struct basic_fstring {
69
+ private:
70
+ basic_string_view<Char> str_;
71
+
72
+ static constexpr int num_static_named_args =
73
+ detail::count_static_named_args<T...>();
74
+
75
+ using checker = detail::format_string_checker<
76
+ Char, static_cast<int>(sizeof...(T)), num_static_named_args,
77
+ num_static_named_args != detail::count_named_args<T...>()>;
78
+
79
+ using arg_pack = detail::arg_pack<T...>;
80
+
81
+ public:
82
+ using t = basic_fstring;
83
+
84
+ template <typename S,
85
+ FMT_ENABLE_IF(
86
+ std::is_convertible<const S&, basic_string_view<Char>>::value)>
87
+ FMT_CONSTEVAL FMT_ALWAYS_INLINE basic_fstring(const S& s) : str_(s) {
88
+ if (FMT_USE_CONSTEVAL)
89
+ detail::parse_format_string<Char>(s, checker(s, arg_pack()));
90
+ }
91
+ template <typename S,
92
+ FMT_ENABLE_IF(std::is_base_of<detail::compile_string, S>::value&&
93
+ std::is_same<typename S::char_type, Char>::value)>
94
+ FMT_ALWAYS_INLINE basic_fstring(const S&) : str_(S()) {
95
+ FMT_CONSTEXPR auto sv = basic_string_view<Char>(S());
96
+ FMT_CONSTEXPR int ignore =
97
+ (parse_format_string(sv, checker(sv, arg_pack())), 0);
98
+ detail::ignore_unused(ignore);
99
+ }
100
+ basic_fstring(runtime_format_string<Char> fmt) : str_(fmt.str) {}
101
+
102
+ operator basic_string_view<Char>() const { return str_; }
103
+ auto get() const -> basic_string_view<Char> { return str_; }
104
+ };
105
+
106
+ template <typename Char, typename... T>
107
+ using basic_format_string = basic_fstring<Char, T...>;
108
+
109
+ template <typename... T>
110
+ using wformat_string = typename basic_format_string<wchar_t, T...>::t;
111
+ inline auto runtime(wstring_view s) -> runtime_format_string<wchar_t> {
112
+ return {{s}};
113
+ }
114
+
115
+ template <> struct is_char<wchar_t> : std::true_type {};
116
+ template <> struct is_char<char16_t> : std::true_type {};
117
+ template <> struct is_char<char32_t> : std::true_type {};
118
+
119
+ #ifdef __cpp_char8_t
120
+ template <> struct is_char<char8_t> : bool_constant<detail::is_utf8_enabled> {};
121
+ #endif
122
+
123
+ template <typename... T>
124
+ constexpr auto make_wformat_args(T&... args)
125
+ -> decltype(fmt::make_format_args<wformat_context>(args...)) {
126
+ return fmt::make_format_args<wformat_context>(args...);
127
+ }
128
+
129
+ #if !FMT_USE_NONTYPE_TEMPLATE_ARGS
130
+ inline namespace literals {
131
+ inline auto operator""_a(const wchar_t* s, size_t) -> detail::udl_arg<wchar_t> {
132
+ return {s};
133
+ }
134
+ } // namespace literals
135
+ #endif
136
+
137
+ template <typename It, typename Sentinel>
138
+ auto join(It begin, Sentinel end, wstring_view sep)
139
+ -> join_view<It, Sentinel, wchar_t> {
140
+ return {begin, end, sep};
141
+ }
142
+
143
+ template <typename Range, FMT_ENABLE_IF(!is_tuple_like<Range>::value)>
144
+ auto join(Range&& range, wstring_view sep)
145
+ -> join_view<decltype(std::begin(range)), decltype(std::end(range)),
146
+ wchar_t> {
147
+ return join(std::begin(range), std::end(range), sep);
148
+ }
149
+
150
+ template <typename T>
151
+ auto join(std::initializer_list<T> list, wstring_view sep)
152
+ -> join_view<const T*, const T*, wchar_t> {
153
+ return join(std::begin(list), std::end(list), sep);
154
+ }
155
+
156
+ template <typename Tuple, FMT_ENABLE_IF(is_tuple_like<Tuple>::value)>
157
+ auto join(const Tuple& tuple, basic_string_view<wchar_t> sep)
158
+ -> tuple_join_view<wchar_t, Tuple> {
159
+ return {tuple, sep};
160
+ }
161
+
162
+ template <typename Char, FMT_ENABLE_IF(!std::is_same<Char, char>::value)>
163
+ auto vformat(basic_string_view<Char> fmt,
164
+ typename detail::vformat_args<Char>::type args)
165
+ -> std::basic_string<Char> {
166
+ auto buf = basic_memory_buffer<Char>();
167
+ detail::vformat_to(buf, fmt, args);
168
+ return {buf.data(), buf.size()};
169
+ }
170
+
171
+ template <typename... T>
172
+ auto format(wformat_string<T...> fmt, T&&... args) -> std::wstring {
173
+ return vformat(fmt::wstring_view(fmt), fmt::make_wformat_args(args...));
174
+ }
175
+
176
+ template <typename OutputIt, typename... T>
177
+ auto format_to(OutputIt out, wformat_string<T...> fmt, T&&... args)
178
+ -> OutputIt {
179
+ return vformat_to(out, fmt::wstring_view(fmt),
180
+ fmt::make_wformat_args(args...));
181
+ }
182
+
183
+ // Pass char_t as a default template parameter instead of using
184
+ // std::basic_string<char_t<S>> to reduce the symbol size.
185
+ template <typename S, typename... T,
186
+ typename Char = detail::format_string_char_t<S>,
187
+ FMT_ENABLE_IF(!std::is_same<Char, char>::value &&
188
+ !std::is_same<Char, wchar_t>::value)>
189
+ auto format(const S& fmt, T&&... args) -> std::basic_string<Char> {
190
+ return vformat(detail::to_string_view(fmt),
191
+ fmt::make_format_args<buffered_context<Char>>(args...));
192
+ }
193
+
194
+ template <typename Locale, typename S,
195
+ typename Char = detail::format_string_char_t<S>,
196
+ FMT_ENABLE_IF(detail::is_locale<Locale>::value&&
197
+ detail::is_exotic_char<Char>::value)>
198
+ inline auto vformat(const Locale& loc, const S& fmt,
199
+ typename detail::vformat_args<Char>::type args)
200
+ -> std::basic_string<Char> {
201
+ auto buf = basic_memory_buffer<Char>();
202
+ detail::vformat_to(buf, detail::to_string_view(fmt), args,
203
+ detail::locale_ref(loc));
204
+ return {buf.data(), buf.size()};
205
+ }
206
+
207
+ template <typename Locale, typename S, typename... T,
208
+ typename Char = detail::format_string_char_t<S>,
209
+ FMT_ENABLE_IF(detail::is_locale<Locale>::value&&
210
+ detail::is_exotic_char<Char>::value)>
211
+ inline auto format(const Locale& loc, const S& fmt, T&&... args)
212
+ -> std::basic_string<Char> {
213
+ return vformat(loc, detail::to_string_view(fmt),
214
+ fmt::make_format_args<buffered_context<Char>>(args...));
215
+ }
216
+
217
+ template <typename OutputIt, typename S,
218
+ typename Char = detail::format_string_char_t<S>,
219
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&
220
+ detail::is_exotic_char<Char>::value)>
221
+ auto vformat_to(OutputIt out, const S& fmt,
222
+ typename detail::vformat_args<Char>::type args) -> OutputIt {
223
+ auto&& buf = detail::get_buffer<Char>(out);
224
+ detail::vformat_to(buf, detail::to_string_view(fmt), args);
225
+ return detail::get_iterator(buf, out);
226
+ }
227
+
228
+ template <typename OutputIt, typename S, typename... T,
229
+ typename Char = detail::format_string_char_t<S>,
230
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value &&
231
+ !std::is_same<Char, char>::value &&
232
+ !std::is_same<Char, wchar_t>::value)>
233
+ inline auto format_to(OutputIt out, const S& fmt, T&&... args) -> OutputIt {
234
+ return vformat_to(out, detail::to_string_view(fmt),
235
+ fmt::make_format_args<buffered_context<Char>>(args...));
236
+ }
237
+
238
+ template <typename Locale, typename S, typename OutputIt, typename... Args,
239
+ typename Char = detail::format_string_char_t<S>,
240
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&
241
+ detail::is_locale<Locale>::value&&
242
+ detail::is_exotic_char<Char>::value)>
243
+ inline auto vformat_to(OutputIt out, const Locale& loc, const S& fmt,
244
+ typename detail::vformat_args<Char>::type args)
245
+ -> OutputIt {
246
+ auto&& buf = detail::get_buffer<Char>(out);
247
+ vformat_to(buf, detail::to_string_view(fmt), args, detail::locale_ref(loc));
248
+ return detail::get_iterator(buf, out);
249
+ }
250
+
251
+ template <typename Locale, typename OutputIt, typename S, typename... T,
252
+ typename Char = detail::format_string_char_t<S>,
253
+ bool enable = detail::is_output_iterator<OutputIt, Char>::value &&
254
+ detail::is_locale<Locale>::value &&
255
+ detail::is_exotic_char<Char>::value>
256
+ inline auto format_to(OutputIt out, const Locale& loc, const S& fmt,
257
+ T&&... args) ->
258
+ typename std::enable_if<enable, OutputIt>::type {
259
+ return vformat_to(out, loc, detail::to_string_view(fmt),
260
+ fmt::make_format_args<buffered_context<Char>>(args...));
261
+ }
262
+
263
+ template <typename OutputIt, typename Char, typename... Args,
264
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&
265
+ detail::is_exotic_char<Char>::value)>
266
+ inline auto vformat_to_n(OutputIt out, size_t n, basic_string_view<Char> fmt,
267
+ typename detail::vformat_args<Char>::type args)
268
+ -> format_to_n_result<OutputIt> {
269
+ using traits = detail::fixed_buffer_traits;
270
+ auto buf = detail::iterator_buffer<OutputIt, Char, traits>(out, n);
271
+ detail::vformat_to(buf, fmt, args);
272
+ return {buf.out(), buf.count()};
273
+ }
274
+
275
+ template <typename OutputIt, typename S, typename... T,
276
+ typename Char = detail::format_string_char_t<S>,
277
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&
278
+ detail::is_exotic_char<Char>::value)>
279
+ inline auto format_to_n(OutputIt out, size_t n, const S& fmt, T&&... args)
280
+ -> format_to_n_result<OutputIt> {
281
+ return vformat_to_n(out, n, fmt::basic_string_view<Char>(fmt),
282
+ fmt::make_format_args<buffered_context<Char>>(args...));
283
+ }
284
+
285
+ template <typename S, typename... T,
286
+ typename Char = detail::format_string_char_t<S>,
287
+ FMT_ENABLE_IF(detail::is_exotic_char<Char>::value)>
288
+ inline auto formatted_size(const S& fmt, T&&... args) -> size_t {
289
+ auto buf = detail::counting_buffer<Char>();
290
+ detail::vformat_to(buf, detail::to_string_view(fmt),
291
+ fmt::make_format_args<buffered_context<Char>>(args...));
292
+ return buf.count();
293
+ }
294
+
295
+ inline void vprint(std::FILE* f, wstring_view fmt, wformat_args args) {
296
+ auto buf = wmemory_buffer();
297
+ detail::vformat_to(buf, fmt, args);
298
+ buf.push_back(L'\0');
299
+ if (std::fputws(buf.data(), f) == -1)
300
+ FMT_THROW(system_error(errno, FMT_STRING("cannot write to file")));
301
+ }
302
+
303
+ inline void vprint(wstring_view fmt, wformat_args args) {
304
+ vprint(stdout, fmt, args);
305
+ }
306
+
307
+ template <typename... T>
308
+ void print(std::FILE* f, wformat_string<T...> fmt, T&&... args) {
309
+ return vprint(f, wstring_view(fmt), fmt::make_wformat_args(args...));
310
+ }
311
+
312
+ template <typename... T> void print(wformat_string<T...> fmt, T&&... args) {
313
+ return vprint(wstring_view(fmt), fmt::make_wformat_args(args...));
314
+ }
315
+
316
+ template <typename... T>
317
+ void println(std::FILE* f, wformat_string<T...> fmt, T&&... args) {
318
+ return print(f, L"{}\n", fmt::format(fmt, std::forward<T>(args)...));
319
+ }
320
+
321
+ template <typename... T> void println(wformat_string<T...> fmt, T&&... args) {
322
+ return print(L"{}\n", fmt::format(fmt, std::forward<T>(args)...));
323
+ }
324
+
325
+ inline auto vformat(const text_style& ts, wstring_view fmt, wformat_args args)
326
+ -> std::wstring {
327
+ auto buf = wmemory_buffer();
328
+ detail::vformat_to(buf, ts, fmt, args);
329
+ return {buf.data(), buf.size()};
330
+ }
331
+
332
+ template <typename... T>
333
+ inline auto format(const text_style& ts, wformat_string<T...> fmt, T&&... args)
334
+ -> std::wstring {
335
+ return fmt::vformat(ts, fmt, fmt::make_wformat_args(args...));
336
+ }
337
+
338
+ template <typename... T>
339
+ FMT_DEPRECATED void print(std::FILE* f, const text_style& ts,
340
+ wformat_string<T...> fmt, const T&... args) {
341
+ vprint(f, ts, fmt, fmt::make_wformat_args(args...));
342
+ }
343
+
344
+ template <typename... T>
345
+ FMT_DEPRECATED void print(const text_style& ts, wformat_string<T...> fmt,
346
+ const T&... args) {
347
+ return print(stdout, ts, fmt, args...);
348
+ }
349
+
350
+ inline void vprint(std::wostream& os, wstring_view fmt, wformat_args args) {
351
+ auto buffer = basic_memory_buffer<wchar_t>();
352
+ detail::vformat_to(buffer, fmt, args);
353
+ detail::write_buffer(os, buffer);
354
+ }
355
+
356
+ template <typename... T>
357
+ void print(std::wostream& os, wformat_string<T...> fmt, T&&... args) {
358
+ vprint(os, fmt, fmt::make_format_args<buffered_context<wchar_t>>(args...));
359
+ }
360
+
361
+ template <typename... T>
362
+ void println(std::wostream& os, wformat_string<T...> fmt, T&&... args) {
363
+ print(os, L"{}\n", fmt::format(fmt, std::forward<T>(args)...));
364
+ }
365
+
366
+ /// Converts `value` to `std::wstring` using the default format for type `T`.
367
+ template <typename T> inline auto to_wstring(const T& value) -> std::wstring {
368
+ return format(FMT_STRING(L"{}"), value);
369
+ }
370
+ FMT_END_EXPORT
371
+ FMT_END_NAMESPACE
372
+
373
+ #endif // FMT_XCHAR_H_