#ifndef PLATFORM_V2_API_PLATFORM_H_ #define PLATFORM_V2_API_PLATFORM_H_ #include #include #include #include "platform_v2/api/atomic_boolean.h" #include "platform_v2/api/atomic_reference.h" #include "platform_v2/api/ble.h" #include "platform_v2/api/ble_v2.h" #include "platform_v2/api/bluetooth_adapter.h" #include "platform_v2/api/bluetooth_classic.h" #include "platform_v2/api/condition_variable.h" #include "platform_v2/api/count_down_latch.h" #include "platform_v2/api/crypto.h" #include "platform_v2/api/input_file.h" #include "platform_v2/api/mutex.h" #include "platform_v2/api/output_file.h" #include "platform_v2/api/scheduled_executor.h" #include "platform_v2/api/server_sync.h" #include "platform_v2/api/settable_future.h" #include "platform_v2/api/submittable_executor.h" #include "platform_v2/api/system_clock.h" #include "platform_v2/api/webrtc.h" #include "platform_v2/api/wifi.h" #include "platform_v2/api/wifi_lan.h" #include "absl/strings/string_view.h" #include "absl/types/any.h" namespace location { namespace nearby { namespace api { // API rework notes: // https://docs.google.com/spreadsheets/d/1erZNkX7pX8s5jWTHdxgjntxTMor3BGiY2H_fC_ldtoQ/edit#gid=381357998 class ImplementationPlatform { public: // General platform support: // - atomic variables (boolean, and any other copyable type) // - synchronization primitives: // - mutex (regular, and recursive) // - condition variable (must work with regular mutex only) // - Future : to synchronize on Callable schduled to execute. // - CountDownLatch : to ensure at least N threads are waiting. // - file I/O static std::unique_ptr> CreateAtomicReferenceAny( absl::any initial_value); static std::unique_ptr> CreateSettableFutureAny(); static std::unique_ptr CreateAtomicBoolean(bool initial_value); static std::unique_ptr CreateCountDownLatch( std::int32_t count); static std::unique_ptr CreateMutex(Mutex::Mode mode); static std::unique_ptr CreateConditionVariable( Mutex* mutex); static std::unique_ptr CreateInputFile(std::int64_t payload_id, std::int64_t total_size); static std::unique_ptr CreateOutputFile(std::int64_t payload_id); // Java-like Executors static std::unique_ptr CreateSingleThreadExecutor(); static std::unique_ptr CreateMultiThreadExecutor( std::int32_t max_concurrency); static std::unique_ptr CreateScheduledExecutor(); // Protocol implementations, domain-specific support static std::unique_ptr CreateBluetoothAdapter(); static std::unique_ptr CreateBluetoothClassicMedium(); static std::unique_ptr CreateBleMedium(); static std::unique_ptr CreateBleV2Medium(); static std::unique_ptr CreateServerSyncMedium(); static std::unique_ptr CreateWifiMedium(); static std::unique_ptr CreateWifiLanMedium(); static std::unique_ptr CreateWebRtcMedium(); static std::string GetDeviceId(); }; } // namespace api } // namespace nearby } // namespace location #endif // PLATFORM_V2_API_PLATFORM_H_