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,37 @@
1
+ #include "AdapterWrapper.h"
2
+ #include "Cache.h"
3
+ #include "PeripheralWrapper.h"
4
+
5
+ AdapterWrapper::AdapterWrapper(const SimpleBLE::Adapter& adapter) : _adapter(adapter) {}
6
+
7
+ AdapterWrapper::~AdapterWrapper() {
8
+ _adapter.set_callback_on_scan_found(nullptr);
9
+ _adapter.set_callback_on_scan_updated(nullptr);
10
+ _adapter.set_callback_on_scan_start(nullptr);
11
+ _adapter.set_callback_on_scan_stop(nullptr);
12
+ }
13
+
14
+ SimpleBLE::Adapter& AdapterWrapper::get() { return _adapter; }
15
+
16
+ const SimpleBLE::Adapter& AdapterWrapper::get() const { return _adapter; }
17
+
18
+ void AdapterWrapper::setCallback(Org::SimpleJavaBLE::AdapterCallback& callback) {
19
+ _callback = std::move(callback);
20
+
21
+ _adapter.set_callback_on_scan_found([this](const SimpleBLE::Peripheral& peripheral) {
22
+ PeripheralWrapper peripheral_wrapper(peripheral);
23
+ Cache::get().addPeripheral(getHash(), peripheral_wrapper.getHash(), peripheral_wrapper);
24
+ _callback.on_scan_found(peripheral_wrapper.getHash());
25
+ });
26
+
27
+ _adapter.set_callback_on_scan_updated([this](const SimpleBLE::Peripheral& peripheral) {
28
+ PeripheralWrapper peripheral_wrapper(peripheral);
29
+ _callback.on_scan_updated(peripheral_wrapper.getHash());
30
+ });
31
+
32
+ _adapter.set_callback_on_scan_start([this]() { _callback.on_scan_start(); });
33
+
34
+ _adapter.set_callback_on_scan_stop([this]() { _callback.on_scan_stop(); });
35
+ }
36
+
37
+ size_t AdapterWrapper::getHash() { return std::hash<std::string>{}(_adapter.identifier()); }
@@ -0,0 +1,23 @@
1
+ #pragma once
2
+ #include <simpleble/SimpleBLE.h>
3
+ #include "simplejni/Common.hpp"
4
+ #include "simplejni/Registry.hpp"
5
+ #include "org/simplejavable/AdapterCallback.h"
6
+
7
+ class AdapterWrapper {
8
+ public:
9
+ explicit AdapterWrapper(const SimpleBLE::Adapter& adapter);
10
+ ~AdapterWrapper();
11
+
12
+ // Accessor to the underlying adapter
13
+ SimpleBLE::Adapter& get();
14
+ const SimpleBLE::Adapter& get() const;
15
+
16
+ void setCallback(Org::SimpleJavaBLE::AdapterCallback& callback);
17
+
18
+ size_t getHash();
19
+
20
+ private:
21
+ SimpleBLE::Adapter _adapter;
22
+ Org::SimpleJavaBLE::AdapterCallback _callback;
23
+ };
@@ -0,0 +1,58 @@
1
+ #include "Cache.h"
2
+
3
+ Cache& Cache::get() {
4
+ static Cache instance;
5
+ return instance;
6
+ }
7
+
8
+ void Cache::addAdapter(size_t adapter_id, const AdapterWrapper& adapter) {
9
+ if (hasAdapter(adapter_id)) return;
10
+
11
+ cached_adapters.emplace(adapter_id, adapter);
12
+ }
13
+
14
+ AdapterWrapper* Cache::getAdapter(size_t adapter_id) {
15
+ auto it = cached_adapters.find(adapter_id);
16
+ return (it != cached_adapters.end()) ? &it->second : nullptr;
17
+ }
18
+
19
+ bool Cache::hasAdapter(size_t adapter_id) const { return cached_adapters.find(adapter_id) != cached_adapters.end(); }
20
+
21
+ bool Cache::hasPeripheral(size_t adapter_id, size_t peripheral_id) const {
22
+ auto adapter_it = cached_peripherals.find(adapter_id);
23
+ return (adapter_it != cached_peripherals.end()) &&
24
+ (adapter_it->second.find(peripheral_id) != adapter_it->second.end());
25
+ }
26
+
27
+ void Cache::addPeripheral(size_t adapter_id, size_t peripheral_id, const PeripheralWrapper& peripheral) {
28
+ if (!hasAdapter(adapter_id)) {
29
+ // Optional: Log or throw
30
+ return;
31
+ }
32
+
33
+ if (hasPeripheral(adapter_id, peripheral_id)) {
34
+ return;
35
+ }
36
+
37
+ cached_peripherals[adapter_id].emplace(peripheral_id, peripheral);
38
+ }
39
+
40
+ PeripheralWrapper* Cache::getPeripheral(size_t adapter_id, size_t peripheral_id) {
41
+ auto adapter_it = cached_peripherals.find(adapter_id);
42
+ if (adapter_it == cached_peripherals.end()) return nullptr;
43
+
44
+ auto peripheral_it = adapter_it->second.find(peripheral_id);
45
+ return (peripheral_it != adapter_it->second.end()) ? &peripheral_it->second : nullptr;
46
+ }
47
+
48
+ void Cache::removeAdapter(size_t adapter_id) {
49
+ cached_adapters.erase(adapter_id);
50
+ cached_peripherals.erase(adapter_id);
51
+ }
52
+
53
+ void Cache::removePeripheral(size_t adapter_id, size_t peripheral_id) {
54
+ auto adapter_it = cached_peripherals.find(adapter_id);
55
+ if (adapter_it != cached_peripherals.end()) {
56
+ adapter_it->second.erase(peripheral_id);
57
+ }
58
+ }
@@ -0,0 +1,34 @@
1
+ #pragma once
2
+ #include <map>
3
+
4
+ #include "AdapterWrapper.h"
5
+ #include "PeripheralWrapper.h"
6
+
7
+ class Cache {
8
+ private:
9
+ Cache() = default;
10
+
11
+ // Maps now store wrappers
12
+ std::map<size_t, AdapterWrapper> cached_adapters;
13
+ std::map<size_t, std::map<size_t, PeripheralWrapper>> cached_peripherals;
14
+
15
+ public:
16
+ static Cache& get();
17
+
18
+ Cache(const Cache&) = delete;
19
+ Cache& operator=(const Cache&) = delete;
20
+
21
+ // Adapter management
22
+ void addAdapter(size_t adapter_id, const AdapterWrapper& adapter);
23
+ AdapterWrapper* getAdapter(size_t adapter_id);
24
+ bool hasAdapter(size_t adapter_id) const;
25
+
26
+ // Peripheral management
27
+ void addPeripheral(size_t adapter_id, size_t peripheral_id, const PeripheralWrapper& peripheral);
28
+ PeripheralWrapper* getPeripheral(size_t adapter_id, size_t peripheral_id);
29
+ bool hasPeripheral(size_t adapter_id, size_t peripheral_id) const;
30
+
31
+ // Removal methods
32
+ void removeAdapter(size_t adapter_id);
33
+ void removePeripheral(size_t adapter_id, size_t peripheral_id);
34
+ };
@@ -0,0 +1,17 @@
1
+ #include "PeripheralWrapper.h"
2
+
3
+ PeripheralWrapper::PeripheralWrapper(const SimpleBLE::Peripheral& peripheral) : _peripheral(peripheral) {}
4
+
5
+ SimpleBLE::Peripheral& PeripheralWrapper::get() { return _peripheral; }
6
+
7
+ const SimpleBLE::Peripheral& PeripheralWrapper::get() const { return _peripheral; }
8
+
9
+ void PeripheralWrapper::setCallback(Org::SimpleJavaBLE::PeripheralCallback& callback) {
10
+ _callback = std::move(callback);
11
+
12
+ _peripheral.set_callback_on_connected([this]() { _callback.on_connected(); });
13
+
14
+ _peripheral.set_callback_on_disconnected([this]() { _callback.on_disconnected(); });
15
+ }
16
+
17
+ size_t PeripheralWrapper::getHash() { return std::hash<std::string>{}(_peripheral.address()); }
@@ -0,0 +1,19 @@
1
+ #pragma once
2
+ #include <simpleble/SimpleBLE.h>
3
+ #include "org/simplejavable/PeripheralCallback.h"
4
+
5
+ class PeripheralWrapper {
6
+ public:
7
+ explicit PeripheralWrapper(const SimpleBLE::Peripheral& peripheral);
8
+
9
+ SimpleBLE::Peripheral& get();
10
+ const SimpleBLE::Peripheral& get() const;
11
+
12
+ void setCallback(Org::SimpleJavaBLE::PeripheralCallback& callback);
13
+
14
+ size_t getHash();
15
+
16
+ private:
17
+ SimpleBLE::Peripheral _peripheral;
18
+ Org::SimpleJavaBLE::PeripheralCallback _callback;
19
+ };
@@ -0,0 +1,257 @@
1
+ #include "ArrayList.h"
2
+
3
+ namespace Java::Util {
4
+
5
+ template <template <typename> class RefType>
6
+ SimpleJNI::GlobalRef<jclass> ArrayList<RefType>::_cls;
7
+
8
+ template <template <typename> class RefType>
9
+ jmethodID ArrayList<RefType>::_constructor = nullptr;
10
+
11
+ template <template <typename> class RefType>
12
+ jmethodID ArrayList<RefType>::_constructor_capacity = nullptr;
13
+
14
+ template <template <typename> class RefType>
15
+ jmethodID ArrayList<RefType>::_method_iterator = nullptr;
16
+
17
+ template <template <typename> class RefType>
18
+ jmethodID ArrayList<RefType>::_method_add = nullptr;
19
+
20
+ template <template <typename> class RefType>
21
+ jmethodID ArrayList<RefType>::_method_add_at_index = nullptr;
22
+
23
+ template <template <typename> class RefType>
24
+ jmethodID ArrayList<RefType>::_method_remove_object = nullptr;
25
+
26
+ template <template <typename> class RefType>
27
+ jmethodID ArrayList<RefType>::_method_remove_index = nullptr;
28
+
29
+ template <template <typename> class RefType>
30
+ jmethodID ArrayList<RefType>::_method_clear = nullptr;
31
+
32
+ template <template <typename> class RefType>
33
+ jmethodID ArrayList<RefType>::_method_size = nullptr;
34
+
35
+ template <template <typename> class RefType>
36
+ jmethodID ArrayList<RefType>::_method_get = nullptr;
37
+
38
+ template <template <typename> class RefType>
39
+ jmethodID ArrayList<RefType>::_method_set = nullptr;
40
+
41
+ template <template <typename> class RefType>
42
+ jmethodID ArrayList<RefType>::_method_isEmpty = nullptr;
43
+
44
+ template <template <typename> class RefType>
45
+ jmethodID ArrayList<RefType>::_method_ensureCapacity = nullptr;
46
+
47
+ template <template <typename> class RefType>
48
+ jmethodID ArrayList<RefType>::_method_trimToSize = nullptr;
49
+
50
+ template <template <typename> class RefType>
51
+ const SimpleJNI::JNIDescriptor ArrayList<RefType>::descriptor{
52
+ "java/util/ArrayList", // Java class name
53
+ &_cls, // Where to store the jclass
54
+ { // Methods to preload
55
+ {"<init>", "()V", &_constructor},
56
+ {"<init>", "(I)V", &_constructor_capacity},
57
+ {"iterator", "()Ljava/util/Iterator;", &_method_iterator},
58
+ {"add", "(Ljava/lang/Object;)Z", &_method_add},
59
+ {"add", "(ILjava/lang/Object;)V", &_method_add_at_index},
60
+ {"remove", "(Ljava/lang/Object;)Z", &_method_remove_object},
61
+ {"remove", "(I)Ljava/lang/Object;", &_method_remove_index},
62
+ {"clear", "()V", &_method_clear},
63
+ {"size", "()I", &_method_size},
64
+ {"get", "(I)Ljava/lang/Object;", &_method_get},
65
+ {"set", "(ILjava/lang/Object;)Ljava/lang/Object;", &_method_set},
66
+ {"isEmpty", "()Z", &_method_isEmpty},
67
+ {"ensureCapacity", "(I)V", &_method_ensureCapacity},
68
+ {"trimToSize", "()V", &_method_trimToSize}}};
69
+
70
+ template <template <typename> class RefType>
71
+ const SimpleJNI::AutoRegister<ArrayList<RefType>> ArrayList<RefType>::registrar{&descriptor};
72
+
73
+ template <template <typename> class RefType>
74
+ ArrayList<RefType>::ArrayList() : _obj() {
75
+ if (!_cls.get()) {
76
+ throw std::runtime_error("ArrayList JNI resources not preloaded");
77
+ }
78
+
79
+ SimpleJNI::Env env;
80
+ jobject obj = env->NewObject(_cls.get(), _constructor);
81
+ if (obj == nullptr) {
82
+ throw std::runtime_error("Failed to create ArrayList instance");
83
+ }
84
+
85
+ _obj = SimpleJNI::Object<RefType, jobject>(obj, _cls.get());
86
+ env->DeleteLocalRef(obj);
87
+ }
88
+
89
+ template <template <typename> class RefType>
90
+ ArrayList<RefType>::ArrayList(int initialCapacity) : _obj() {
91
+ if (!_cls.get()) {
92
+ throw std::runtime_error("ArrayList JNI resources not preloaded");
93
+ }
94
+
95
+ SimpleJNI::Env env;
96
+ jobject obj = env->NewObject(_cls.get(), _constructor_capacity, initialCapacity);
97
+ if (obj == nullptr) {
98
+ throw std::runtime_error("Failed to create ArrayList instance with capacity");
99
+ }
100
+
101
+ _obj = SimpleJNI::Object<RefType, jobject>(obj, _cls.get());
102
+ env->DeleteLocalRef(obj);
103
+ }
104
+
105
+ template <template <typename> class RefType>
106
+ ArrayList<RefType>::ArrayList(jobject obj) : _obj() {
107
+ if (!_cls.get()) {
108
+ throw std::runtime_error("ArrayList JNI resources not preloaded");
109
+ }
110
+ _obj = SimpleJNI::Object<RefType, jobject>(obj, _cls.get());
111
+ }
112
+
113
+ template <template <typename> class RefType>
114
+ template <template <typename> class OtherRefType>
115
+ ArrayList<RefType>::ArrayList(const SimpleJNI::Object<OtherRefType, jobject>& obj) : _obj(obj.get()) {}
116
+
117
+ template <template <typename> class RefType>
118
+ ArrayList<SimpleJNI::LocalRef> ArrayList<RefType>::to_local() const {
119
+ if (!*this) return ArrayList<SimpleJNI::LocalRef>();
120
+ return ArrayList<SimpleJNI::LocalRef>(_obj.get());
121
+ }
122
+
123
+ template <template <typename> class RefType>
124
+ ArrayList<SimpleJNI::GlobalRef> ArrayList<RefType>::to_global() const {
125
+ if (!*this) return ArrayList<SimpleJNI::GlobalRef>();
126
+ return ArrayList<SimpleJNI::GlobalRef>(_obj.get());
127
+ }
128
+
129
+ template <template <typename> class RefType>
130
+ jobject ArrayList<RefType>::get() const {
131
+ return _obj.get();
132
+ }
133
+
134
+ template <template <typename> class RefType>
135
+ template <template <typename> class R>
136
+ typename std::enable_if<std::is_same<R<jobject>, SimpleJNI::ReleasableLocalRef<jobject>>::value, jobject>::type
137
+ ArrayList<RefType>::release() {
138
+ return _obj.release();
139
+ }
140
+
141
+ template <template <typename> class RefType>
142
+ ArrayList<RefType>::operator bool() const {
143
+ return _obj.get() != nullptr;
144
+ }
145
+
146
+ template <template <typename> class RefType>
147
+ ArrayList<RefType>::operator SimpleJNI::Object<RefType, jobject>() const {
148
+ return _obj;
149
+ }
150
+
151
+ template <template <typename> class RefType>
152
+ Iterator<SimpleJNI::LocalRef> ArrayList<RefType>::iterator() const {
153
+ if (!*this) {
154
+ throw std::runtime_error("ArrayList is not initialized");
155
+ }
156
+ jobject iter = _obj.call_object_method(_method_iterator).get();
157
+ return Iterator<SimpleJNI::LocalRef>(iter);
158
+ }
159
+
160
+ template <template <typename> class RefType>
161
+ void ArrayList<RefType>::add(const SimpleJNI::Object<RefType, jobject>& element) {
162
+ if (!*this) {
163
+ throw std::runtime_error("ArrayList is not initialized");
164
+ }
165
+ _obj.call_boolean_method(_method_add, element.get());
166
+ }
167
+
168
+ template <template <typename> class RefType>
169
+ void ArrayList<RefType>::add(size_t index, const SimpleJNI::Object<RefType, jobject>& element) {
170
+ if (!*this) {
171
+ throw std::runtime_error("ArrayList is not initialized");
172
+ }
173
+ _obj.call_void_method(_method_add_at_index, static_cast<jint>(index), element.get());
174
+ }
175
+
176
+ template <template <typename> class RefType>
177
+ bool ArrayList<RefType>::remove(const SimpleJNI::Object<RefType, jobject>& element) {
178
+ if (!*this) {
179
+ throw std::runtime_error("ArrayList is not initialized");
180
+ }
181
+ return _obj.call_boolean_method(_method_remove_object, element.get());
182
+ }
183
+
184
+ template <template <typename> class RefType>
185
+ SimpleJNI::Object<SimpleJNI::LocalRef> ArrayList<RefType>::remove(size_t index) {
186
+ if (!*this) {
187
+ throw std::runtime_error("ArrayList is not initialized");
188
+ }
189
+ return _obj.call_object_method(_method_remove_index, static_cast<jint>(index));
190
+ }
191
+
192
+ template <template <typename> class RefType>
193
+ void ArrayList<RefType>::clear() {
194
+ if (!*this) {
195
+ throw std::runtime_error("ArrayList is not initialized");
196
+ }
197
+ _obj.call_void_method(_method_clear);
198
+ }
199
+
200
+ template <template <typename> class RefType>
201
+ size_t ArrayList<RefType>::size() const {
202
+ if (!*this) {
203
+ throw std::runtime_error("ArrayList is not initialized");
204
+ }
205
+ return static_cast<size_t>(_obj.call_int_method(_method_size));
206
+ }
207
+
208
+ template <template <typename> class RefType>
209
+ SimpleJNI::Object<SimpleJNI::LocalRef> ArrayList<RefType>::get(size_t index) const {
210
+ if (!*this) {
211
+ throw std::runtime_error("ArrayList is not initialized");
212
+ }
213
+ return _obj.call_object_method(_method_get, static_cast<jint>(index));
214
+ }
215
+
216
+ template <template <typename> class RefType>
217
+ SimpleJNI::Object<SimpleJNI::LocalRef> ArrayList<RefType>::set(size_t index,
218
+ const SimpleJNI::Object<RefType, jobject>& element) {
219
+ if (!*this) {
220
+ throw std::runtime_error("ArrayList is not initialized");
221
+ }
222
+ return _obj.call_object_method(_method_set, static_cast<jint>(index), element.get());
223
+ }
224
+
225
+ template <template <typename> class RefType>
226
+ bool ArrayList<RefType>::isEmpty() const {
227
+ if (!*this) {
228
+ throw std::runtime_error("ArrayList is not initialized");
229
+ }
230
+ return _obj.call_boolean_method(_method_isEmpty);
231
+ }
232
+
233
+ template <template <typename> class RefType>
234
+ void ArrayList<RefType>::ensureCapacity(int minCapacity) {
235
+ if (!*this) {
236
+ throw std::runtime_error("ArrayList is not initialized");
237
+ }
238
+ _obj.call_void_method(_method_ensureCapacity, minCapacity);
239
+ }
240
+
241
+ template <template <typename> class RefType>
242
+ void ArrayList<RefType>::trimToSize() {
243
+ if (!*this) {
244
+ throw std::runtime_error("ArrayList is not initialized");
245
+ }
246
+ _obj.call_void_method(_method_trimToSize);
247
+ }
248
+
249
+ // Explicit template instantiations
250
+ template class ArrayList<SimpleJNI::LocalRef>;
251
+ template class ArrayList<SimpleJNI::GlobalRef>;
252
+ template class ArrayList<SimpleJNI::WeakRef>;
253
+ template class ArrayList<SimpleJNI::ReleasableLocalRef>;
254
+
255
+ template jobject ArrayList<SimpleJNI::ReleasableLocalRef>::release<SimpleJNI::ReleasableLocalRef>();
256
+
257
+ } // namespace Java::Util
@@ -0,0 +1,78 @@
1
+ #pragma once
2
+
3
+ #include <cstddef>
4
+ #include "Iterator.h"
5
+ #include "simplejni/Common.hpp"
6
+ #include "simplejni/Registry.hpp"
7
+
8
+ namespace Java::Util {
9
+
10
+ template <template <typename> class RefType>
11
+ class ArrayList {
12
+ public:
13
+ ArrayList();
14
+ explicit ArrayList(jobject obj);
15
+ ArrayList(int initialCapacity);
16
+
17
+ template <template <typename> class OtherRefType>
18
+ ArrayList(const SimpleJNI::Object<OtherRefType, jobject>& obj);
19
+
20
+ // Conversion methods
21
+ ArrayList<SimpleJNI::LocalRef> to_local() const;
22
+ ArrayList<SimpleJNI::GlobalRef> to_global() const;
23
+
24
+ // Get the underlying jobject
25
+ jobject get() const;
26
+
27
+ // Release the underlying jobject
28
+ template <template <typename> class R = RefType>
29
+ typename std::enable_if<std::is_same<R<jobject>, SimpleJNI::ReleasableLocalRef<jobject>>::value, jobject>::type
30
+ release();
31
+
32
+ // Check if the object is valid
33
+ explicit operator bool() const;
34
+
35
+ // Implicit conversion to SimpleJNI::Object
36
+ operator SimpleJNI::Object<RefType, jobject>() const;
37
+
38
+ // ArrayList methods
39
+ Iterator<SimpleJNI::LocalRef> iterator() const;
40
+ void add(const SimpleJNI::Object<RefType, jobject>& element);
41
+ void add(size_t index, const SimpleJNI::Object<RefType, jobject>& element);
42
+ bool remove(const SimpleJNI::Object<RefType, jobject>& element);
43
+ SimpleJNI::Object<SimpleJNI::LocalRef> remove(size_t index);
44
+ void clear();
45
+ size_t size() const;
46
+ SimpleJNI::Object<SimpleJNI::LocalRef> get(size_t index) const;
47
+ SimpleJNI::Object<SimpleJNI::LocalRef> set(size_t index, const SimpleJNI::Object<RefType, jobject>& element);
48
+ bool isEmpty() const;
49
+ void ensureCapacity(int minCapacity);
50
+ void trimToSize();
51
+
52
+ private:
53
+ // Underlying JNI object
54
+ SimpleJNI::Object<RefType, jobject> _obj;
55
+
56
+ // Static JNI resources
57
+ static SimpleJNI::GlobalRef<jclass> _cls;
58
+ static jmethodID _constructor;
59
+ static jmethodID _constructor_capacity;
60
+ static jmethodID _method_iterator;
61
+ static jmethodID _method_add;
62
+ static jmethodID _method_add_at_index;
63
+ static jmethodID _method_remove_object;
64
+ static jmethodID _method_remove_index;
65
+ static jmethodID _method_clear;
66
+ static jmethodID _method_size;
67
+ static jmethodID _method_get;
68
+ static jmethodID _method_set;
69
+ static jmethodID _method_isEmpty;
70
+ static jmethodID _method_ensureCapacity;
71
+ static jmethodID _method_trimToSize;
72
+
73
+ // JNI descriptor for auto-registration
74
+ static const SimpleJNI::JNIDescriptor descriptor;
75
+ static const SimpleJNI::AutoRegister<ArrayList> registrar;
76
+ };
77
+
78
+ } // namespace Java::Util
@@ -0,0 +1,96 @@
1
+ #include "HashMap.h"
2
+
3
+ namespace Java::Util {
4
+
5
+ template <template <typename> class RefType>
6
+ SimpleJNI::GlobalRef<jclass> HashMap<RefType>::_cls;
7
+
8
+ template <template <typename> class RefType>
9
+ jmethodID HashMap<RefType>::_method_init = nullptr;
10
+
11
+ template <template <typename> class RefType>
12
+ jmethodID HashMap<RefType>::_method_put = nullptr;
13
+
14
+ template <template <typename> class RefType>
15
+ const SimpleJNI::JNIDescriptor HashMap<RefType>::descriptor{
16
+ "java/util/HashMap", // Java class name
17
+ &_cls, // Where to store the jclass
18
+ { // Methods to preload
19
+ {"<init>", "()V", &_method_init},
20
+ {"put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", &_method_put}}};
21
+
22
+ template <template <typename> class RefType>
23
+ const SimpleJNI::AutoRegister<HashMap<RefType>> HashMap<RefType>::registrar{&descriptor};
24
+
25
+ template <template <typename> class RefType>
26
+ HashMap<RefType>::HashMap() : _obj() {
27
+ if (!_cls.get()) {
28
+ throw std::runtime_error("HashMap JNI resources not preloaded");
29
+ }
30
+
31
+ JNIEnv* env = SimpleJNI::VM::env();
32
+ jobject obj = env->NewObject(_cls.get(), _method_init);
33
+ _obj = SimpleJNI::Object<RefType, jobject>(obj, _cls.get());
34
+ }
35
+
36
+ template <template <typename> class RefType>
37
+ HashMap<RefType>::HashMap(jobject obj) : _obj(obj) {}
38
+
39
+ template <template <typename> class RefType>
40
+ template <template <typename> class OtherRefType>
41
+ HashMap<RefType>::HashMap(const SimpleJNI::Object<OtherRefType, jobject>& obj) : _obj(obj.get()) {}
42
+
43
+ template <template <typename> class RefType>
44
+ HashMap<SimpleJNI::LocalRef> HashMap<RefType>::to_local() const {
45
+ if (!*this) return HashMap<SimpleJNI::LocalRef>();
46
+ return HashMap<SimpleJNI::LocalRef>(_obj.get());
47
+ }
48
+
49
+ template <template <typename> class RefType>
50
+ HashMap<SimpleJNI::GlobalRef> HashMap<RefType>::to_global() const {
51
+ if (!*this) return HashMap<SimpleJNI::GlobalRef>();
52
+ return HashMap<SimpleJNI::GlobalRef>(_obj.get());
53
+ }
54
+
55
+ template <template <typename> class RefType>
56
+ jobject HashMap<RefType>::get() const {
57
+ return _obj.get();
58
+ }
59
+
60
+ template <template <typename> class RefType>
61
+ template <template <typename> class R>
62
+ typename std::enable_if<std::is_same<R<jobject>, SimpleJNI::ReleasableLocalRef<jobject>>::value, jobject>::type
63
+ HashMap<RefType>::release() {
64
+ return _obj.release();
65
+ }
66
+
67
+ template <template <typename> class RefType>
68
+ HashMap<RefType>::operator bool() const {
69
+ return _obj.get() != nullptr;
70
+ }
71
+
72
+ template <template <typename> class RefType>
73
+ template <template <typename> class KeyRefType, template <typename> class ValueRefType>
74
+ SimpleJNI::Object<SimpleJNI::LocalRef> HashMap<RefType>::put(const SimpleJNI::Object<KeyRefType, jobject>& key,
75
+ const SimpleJNI::Object<ValueRefType, jobject>& value) {
76
+ return _obj.call_object_method(_method_put, key.get(), value.get());
77
+ }
78
+
79
+ template <template <typename> class RefType>
80
+ HashMap<RefType>::operator SimpleJNI::Object<RefType, jobject>() const {
81
+ return _obj;
82
+ }
83
+
84
+ // Explicit template instantiations
85
+ template class HashMap<SimpleJNI::LocalRef>;
86
+ template class HashMap<SimpleJNI::GlobalRef>;
87
+ template class HashMap<SimpleJNI::WeakRef>;
88
+ template class HashMap<SimpleJNI::ReleasableLocalRef>;
89
+
90
+ template SimpleJNI::Object<SimpleJNI::LocalRef, jobject> HashMap<SimpleJNI::ReleasableLocalRef>::put<
91
+ SimpleJNI::LocalRef, SimpleJNI::LocalRef>(const SimpleJNI::Object<SimpleJNI::LocalRef, jobject>& key,
92
+ const SimpleJNI::Object<SimpleJNI::LocalRef, jobject>& value);
93
+
94
+ template jobject HashMap<SimpleJNI::ReleasableLocalRef>::release<SimpleJNI::ReleasableLocalRef>();
95
+
96
+ } // namespace Java::Util
@@ -0,0 +1,54 @@
1
+ #pragma once
2
+
3
+ #include "simplejni/Common.hpp"
4
+ #include "simplejni/Registry.hpp"
5
+
6
+ namespace Java::Util {
7
+
8
+ template <template <typename> class RefType>
9
+ class HashMap {
10
+ public:
11
+ HashMap();
12
+ explicit HashMap(jobject obj);
13
+
14
+ template <template <typename> class OtherRefType>
15
+ HashMap(const SimpleJNI::Object<OtherRefType, jobject>& obj);
16
+
17
+ // Conversion methods
18
+ HashMap<SimpleJNI::LocalRef> to_local() const;
19
+ HashMap<SimpleJNI::GlobalRef> to_global() const;
20
+
21
+ // Get the underlying jobject
22
+ jobject get() const;
23
+
24
+ // Release the underlying jobject
25
+ template <template <typename> class R = RefType>
26
+ typename std::enable_if<std::is_same<R<jobject>, SimpleJNI::ReleasableLocalRef<jobject>>::value, jobject>::type
27
+ release();
28
+
29
+ // Check if the object is valid
30
+ explicit operator bool() const;
31
+
32
+ // Implicit conversion to SimpleJNI::Object
33
+ operator SimpleJNI::Object<RefType, jobject>() const;
34
+
35
+ // Put a key-value pair into the map
36
+ template <template <typename> class KeyRefType, template <typename> class ValueRefType>
37
+ SimpleJNI::Object<SimpleJNI::LocalRef> put(const SimpleJNI::Object<KeyRefType, jobject>& key,
38
+ const SimpleJNI::Object<ValueRefType, jobject>& value);
39
+
40
+ private:
41
+ // Underlying JNI object
42
+ SimpleJNI::Object<RefType, jobject> _obj;
43
+
44
+ // Static JNI resources
45
+ static SimpleJNI::GlobalRef<jclass> _cls;
46
+ static jmethodID _method_init;
47
+ static jmethodID _method_put;
48
+
49
+ // JNI descriptor for auto-registration
50
+ static const SimpleJNI::JNIDescriptor descriptor;
51
+ static const SimpleJNI::AutoRegister<HashMap> registrar;
52
+ };
53
+
54
+ } // namespace Java::Util