Use optional for nullable types

AIDL generates optional<T> for nullable T types for C++, which is more
efficient and idomatic and easy to use.

Bug: 144773267
Test: build/flash/boot
Change-Id: Iac0c34e10bc09f1230d0a941b05618671cbcbb5e
This commit is contained in:
Jooyung Han 2020-01-23 13:27:56 +09:00
parent 067e1194a3
commit 78ac2cc2b4
2 changed files with 28 additions and 30 deletions

View File

@ -39,6 +39,7 @@ using android::net::wifi::nl80211::DeviceWiphyCapabilities;
using android::wifi_system::InterfaceTool; using android::wifi_system::InterfaceTool;
using std::endl; using std::endl;
using std::optional;
using std::placeholders::_1; using std::placeholders::_1;
using std::string; using std::string;
using std::stringstream; using std::stringstream;
@ -241,7 +242,7 @@ void Server::MarkDownAllInterfaces() {
} }
Status Server::getAvailable2gChannels( Status Server::getAvailable2gChannels(
std::unique_ptr<vector<int32_t>>* out_frequencies) { std::optional<vector<int32_t>>* out_frequencies) {
BandInfo band_info; BandInfo band_info;
ScanCapabilities scan_capabilities_ignored; ScanCapabilities scan_capabilities_ignored;
WiphyFeatures wiphy_features_ignored; WiphyFeatures wiphy_features_ignored;
@ -250,17 +251,16 @@ Status Server::getAvailable2gChannels(
&scan_capabilities_ignored, &scan_capabilities_ignored,
&wiphy_features_ignored)) { &wiphy_features_ignored)) {
LOG(ERROR) << "Failed to get wiphy info from kernel"; LOG(ERROR) << "Failed to get wiphy info from kernel";
out_frequencies->reset(nullptr); out_frequencies->reset();
return Status::ok(); return Status::ok();
} }
out_frequencies->reset( out_frequencies->emplace(band_info.band_2g.begin(), band_info.band_2g.end());
new vector<int32_t>(band_info.band_2g.begin(), band_info.band_2g.end()));
return Status::ok(); return Status::ok();
} }
Status Server::getAvailable5gNonDFSChannels( Status Server::getAvailable5gNonDFSChannels(
std::unique_ptr<vector<int32_t>>* out_frequencies) { std::optional<vector<int32_t>>* out_frequencies) {
BandInfo band_info; BandInfo band_info;
ScanCapabilities scan_capabilities_ignored; ScanCapabilities scan_capabilities_ignored;
WiphyFeatures wiphy_features_ignored; WiphyFeatures wiphy_features_ignored;
@ -269,17 +269,16 @@ Status Server::getAvailable5gNonDFSChannels(
&scan_capabilities_ignored, &scan_capabilities_ignored,
&wiphy_features_ignored)) { &wiphy_features_ignored)) {
LOG(ERROR) << "Failed to get wiphy info from kernel"; LOG(ERROR) << "Failed to get wiphy info from kernel";
out_frequencies->reset(nullptr); out_frequencies->reset();
return Status::ok(); return Status::ok();
} }
out_frequencies->reset( out_frequencies->emplace(band_info.band_5g.begin(), band_info.band_5g.end());
new vector<int32_t>(band_info.band_5g.begin(), band_info.band_5g.end()));
return Status::ok(); return Status::ok();
} }
Status Server::getAvailableDFSChannels( Status Server::getAvailableDFSChannels(
std::unique_ptr<vector<int32_t>>* out_frequencies) { std::optional<vector<int32_t>>* out_frequencies) {
BandInfo band_info; BandInfo band_info;
ScanCapabilities scan_capabilities_ignored; ScanCapabilities scan_capabilities_ignored;
WiphyFeatures wiphy_features_ignored; WiphyFeatures wiphy_features_ignored;
@ -288,17 +287,17 @@ Status Server::getAvailableDFSChannels(
&scan_capabilities_ignored, &scan_capabilities_ignored,
&wiphy_features_ignored)) { &wiphy_features_ignored)) {
LOG(ERROR) << "Failed to get wiphy info from kernel"; LOG(ERROR) << "Failed to get wiphy info from kernel";
out_frequencies->reset(nullptr); out_frequencies->reset();
return Status::ok(); return Status::ok();
} }
out_frequencies->reset(new vector<int32_t>(band_info.band_dfs.begin(), out_frequencies->emplace(band_info.band_dfs.begin(),
band_info.band_dfs.end())); band_info.band_dfs.end());
return Status::ok(); return Status::ok();
} }
Status Server::getAvailable6gChannels( Status Server::getAvailable6gChannels(
std::unique_ptr<vector<int32_t>>* out_frequencies) { std::optional<vector<int32_t>>* out_frequencies) {
BandInfo band_info; BandInfo band_info;
ScanCapabilities scan_capabilities_ignored; ScanCapabilities scan_capabilities_ignored;
WiphyFeatures wiphy_features_ignored; WiphyFeatures wiphy_features_ignored;
@ -307,18 +306,17 @@ Status Server::getAvailable6gChannels(
&scan_capabilities_ignored, &scan_capabilities_ignored,
&wiphy_features_ignored)) { &wiphy_features_ignored)) {
LOG(ERROR) << "Failed to get wiphy info from kernel"; LOG(ERROR) << "Failed to get wiphy info from kernel";
out_frequencies->reset(nullptr); out_frequencies->reset();
return Status::ok(); return Status::ok();
} }
out_frequencies->reset( out_frequencies->emplace(band_info.band_6g.begin(), band_info.band_6g.end());
new vector<int32_t>(band_info.band_6g.begin(), band_info.band_6g.end()));
return Status::ok(); return Status::ok();
} }
Status Server::getDeviceWiphyCapabilities( Status Server::getDeviceWiphyCapabilities(
const std::string& iface_name, const std::string& iface_name,
std::unique_ptr<DeviceWiphyCapabilities>* capabilities) { std::optional<DeviceWiphyCapabilities>* capabilities) {
if (!RefreshWiphyIndex(iface_name)) { if (!RefreshWiphyIndex(iface_name)) {
capabilities = nullptr; capabilities = nullptr;
return Status::ok(); return Status::ok();
@ -336,15 +334,15 @@ Status Server::getDeviceWiphyCapabilities(
return Status::ok(); return Status::ok();
} }
capabilities->reset(new DeviceWiphyCapabilities()); capabilities->emplace();
capabilities->get()->is80211nSupported_ = band_info.is_80211n_supported; capabilities->value().is80211nSupported_ = band_info.is_80211n_supported;
capabilities->get()->is80211acSupported_ = band_info.is_80211ac_supported; capabilities->value().is80211acSupported_ = band_info.is_80211ac_supported;
capabilities->get()->is80211axSupported_ = band_info.is_80211ax_supported; capabilities->value().is80211axSupported_ = band_info.is_80211ax_supported;
capabilities->get()->is160MhzSupported_ = band_info.is_160_mhz_supported; capabilities->value().is160MhzSupported_ = band_info.is_160_mhz_supported;
capabilities->get()->is80p80MhzSupported_ = band_info.is_80p80_mhz_supported; capabilities->value().is80p80MhzSupported_ = band_info.is_80p80_mhz_supported;
capabilities->get()->maxTxStreams_ = band_info.max_tx_streams; capabilities->value().maxTxStreams_ = band_info.max_tx_streams;
capabilities->get()->maxRxStreams_ = band_info.max_rx_streams; capabilities->value().maxRxStreams_ = band_info.max_rx_streams;
return Status::ok(); return Status::ok();
} }

View File

@ -56,16 +56,16 @@ class Server : public android::net::wifi::nl80211::BnWificond {
callback) override; callback) override;
// Returns a vector of available frequencies for 2.4GHz channels. // Returns a vector of available frequencies for 2.4GHz channels.
android::binder::Status getAvailable2gChannels( android::binder::Status getAvailable2gChannels(
::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override; ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
// Returns a vector of available frequencies for 5GHz non-DFS channels. // Returns a vector of available frequencies for 5GHz non-DFS channels.
android::binder::Status getAvailable5gNonDFSChannels( android::binder::Status getAvailable5gNonDFSChannels(
::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override; ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
// Returns a vector of available frequencies for DFS channels. // Returns a vector of available frequencies for DFS channels.
android::binder::Status getAvailableDFSChannels( android::binder::Status getAvailableDFSChannels(
::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override; ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
// Returns a vector of available frequencies for 6GHz channels. // Returns a vector of available frequencies for 6GHz channels.
android::binder::Status getAvailable6gChannels( android::binder::Status getAvailable6gChannels(
::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override; ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
android::binder::Status createApInterface( android::binder::Status createApInterface(
const std::string& iface_name, const std::string& iface_name,
@ -96,7 +96,7 @@ class Server : public android::net::wifi::nl80211::BnWificond {
// Returns device wiphy capabilities for an interface // Returns device wiphy capabilities for an interface
android::binder::Status getDeviceWiphyCapabilities( android::binder::Status getDeviceWiphyCapabilities(
const std::string& iface_name, const std::string& iface_name,
::std::unique_ptr<net::wifi::nl80211::DeviceWiphyCapabilities>* capabilities) override; ::std::optional<net::wifi::nl80211::DeviceWiphyCapabilities>* capabilities) override;
private: private:
// Request interface information from kernel and setup local interface object. // Request interface information from kernel and setup local interface object.