simpleble 0.0.1

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 (341) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +88 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +350 -0
  5. data/ext/simpleble/extconf.rb +57 -0
  6. data/ext/simpleble/simpleble_ruby.c +682 -0
  7. data/lib/simpleble/adapter.rb +10 -0
  8. data/lib/simpleble/characteristic.rb +36 -0
  9. data/lib/simpleble/descriptor.rb +8 -0
  10. data/lib/simpleble/exceptions.rb +25 -0
  11. data/lib/simpleble/peripheral.rb +64 -0
  12. data/lib/simpleble/service.rb +16 -0
  13. data/lib/simpleble/version.rb +3 -0
  14. data/lib/simpleble.rb +40 -0
  15. data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +920 -0
  16. data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +1 -0
  17. data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/CMakeCXXCompilerId.cpp +949 -0
  18. data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/apple-sdk.cpp +1 -0
  19. data/vendor/simpleble/build_simplecble/export/simplecble/export.h +43 -0
  20. data/vendor/simpleble/build_simplecble/simpleble/export/simpleble/export.h +43 -0
  21. data/vendor/simpleble/dependencies/external/kvn/kvn_bytearray.h +222 -0
  22. data/vendor/simpleble/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  23. data/vendor/simpleble/dependencies/external/kvn/logfwd.hpp +35 -0
  24. data/vendor/simpleble/dependencies/internal/fmt/args.h +220 -0
  25. data/vendor/simpleble/dependencies/internal/fmt/base.h +2962 -0
  26. data/vendor/simpleble/dependencies/internal/fmt/chrono.h +2338 -0
  27. data/vendor/simpleble/dependencies/internal/fmt/color.h +610 -0
  28. data/vendor/simpleble/dependencies/internal/fmt/compile.h +539 -0
  29. data/vendor/simpleble/dependencies/internal/fmt/core.h +5 -0
  30. data/vendor/simpleble/dependencies/internal/fmt/format-inl.h +1949 -0
  31. data/vendor/simpleble/dependencies/internal/fmt/format.h +4244 -0
  32. data/vendor/simpleble/dependencies/internal/fmt/os.h +427 -0
  33. data/vendor/simpleble/dependencies/internal/fmt/ostream.h +166 -0
  34. data/vendor/simpleble/dependencies/internal/fmt/printf.h +633 -0
  35. data/vendor/simpleble/dependencies/internal/fmt/ranges.h +850 -0
  36. data/vendor/simpleble/dependencies/internal/fmt/std.h +726 -0
  37. data/vendor/simpleble/dependencies/internal/fmt/xchar.h +373 -0
  38. data/vendor/simpleble/dependencies/internal/simplejni/Common.hpp +579 -0
  39. data/vendor/simpleble/dependencies/internal/simplejni/References.hpp +151 -0
  40. data/vendor/simpleble/dependencies/internal/simplejni/Registry.hpp +183 -0
  41. data/vendor/simpleble/dependencies/internal/simplejni/VM.hpp +88 -0
  42. data/vendor/simpleble/examples/simpleble/src/connect.cpp +67 -0
  43. data/vendor/simpleble/examples/simpleble/src/connect_safe.cpp +91 -0
  44. data/vendor/simpleble/examples/simpleble/src/list_adapters.cpp +22 -0
  45. data/vendor/simpleble/examples/simpleble/src/list_adapters_safe.cpp +33 -0
  46. data/vendor/simpleble/examples/simpleble/src/list_paired.cpp +27 -0
  47. data/vendor/simpleble/examples/simpleble/src/multiconnect.cpp +60 -0
  48. data/vendor/simpleble/examples/simpleble/src/notify.cpp +85 -0
  49. data/vendor/simpleble/examples/simpleble/src/notify_multi.cpp +101 -0
  50. data/vendor/simpleble/examples/simpleble/src/power_cycle.cpp +43 -0
  51. data/vendor/simpleble/examples/simpleble/src/read.cpp +82 -0
  52. data/vendor/simpleble/examples/simpleble/src/scan.cpp +62 -0
  53. data/vendor/simpleble/examples/simpleble/src/utils.cpp +59 -0
  54. data/vendor/simpleble/examples/simpleble/src/utils.hpp +27 -0
  55. data/vendor/simpleble/examples/simpleble/src/write.cpp +81 -0
  56. data/vendor/simpleble/examples/simplebluez/ble_nus/ble_nus.cpp +138 -0
  57. data/vendor/simpleble/examples/simplebluez/connect/connect.cpp +119 -0
  58. data/vendor/simpleble/examples/simplebluez/list_adapters/list_adapters.cpp +44 -0
  59. data/vendor/simpleble/examples/simplebluez/list_paired/list_paired.cpp +48 -0
  60. data/vendor/simpleble/examples/simplebluez/notify/notify.cpp +145 -0
  61. data/vendor/simpleble/examples/simplebluez/pair/pair.cpp +181 -0
  62. data/vendor/simpleble/examples/simplebluez/read/read.cpp +141 -0
  63. data/vendor/simpleble/examples/simplebluez/scan/scan.cpp +85 -0
  64. data/vendor/simpleble/examples/simplecble/c/connect.c +163 -0
  65. data/vendor/simpleble/examples/simplecble/c/notify.c +217 -0
  66. data/vendor/simpleble/examples/simplecble/c/scan.c +164 -0
  67. data/vendor/simpleble/examples/simpledbus/notification.cpp +24 -0
  68. data/vendor/simpleble/hitl/src/test_sanity.cpp +48 -0
  69. data/vendor/simpleble/install_simplecble/include/simpleble/Adapter.h +102 -0
  70. data/vendor/simpleble/install_simplecble/include/simpleble/AdapterSafe.h +58 -0
  71. data/vendor/simpleble/install_simplecble/include/simpleble/Advanced.h +50 -0
  72. data/vendor/simpleble/install_simplecble/include/simpleble/Characteristic.h +39 -0
  73. data/vendor/simpleble/install_simplecble/include/simpleble/Config.h +55 -0
  74. data/vendor/simpleble/install_simplecble/include/simpleble/Descriptor.h +30 -0
  75. data/vendor/simpleble/install_simplecble/include/simpleble/Exceptions.h +72 -0
  76. data/vendor/simpleble/install_simplecble/include/simpleble/Logging.h +73 -0
  77. data/vendor/simpleble/install_simplecble/include/simpleble/Peripheral.h +82 -0
  78. data/vendor/simpleble/install_simplecble/include/simpleble/PeripheralSafe.h +64 -0
  79. data/vendor/simpleble/install_simplecble/include/simpleble/Service.h +34 -0
  80. data/vendor/simpleble/install_simplecble/include/simpleble/SimpleBLE.h +8 -0
  81. data/vendor/simpleble/install_simplecble/include/simpleble/Types.h +49 -0
  82. data/vendor/simpleble/install_simplecble/include/simpleble/Utils.h +13 -0
  83. data/vendor/simpleble/install_simplecble/include/simpleble/export.h +43 -0
  84. data/vendor/simpleble/install_simplecble/include/simpleble/kvn/kvn_bytearray.h +222 -0
  85. data/vendor/simpleble/install_simplecble/include/simplecble/adapter.h +188 -0
  86. data/vendor/simpleble/install_simplecble/include/simplecble/logging.h +37 -0
  87. data/vendor/simpleble/install_simplecble/include/simplecble/peripheral.h +304 -0
  88. data/vendor/simpleble/install_simplecble/include/simplecble/simpleble.h +21 -0
  89. data/vendor/simpleble/install_simplecble/include/simplecble/types.h +73 -0
  90. data/vendor/simpleble/install_simplecble/include/simplecble/utils.h +27 -0
  91. data/vendor/simpleble/simpleble/include/simpleble/Adapter.h +102 -0
  92. data/vendor/simpleble/simpleble/include/simpleble/AdapterSafe.h +58 -0
  93. data/vendor/simpleble/simpleble/include/simpleble/Characteristic.h +39 -0
  94. data/vendor/simpleble/simpleble/include/simpleble/Config.h +55 -0
  95. data/vendor/simpleble/simpleble/include/simpleble/Descriptor.h +30 -0
  96. data/vendor/simpleble/simpleble/include/simpleble/Exceptions.h +72 -0
  97. data/vendor/simpleble/simpleble/include/simpleble/Logging.h +73 -0
  98. data/vendor/simpleble/simpleble/include/simpleble/Peripheral.h +82 -0
  99. data/vendor/simpleble/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  100. data/vendor/simpleble/simpleble/include/simpleble/Service.h +34 -0
  101. data/vendor/simpleble/simpleble/include/simpleble/SimpleBLE.h +8 -0
  102. data/vendor/simpleble/simpleble/include/simpleble/Types.h +49 -0
  103. data/vendor/simpleble/simpleble/include/simpleble/Utils.h +13 -0
  104. data/vendor/simpleble/simpleble/include/simpleble_c/adapter.h +188 -0
  105. data/vendor/simpleble/simpleble/include/simpleble_c/logging.h +37 -0
  106. data/vendor/simpleble/simpleble/include/simpleble_c/peripheral.h +304 -0
  107. data/vendor/simpleble/simpleble/include/simpleble_c/simpleble.h +21 -0
  108. data/vendor/simpleble/simpleble/include/simpleble_c/types.h +73 -0
  109. data/vendor/simpleble/simpleble/include/simpleble_c/utils.h +27 -0
  110. data/vendor/simpleble/simpleble/src/CommonUtils.h +63 -0
  111. data/vendor/simpleble/simpleble/src/Exceptions.cpp +31 -0
  112. data/vendor/simpleble/simpleble/src/Logging.cpp +136 -0
  113. data/vendor/simpleble/simpleble/src/LoggingInternal.h +85 -0
  114. data/vendor/simpleble/simpleble/src/Utils.cpp +24 -0
  115. data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  116. data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.h +70 -0
  117. data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.cpp +40 -0
  118. data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.h +20 -0
  119. data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  120. data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  121. data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  122. data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  123. data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  124. data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  125. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  126. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  127. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  128. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  129. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  130. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  131. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  132. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  133. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  134. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  135. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  136. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  137. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  138. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  139. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  140. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  141. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  142. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  143. data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  144. data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  145. data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  146. data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  147. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  148. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  149. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  150. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.h +27 -0
  151. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  152. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  153. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  154. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  155. data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  156. data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.h +81 -0
  157. data/vendor/simpleble/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  158. data/vendor/simpleble/simpleble/src/backends/common/BackendBase.h +20 -0
  159. data/vendor/simpleble/simpleble/src/backends/common/BackendUtils.h +33 -0
  160. data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  161. data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  162. data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  163. data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.h +19 -0
  164. data/vendor/simpleble/simpleble/src/backends/common/PeripheralBase.h +82 -0
  165. data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  166. data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.h +28 -0
  167. data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  168. data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  169. data/vendor/simpleble/simpleble/src/backends/linux/BackendBluez.cpp +87 -0
  170. data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.cpp +376 -0
  171. data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  172. data/vendor/simpleble/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  173. data/vendor/simpleble/simpleble/src/backends/macos/AdapterMac.h +78 -0
  174. data/vendor/simpleble/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  175. data/vendor/simpleble/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  176. data/vendor/simpleble/simpleble/src/backends/macos/Utils.h +9 -0
  177. data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  178. data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  179. data/vendor/simpleble/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  180. data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  181. data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  182. data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.cpp +330 -0
  183. data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  184. data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  185. data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  186. data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  187. data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.h +90 -0
  188. data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  189. data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  190. data/vendor/simpleble/simpleble/src/backends/windows/Utils.cpp +146 -0
  191. data/vendor/simpleble/simpleble/src/backends/windows/Utils.h +47 -0
  192. data/vendor/simpleble/simpleble/src/builders/BuildVec.h +32 -0
  193. data/vendor/simpleble/simpleble/src/builders/BuilderBase.h +87 -0
  194. data/vendor/simpleble/simpleble/src/external/TaskRunner.hpp +99 -0
  195. data/vendor/simpleble/simpleble/src/external/ThreadRunner.h +52 -0
  196. data/vendor/simpleble/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  197. data/vendor/simpleble/simpleble/src/external/kvn_safe_map.hpp +94 -0
  198. data/vendor/simpleble/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  199. data/vendor/simpleble/simpleble/src/external/logfwd.hpp +35 -0
  200. data/vendor/simpleble/simpleble/src/frontends/base/Adapter.cpp +111 -0
  201. data/vendor/simpleble/simpleble/src/frontends/base/Backend.cpp +83 -0
  202. data/vendor/simpleble/simpleble/src/frontends/base/Backend.h +76 -0
  203. data/vendor/simpleble/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  204. data/vendor/simpleble/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  205. data/vendor/simpleble/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  206. data/vendor/simpleble/simpleble/src/frontends/base/Service.cpp +26 -0
  207. data/vendor/simpleble/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  208. data/vendor/simpleble/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
  209. data/vendor/simpleble/simpleble/src_c/adapter.cpp +204 -0
  210. data/vendor/simpleble/simpleble/src_c/logging.cpp +19 -0
  211. data/vendor/simpleble/simpleble/src_c/peripheral.cpp +444 -0
  212. data/vendor/simpleble/simpleble/src_c/simpleble.cpp +5 -0
  213. data/vendor/simpleble/simpleble/src_c/utils.cpp +15 -0
  214. data/vendor/simpleble/simpleble/test/src/main.cpp +8 -0
  215. data/vendor/simpleble/simpleble/test/src/test_bytearray.cpp +246 -0
  216. data/vendor/simpleble/simpleble/test/src/test_utils.cpp +24 -0
  217. data/vendor/simpleble/simplebluez/include/simplebluez/Adapter.h +46 -0
  218. data/vendor/simpleble/simplebluez/include/simplebluez/Agent.h +52 -0
  219. data/vendor/simpleble/simplebluez/include/simplebluez/Bluez.h +37 -0
  220. data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrg.h +22 -0
  221. data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrgBluez.h +26 -0
  222. data/vendor/simpleble/simplebluez/include/simplebluez/BluezRoot.h +32 -0
  223. data/vendor/simpleble/simplebluez/include/simplebluez/Characteristic.h +46 -0
  224. data/vendor/simpleble/simplebluez/include/simplebluez/Descriptor.h +33 -0
  225. data/vendor/simpleble/simplebluez/include/simplebluez/Device.h +64 -0
  226. data/vendor/simpleble/simplebluez/include/simplebluez/Exceptions.h +43 -0
  227. data/vendor/simpleble/simplebluez/include/simplebluez/Service.h +27 -0
  228. data/vendor/simpleble/simplebluez/include/simplebluez/Types.h +9 -0
  229. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Adapter1.h +49 -0
  230. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Agent1.h +100 -0
  231. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/AgentManager1.h +24 -0
  232. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Battery1.h +32 -0
  233. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Device1.h +62 -0
  234. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattCharacteristic1.h +48 -0
  235. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattDescriptor1.h +41 -0
  236. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattService1.h +28 -0
  237. data/vendor/simpleble/simplebluez/src/Adapter.cpp +78 -0
  238. data/vendor/simpleble/simplebluez/src/Agent.cpp +72 -0
  239. data/vendor/simpleble/simplebluez/src/Bluez.cpp +45 -0
  240. data/vendor/simpleble/simplebluez/src/BluezOrg.cpp +20 -0
  241. data/vendor/simpleble/simplebluez/src/BluezOrgBluez.cpp +23 -0
  242. data/vendor/simpleble/simplebluez/src/BluezRoot.cpp +44 -0
  243. data/vendor/simpleble/simplebluez/src/Characteristic.cpp +64 -0
  244. data/vendor/simpleble/simplebluez/src/Descriptor.cpp +27 -0
  245. data/vendor/simpleble/simplebluez/src/Device.cpp +104 -0
  246. data/vendor/simpleble/simplebluez/src/Exceptions.cpp +29 -0
  247. data/vendor/simpleble/simplebluez/src/Logging.cpp +52 -0
  248. data/vendor/simpleble/simplebluez/src/Logging.h +57 -0
  249. data/vendor/simpleble/simplebluez/src/Service.cpp +33 -0
  250. data/vendor/simpleble/simplebluez/src/interfaces/Adapter1.cpp +123 -0
  251. data/vendor/simpleble/simplebluez/src/interfaces/Agent1.cpp +143 -0
  252. data/vendor/simpleble/simplebluez/src/interfaces/AgentManager1.cpp +34 -0
  253. data/vendor/simpleble/simplebluez/src/interfaces/Battery1.cpp +30 -0
  254. data/vendor/simpleble/simplebluez/src/interfaces/Device1.cpp +170 -0
  255. data/vendor/simpleble/simplebluez/src/interfaces/GattCharacteristic1.cpp +118 -0
  256. data/vendor/simpleble/simplebluez/src/interfaces/GattDescriptor1.cpp +78 -0
  257. data/vendor/simpleble/simplebluez/src/interfaces/GattService1.cpp +28 -0
  258. data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.cpp +53 -0
  259. data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.h +24 -0
  260. data/vendor/simpleble/simplebluez/test/src/main.cpp +16 -0
  261. data/vendor/simpleble/simplecble/include/simplecble/adapter.h +188 -0
  262. data/vendor/simpleble/simplecble/include/simplecble/logging.h +37 -0
  263. data/vendor/simpleble/simplecble/include/simplecble/peripheral.h +304 -0
  264. data/vendor/simpleble/simplecble/include/simplecble/simpleble.h +21 -0
  265. data/vendor/simpleble/simplecble/include/simplecble/types.h +73 -0
  266. data/vendor/simpleble/simplecble/include/simplecble/utils.h +27 -0
  267. data/vendor/simpleble/simplecble/src/adapter.cpp +204 -0
  268. data/vendor/simpleble/simplecble/src/logging.cpp +19 -0
  269. data/vendor/simpleble/simplecble/src/peripheral.cpp +444 -0
  270. data/vendor/simpleble/simplecble/src/simpleble.cpp +5 -0
  271. data/vendor/simpleble/simplecble/src/utils.cpp +15 -0
  272. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Interface.h +67 -0
  273. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/InterfaceRegistry.h +64 -0
  274. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Proxy.h +117 -0
  275. data/vendor/simpleble/simpledbus/include/simpledbus/base/Connection.h +50 -0
  276. data/vendor/simpleble/simpledbus/include/simpledbus/base/Exceptions.h +56 -0
  277. data/vendor/simpleble/simpledbus/include/simpledbus/base/Holder.h +147 -0
  278. data/vendor/simpleble/simpledbus/include/simpledbus/base/Logging.h +57 -0
  279. data/vendor/simpleble/simpledbus/include/simpledbus/base/Message.h +89 -0
  280. data/vendor/simpleble/simpledbus/include/simpledbus/base/Path.h +24 -0
  281. data/vendor/simpleble/simpledbus/include/simpledbus/interfaces/ObjectManager.h +26 -0
  282. data/vendor/simpleble/simpledbus/src/advanced/Interface.cpp +155 -0
  283. data/vendor/simpleble/simpledbus/src/advanced/Proxy.cpp +375 -0
  284. data/vendor/simpleble/simpledbus/src/base/Connection.cpp +222 -0
  285. data/vendor/simpleble/simpledbus/src/base/Exceptions.cpp +39 -0
  286. data/vendor/simpleble/simpledbus/src/base/Holder.cpp +739 -0
  287. data/vendor/simpleble/simpledbus/src/base/Logging.cpp +52 -0
  288. data/vendor/simpleble/simpledbus/src/base/Message.cpp +622 -0
  289. data/vendor/simpleble/simpledbus/src/base/Path.cpp +129 -0
  290. data/vendor/simpleble/simpledbus/src/interfaces/ObjectManager.cpp +58 -0
  291. data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.cpp +53 -0
  292. data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.h +24 -0
  293. data/vendor/simpleble/simpledbus/test/src/main.cpp +16 -0
  294. data/vendor/simpleble/simpledbus/test/src/test_holder.cpp +184 -0
  295. data/vendor/simpleble/simpledbus/test/src/test_message.cpp +397 -0
  296. data/vendor/simpleble/simpledbus/test/src/test_path.cpp +76 -0
  297. data/vendor/simpleble/simpledbus/test/src/test_proxy_children.cpp +109 -0
  298. data/vendor/simpleble/simpledbus/test/src/test_proxy_interfaces.cpp +102 -0
  299. data/vendor/simpleble/simpledbus/test/src/test_proxy_lifetime.cpp +18 -0
  300. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/ThreadRunner.h +89 -0
  301. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.cpp +55 -0
  302. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.h +18 -0
  303. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/simpleble_android.cpp +813 -0
  304. data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.cpp +37 -0
  305. data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.h +23 -0
  306. data/vendor/simpleble/simplejavable/cpp/src/core/Cache.cpp +58 -0
  307. data/vendor/simpleble/simplejavable/cpp/src/core/Cache.h +34 -0
  308. data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.cpp +17 -0
  309. data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.h +19 -0
  310. data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.cpp +257 -0
  311. data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.h +78 -0
  312. data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.cpp +96 -0
  313. data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.h +54 -0
  314. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.cpp +93 -0
  315. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.h +49 -0
  316. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.cpp +85 -0
  317. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.h +48 -0
  318. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.cpp +91 -0
  319. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.h +90 -0
  320. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.cpp +35 -0
  321. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.h +60 -0
  322. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.cpp +33 -0
  323. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.h +45 -0
  324. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.cpp +30 -0
  325. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.h +49 -0
  326. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.cpp +41 -0
  327. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.h +51 -0
  328. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.cpp +33 -0
  329. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.h +54 -0
  330. data/vendor/simpleble/simplejavable/cpp/src/simplejavable.cpp +361 -0
  331. data/vendor/simpleble/simplepyble/src/main.cpp +55 -0
  332. data/vendor/simpleble/simplepyble/src/wrap_adapter.cpp +106 -0
  333. data/vendor/simpleble/simplepyble/src/wrap_characteristic.cpp +56 -0
  334. data/vendor/simpleble/simplepyble/src/wrap_config.cpp +136 -0
  335. data/vendor/simpleble/simplepyble/src/wrap_descriptor.cpp +21 -0
  336. data/vendor/simpleble/simplepyble/src/wrap_peripheral.cpp +217 -0
  337. data/vendor/simpleble/simplepyble/src/wrap_service.cpp +32 -0
  338. data/vendor/simpleble/simplepyble/src/wrap_types.cpp +21 -0
  339. data/vendor/simpleble/simplersble/src/bindings/Bindings.cpp +338 -0
  340. data/vendor/simpleble/simplersble/src/bindings/Bindings.hpp +178 -0
  341. metadata +430 -0
@@ -0,0 +1,539 @@
1
+ // Formatting library for C++ - experimental format string compilation
2
+ //
3
+ // Copyright (c) 2012 - present, Victor Zverovich and fmt contributors
4
+ // All rights reserved.
5
+ //
6
+ // For the license information refer to format.h.
7
+
8
+ #ifndef FMT_COMPILE_H_
9
+ #define FMT_COMPILE_H_
10
+
11
+ #ifndef FMT_MODULE
12
+ # include <iterator> // std::back_inserter
13
+ #endif
14
+
15
+ #include "format.h"
16
+
17
+ FMT_BEGIN_NAMESPACE
18
+
19
+ // A compile-time string which is compiled into fast formatting code.
20
+ FMT_EXPORT class compiled_string {};
21
+
22
+ template <typename S>
23
+ struct is_compiled_string : std::is_base_of<compiled_string, S> {};
24
+
25
+ namespace detail {
26
+
27
+ /**
28
+ * Converts a string literal `s` into a format string that will be parsed at
29
+ * compile time and converted into efficient formatting code. Requires C++17
30
+ * `constexpr if` compiler support.
31
+ *
32
+ * **Example**:
33
+ *
34
+ * // Converts 42 into std::string using the most efficient method and no
35
+ * // runtime format string processing.
36
+ * std::string s = fmt::format(FMT_COMPILE("{}"), 42);
37
+ */
38
+ #if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)
39
+ # define FMT_COMPILE(s) FMT_STRING_IMPL(s, fmt::compiled_string)
40
+ #else
41
+ # define FMT_COMPILE(s) FMT_STRING(s)
42
+ #endif
43
+
44
+ template <typename T, typename... Tail>
45
+ auto first(const T& value, const Tail&...) -> const T& {
46
+ return value;
47
+ }
48
+
49
+ #if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)
50
+ template <typename... Args> struct type_list {};
51
+
52
+ // Returns a reference to the argument at index N from [first, rest...].
53
+ template <int N, typename T, typename... Args>
54
+ constexpr const auto& get([[maybe_unused]] const T& first,
55
+ [[maybe_unused]] const Args&... rest) {
56
+ static_assert(N < 1 + sizeof...(Args), "index is out of bounds");
57
+ if constexpr (N == 0)
58
+ return first;
59
+ else
60
+ return detail::get<N - 1>(rest...);
61
+ }
62
+
63
+ # if FMT_USE_NONTYPE_TEMPLATE_ARGS
64
+ template <int N, typename T, typename... Args, typename Char>
65
+ constexpr auto get_arg_index_by_name(basic_string_view<Char> name) -> int {
66
+ if constexpr (is_static_named_arg<T>()) {
67
+ if (name == T::name) return N;
68
+ }
69
+ if constexpr (sizeof...(Args) > 0)
70
+ return get_arg_index_by_name<N + 1, Args...>(name);
71
+ (void)name; // Workaround an MSVC bug about "unused" parameter.
72
+ return -1;
73
+ }
74
+ # endif
75
+
76
+ template <typename... Args, typename Char>
77
+ FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view<Char> name) -> int {
78
+ # if FMT_USE_NONTYPE_TEMPLATE_ARGS
79
+ if constexpr (sizeof...(Args) > 0)
80
+ return get_arg_index_by_name<0, Args...>(name);
81
+ # endif
82
+ (void)name;
83
+ return -1;
84
+ }
85
+
86
+ template <typename Char, typename... Args>
87
+ constexpr int get_arg_index_by_name(basic_string_view<Char> name,
88
+ type_list<Args...>) {
89
+ return get_arg_index_by_name<Args...>(name);
90
+ }
91
+
92
+ template <int N, typename> struct get_type_impl;
93
+
94
+ template <int N, typename... Args> struct get_type_impl<N, type_list<Args...>> {
95
+ using type =
96
+ remove_cvref_t<decltype(detail::get<N>(std::declval<Args>()...))>;
97
+ };
98
+
99
+ template <int N, typename T>
100
+ using get_type = typename get_type_impl<N, T>::type;
101
+
102
+ template <typename T> struct is_compiled_format : std::false_type {};
103
+
104
+ template <typename Char> struct text {
105
+ basic_string_view<Char> data;
106
+ using char_type = Char;
107
+
108
+ template <typename OutputIt, typename... Args>
109
+ constexpr OutputIt format(OutputIt out, const Args&...) const {
110
+ return write<Char>(out, data);
111
+ }
112
+ };
113
+
114
+ template <typename Char>
115
+ struct is_compiled_format<text<Char>> : std::true_type {};
116
+
117
+ template <typename Char>
118
+ constexpr text<Char> make_text(basic_string_view<Char> s, size_t pos,
119
+ size_t size) {
120
+ return {{&s[pos], size}};
121
+ }
122
+
123
+ template <typename Char> struct code_unit {
124
+ Char value;
125
+ using char_type = Char;
126
+
127
+ template <typename OutputIt, typename... Args>
128
+ constexpr OutputIt format(OutputIt out, const Args&...) const {
129
+ *out++ = value;
130
+ return out;
131
+ }
132
+ };
133
+
134
+ // This ensures that the argument type is convertible to `const T&`.
135
+ template <typename T, int N, typename... Args>
136
+ constexpr const T& get_arg_checked(const Args&... args) {
137
+ const auto& arg = detail::get<N>(args...);
138
+ if constexpr (detail::is_named_arg<remove_cvref_t<decltype(arg)>>()) {
139
+ return arg.value;
140
+ } else {
141
+ return arg;
142
+ }
143
+ }
144
+
145
+ template <typename Char>
146
+ struct is_compiled_format<code_unit<Char>> : std::true_type {};
147
+
148
+ // A replacement field that refers to argument N.
149
+ template <typename Char, typename T, int N> struct field {
150
+ using char_type = Char;
151
+
152
+ template <typename OutputIt, typename... Args>
153
+ constexpr OutputIt format(OutputIt out, const Args&... args) const {
154
+ const T& arg = get_arg_checked<T, N>(args...);
155
+ if constexpr (std::is_convertible<T, basic_string_view<Char>>::value) {
156
+ auto s = basic_string_view<Char>(arg);
157
+ return copy<Char>(s.begin(), s.end(), out);
158
+ } else {
159
+ return write<Char>(out, arg);
160
+ }
161
+ }
162
+ };
163
+
164
+ template <typename Char, typename T, int N>
165
+ struct is_compiled_format<field<Char, T, N>> : std::true_type {};
166
+
167
+ // A replacement field that refers to argument with name.
168
+ template <typename Char> struct runtime_named_field {
169
+ using char_type = Char;
170
+ basic_string_view<Char> name;
171
+
172
+ template <typename OutputIt, typename T>
173
+ constexpr static bool try_format_argument(
174
+ OutputIt& out,
175
+ // [[maybe_unused]] due to unused-but-set-parameter warning in GCC 7,8,9
176
+ [[maybe_unused]] basic_string_view<Char> arg_name, const T& arg) {
177
+ if constexpr (is_named_arg<typename std::remove_cv<T>::type>::value) {
178
+ if (arg_name == arg.name) {
179
+ out = write<Char>(out, arg.value);
180
+ return true;
181
+ }
182
+ }
183
+ return false;
184
+ }
185
+
186
+ template <typename OutputIt, typename... Args>
187
+ constexpr OutputIt format(OutputIt out, const Args&... args) const {
188
+ bool found = (try_format_argument(out, name, args) || ...);
189
+ if (!found) {
190
+ FMT_THROW(format_error("argument with specified name is not found"));
191
+ }
192
+ return out;
193
+ }
194
+ };
195
+
196
+ template <typename Char>
197
+ struct is_compiled_format<runtime_named_field<Char>> : std::true_type {};
198
+
199
+ // A replacement field that refers to argument N and has format specifiers.
200
+ template <typename Char, typename T, int N> struct spec_field {
201
+ using char_type = Char;
202
+ formatter<T, Char> fmt;
203
+
204
+ template <typename OutputIt, typename... Args>
205
+ constexpr FMT_INLINE OutputIt format(OutputIt out,
206
+ const Args&... args) const {
207
+ const auto& vargs =
208
+ fmt::make_format_args<basic_format_context<OutputIt, Char>>(args...);
209
+ basic_format_context<OutputIt, Char> ctx(out, vargs);
210
+ return fmt.format(get_arg_checked<T, N>(args...), ctx);
211
+ }
212
+ };
213
+
214
+ template <typename Char, typename T, int N>
215
+ struct is_compiled_format<spec_field<Char, T, N>> : std::true_type {};
216
+
217
+ template <typename L, typename R> struct concat {
218
+ L lhs;
219
+ R rhs;
220
+ using char_type = typename L::char_type;
221
+
222
+ template <typename OutputIt, typename... Args>
223
+ constexpr OutputIt format(OutputIt out, const Args&... args) const {
224
+ out = lhs.format(out, args...);
225
+ return rhs.format(out, args...);
226
+ }
227
+ };
228
+
229
+ template <typename L, typename R>
230
+ struct is_compiled_format<concat<L, R>> : std::true_type {};
231
+
232
+ template <typename L, typename R>
233
+ constexpr concat<L, R> make_concat(L lhs, R rhs) {
234
+ return {lhs, rhs};
235
+ }
236
+
237
+ struct unknown_format {};
238
+
239
+ template <typename Char>
240
+ constexpr size_t parse_text(basic_string_view<Char> str, size_t pos) {
241
+ for (size_t size = str.size(); pos != size; ++pos) {
242
+ if (str[pos] == '{' || str[pos] == '}') break;
243
+ }
244
+ return pos;
245
+ }
246
+
247
+ template <typename Args, size_t POS, int ID, typename S>
248
+ constexpr auto compile_format_string(S fmt);
249
+
250
+ template <typename Args, size_t POS, int ID, typename T, typename S>
251
+ constexpr auto parse_tail(T head, S fmt) {
252
+ if constexpr (POS != basic_string_view<typename S::char_type>(fmt).size()) {
253
+ constexpr auto tail = compile_format_string<Args, POS, ID>(fmt);
254
+ if constexpr (std::is_same<remove_cvref_t<decltype(tail)>,
255
+ unknown_format>())
256
+ return tail;
257
+ else
258
+ return make_concat(head, tail);
259
+ } else {
260
+ return head;
261
+ }
262
+ }
263
+
264
+ template <typename T, typename Char> struct parse_specs_result {
265
+ formatter<T, Char> fmt;
266
+ size_t end;
267
+ int next_arg_id;
268
+ };
269
+
270
+ enum { manual_indexing_id = -1 };
271
+
272
+ template <typename T, typename Char>
273
+ constexpr parse_specs_result<T, Char> parse_specs(basic_string_view<Char> str,
274
+ size_t pos, int next_arg_id) {
275
+ str.remove_prefix(pos);
276
+ auto ctx =
277
+ compile_parse_context<Char>(str, max_value<int>(), nullptr, next_arg_id);
278
+ auto f = formatter<T, Char>();
279
+ auto end = f.parse(ctx);
280
+ return {f, pos + fmt::detail::to_unsigned(end - str.data()),
281
+ next_arg_id == 0 ? manual_indexing_id : ctx.next_arg_id()};
282
+ }
283
+
284
+ template <typename Char> struct arg_id_handler {
285
+ arg_id_kind kind;
286
+ arg_ref<Char> arg_id;
287
+
288
+ constexpr int on_auto() {
289
+ FMT_ASSERT(false, "handler cannot be used with automatic indexing");
290
+ return 0;
291
+ }
292
+ constexpr int on_index(int id) {
293
+ kind = arg_id_kind::index;
294
+ arg_id = arg_ref<Char>(id);
295
+ return 0;
296
+ }
297
+ constexpr int on_name(basic_string_view<Char> id) {
298
+ kind = arg_id_kind::name;
299
+ arg_id = arg_ref<Char>(id);
300
+ return 0;
301
+ }
302
+ };
303
+
304
+ template <typename Char> struct parse_arg_id_result {
305
+ arg_id_kind kind;
306
+ arg_ref<Char> arg_id;
307
+ const Char* arg_id_end;
308
+ };
309
+
310
+ template <int ID, typename Char>
311
+ constexpr auto parse_arg_id(const Char* begin, const Char* end) {
312
+ auto handler = arg_id_handler<Char>{arg_id_kind::none, arg_ref<Char>{}};
313
+ auto arg_id_end = parse_arg_id(begin, end, handler);
314
+ return parse_arg_id_result<Char>{handler.kind, handler.arg_id, arg_id_end};
315
+ }
316
+
317
+ template <typename T, typename Enable = void> struct field_type {
318
+ using type = remove_cvref_t<T>;
319
+ };
320
+
321
+ template <typename T>
322
+ struct field_type<T, enable_if_t<detail::is_named_arg<T>::value>> {
323
+ using type = remove_cvref_t<decltype(T::value)>;
324
+ };
325
+
326
+ template <typename T, typename Args, size_t END_POS, int ARG_INDEX, int NEXT_ID,
327
+ typename S>
328
+ constexpr auto parse_replacement_field_then_tail(S fmt) {
329
+ using char_type = typename S::char_type;
330
+ constexpr auto str = basic_string_view<char_type>(fmt);
331
+ constexpr char_type c = END_POS != str.size() ? str[END_POS] : char_type();
332
+ if constexpr (c == '}') {
333
+ return parse_tail<Args, END_POS + 1, NEXT_ID>(
334
+ field<char_type, typename field_type<T>::type, ARG_INDEX>(), fmt);
335
+ } else if constexpr (c != ':') {
336
+ FMT_THROW(format_error("expected ':'"));
337
+ } else {
338
+ constexpr auto result = parse_specs<typename field_type<T>::type>(
339
+ str, END_POS + 1, NEXT_ID == manual_indexing_id ? 0 : NEXT_ID);
340
+ if constexpr (result.end >= str.size() || str[result.end] != '}') {
341
+ FMT_THROW(format_error("expected '}'"));
342
+ return 0;
343
+ } else {
344
+ return parse_tail<Args, result.end + 1, result.next_arg_id>(
345
+ spec_field<char_type, typename field_type<T>::type, ARG_INDEX>{
346
+ result.fmt},
347
+ fmt);
348
+ }
349
+ }
350
+ }
351
+
352
+ // Compiles a non-empty format string and returns the compiled representation
353
+ // or unknown_format() on unrecognized input.
354
+ template <typename Args, size_t POS, int ID, typename S>
355
+ constexpr auto compile_format_string(S fmt) {
356
+ using char_type = typename S::char_type;
357
+ constexpr auto str = basic_string_view<char_type>(fmt);
358
+ if constexpr (str[POS] == '{') {
359
+ if constexpr (POS + 1 == str.size())
360
+ FMT_THROW(format_error("unmatched '{' in format string"));
361
+ if constexpr (str[POS + 1] == '{') {
362
+ return parse_tail<Args, POS + 2, ID>(make_text(str, POS, 1), fmt);
363
+ } else if constexpr (str[POS + 1] == '}' || str[POS + 1] == ':') {
364
+ static_assert(ID != manual_indexing_id,
365
+ "cannot switch from manual to automatic argument indexing");
366
+ constexpr auto next_id =
367
+ ID != manual_indexing_id ? ID + 1 : manual_indexing_id;
368
+ return parse_replacement_field_then_tail<get_type<ID, Args>, Args,
369
+ POS + 1, ID, next_id>(fmt);
370
+ } else {
371
+ constexpr auto arg_id_result =
372
+ parse_arg_id<ID>(str.data() + POS + 1, str.data() + str.size());
373
+ constexpr auto arg_id_end_pos = arg_id_result.arg_id_end - str.data();
374
+ constexpr char_type c =
375
+ arg_id_end_pos != str.size() ? str[arg_id_end_pos] : char_type();
376
+ static_assert(c == '}' || c == ':', "missing '}' in format string");
377
+ if constexpr (arg_id_result.kind == arg_id_kind::index) {
378
+ static_assert(
379
+ ID == manual_indexing_id || ID == 0,
380
+ "cannot switch from automatic to manual argument indexing");
381
+ constexpr auto arg_index = arg_id_result.arg_id.index;
382
+ return parse_replacement_field_then_tail<get_type<arg_index, Args>,
383
+ Args, arg_id_end_pos,
384
+ arg_index, manual_indexing_id>(
385
+ fmt);
386
+ } else if constexpr (arg_id_result.kind == arg_id_kind::name) {
387
+ constexpr auto arg_index =
388
+ get_arg_index_by_name(arg_id_result.arg_id.name, Args{});
389
+ if constexpr (arg_index >= 0) {
390
+ constexpr auto next_id =
391
+ ID != manual_indexing_id ? ID + 1 : manual_indexing_id;
392
+ return parse_replacement_field_then_tail<
393
+ decltype(get_type<arg_index, Args>::value), Args, arg_id_end_pos,
394
+ arg_index, next_id>(fmt);
395
+ } else if constexpr (c == '}') {
396
+ return parse_tail<Args, arg_id_end_pos + 1, ID>(
397
+ runtime_named_field<char_type>{arg_id_result.arg_id.name}, fmt);
398
+ } else if constexpr (c == ':') {
399
+ return unknown_format(); // no type info for specs parsing
400
+ }
401
+ }
402
+ }
403
+ } else if constexpr (str[POS] == '}') {
404
+ if constexpr (POS + 1 == str.size())
405
+ FMT_THROW(format_error("unmatched '}' in format string"));
406
+ return parse_tail<Args, POS + 2, ID>(make_text(str, POS, 1), fmt);
407
+ } else {
408
+ constexpr auto end = parse_text(str, POS + 1);
409
+ if constexpr (end - POS > 1) {
410
+ return parse_tail<Args, end, ID>(make_text(str, POS, end - POS), fmt);
411
+ } else {
412
+ return parse_tail<Args, end, ID>(code_unit<char_type>{str[POS]}, fmt);
413
+ }
414
+ }
415
+ }
416
+
417
+ template <typename... Args, typename S,
418
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
419
+ constexpr auto compile(S fmt) {
420
+ constexpr auto str = basic_string_view<typename S::char_type>(fmt);
421
+ if constexpr (str.size() == 0) {
422
+ return detail::make_text(str, 0, 0);
423
+ } else {
424
+ constexpr auto result =
425
+ detail::compile_format_string<detail::type_list<Args...>, 0, 0>(fmt);
426
+ return result;
427
+ }
428
+ }
429
+ #endif // defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)
430
+ } // namespace detail
431
+
432
+ FMT_BEGIN_EXPORT
433
+
434
+ #if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)
435
+
436
+ template <typename CompiledFormat, typename... Args,
437
+ typename Char = typename CompiledFormat::char_type,
438
+ FMT_ENABLE_IF(detail::is_compiled_format<CompiledFormat>::value)>
439
+ FMT_INLINE std::basic_string<Char> format(const CompiledFormat& cf,
440
+ const Args&... args) {
441
+ auto s = std::basic_string<Char>();
442
+ cf.format(std::back_inserter(s), args...);
443
+ return s;
444
+ }
445
+
446
+ template <typename OutputIt, typename CompiledFormat, typename... Args,
447
+ FMT_ENABLE_IF(detail::is_compiled_format<CompiledFormat>::value)>
448
+ constexpr FMT_INLINE OutputIt format_to(OutputIt out, const CompiledFormat& cf,
449
+ const Args&... args) {
450
+ return cf.format(out, args...);
451
+ }
452
+
453
+ template <typename S, typename... Args,
454
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
455
+ FMT_INLINE std::basic_string<typename S::char_type> format(const S&,
456
+ Args&&... args) {
457
+ if constexpr (std::is_same<typename S::char_type, char>::value) {
458
+ constexpr auto str = basic_string_view<typename S::char_type>(S());
459
+ if constexpr (str.size() == 2 && str[0] == '{' && str[1] == '}') {
460
+ const auto& first = detail::first(args...);
461
+ if constexpr (detail::is_named_arg<
462
+ remove_cvref_t<decltype(first)>>::value) {
463
+ return fmt::to_string(first.value);
464
+ } else {
465
+ return fmt::to_string(first);
466
+ }
467
+ }
468
+ }
469
+ constexpr auto compiled = detail::compile<Args...>(S());
470
+ if constexpr (std::is_same<remove_cvref_t<decltype(compiled)>,
471
+ detail::unknown_format>()) {
472
+ return fmt::format(
473
+ static_cast<basic_string_view<typename S::char_type>>(S()),
474
+ std::forward<Args>(args)...);
475
+ } else {
476
+ return fmt::format(compiled, std::forward<Args>(args)...);
477
+ }
478
+ }
479
+
480
+ template <typename OutputIt, typename S, typename... Args,
481
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
482
+ FMT_CONSTEXPR OutputIt format_to(OutputIt out, const S&, Args&&... args) {
483
+ constexpr auto compiled = detail::compile<Args...>(S());
484
+ if constexpr (std::is_same<remove_cvref_t<decltype(compiled)>,
485
+ detail::unknown_format>()) {
486
+ return fmt::format_to(
487
+ out, static_cast<basic_string_view<typename S::char_type>>(S()),
488
+ std::forward<Args>(args)...);
489
+ } else {
490
+ return fmt::format_to(out, compiled, std::forward<Args>(args)...);
491
+ }
492
+ }
493
+ #endif
494
+
495
+ template <typename OutputIt, typename S, typename... Args,
496
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
497
+ auto format_to_n(OutputIt out, size_t n, const S& fmt, Args&&... args)
498
+ -> format_to_n_result<OutputIt> {
499
+ using traits = detail::fixed_buffer_traits;
500
+ auto buf = detail::iterator_buffer<OutputIt, char, traits>(out, n);
501
+ fmt::format_to(std::back_inserter(buf), fmt, std::forward<Args>(args)...);
502
+ return {buf.out(), buf.count()};
503
+ }
504
+
505
+ template <typename S, typename... Args,
506
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
507
+ FMT_CONSTEXPR20 auto formatted_size(const S& fmt, const Args&... args)
508
+ -> size_t {
509
+ auto buf = detail::counting_buffer<>();
510
+ fmt::format_to(appender(buf), fmt, args...);
511
+ return buf.count();
512
+ }
513
+
514
+ template <typename S, typename... Args,
515
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
516
+ void print(std::FILE* f, const S& fmt, const Args&... args) {
517
+ auto buf = memory_buffer();
518
+ fmt::format_to(appender(buf), fmt, args...);
519
+ detail::print(f, {buf.data(), buf.size()});
520
+ }
521
+
522
+ template <typename S, typename... Args,
523
+ FMT_ENABLE_IF(is_compiled_string<S>::value)>
524
+ void print(const S& fmt, const Args&... args) {
525
+ print(stdout, fmt, args...);
526
+ }
527
+
528
+ #if FMT_USE_NONTYPE_TEMPLATE_ARGS
529
+ inline namespace literals {
530
+ template <detail::fixed_string Str> constexpr auto operator""_cf() {
531
+ return FMT_COMPILE(Str.data);
532
+ }
533
+ } // namespace literals
534
+ #endif
535
+
536
+ FMT_END_EXPORT
537
+ FMT_END_NAMESPACE
538
+
539
+ #endif // FMT_COMPILE_H_
@@ -0,0 +1,5 @@
1
+ // This file is only provided for compatibility and may be removed in future
2
+ // versions. Use fmt/base.h if you don't need fmt::format and fmt/format.h
3
+ // otherwise.
4
+
5
+ #include "format.h"