1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Copyright (c) 2015 Samsung Electronics Co, Ltd. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
10 #include "common/logger.h"
11 #include "common/scope_exit.h"
12 #include "common/tools.h"
14 #include "utils/utils_instance.h"
16 using common::PlatformResult;
17 using common::ErrorCode;
22 UtilsInstance::UtilsInstance() {
24 using std::placeholders::_1;
25 using std::placeholders::_2;
27 #define REGISTER_METHOD(M) RegisterSyncHandler(#M, std::bind(&UtilsInstance::M, this, _1, _2))
28 REGISTER_METHOD(UtilsGetPkgApiVersion);
29 REGISTER_METHOD(UtilsCheckPrivilegeAccess);
30 REGISTER_METHOD(UtilsCheckBackwardCompabilityPrivilegeAccess);
31 REGISTER_METHOD(UtilsToLongLong);
32 REGISTER_METHOD(UtilsToUnsignedLongLong);
33 REGISTER_METHOD(UtilsCheckProfile);
34 #undef REGISTER_METHOD
37 void UtilsInstance::UtilsGetPkgApiVersion(const picojson::value& args, picojson::object& out) {
40 std::string api_version;
41 PlatformResult ret = common::tools::GetPkgApiVersion(&api_version);
43 ReportError(ret, &out);
45 ReportSuccess(picojson::value(api_version), out);
48 void UtilsInstance::UtilsCheckPrivilegeAccess(const picojson::value& args, picojson::object& out) {
50 const auto& privilege = args.get("privilege").to_str();
51 CHECK_PRIVILEGE_ACCESS(privilege, &out);
55 void UtilsInstance::UtilsCheckBackwardCompabilityPrivilegeAccess(const picojson::value& args,
56 picojson::object& out) {
58 const auto& current_priv = args.get("current_privilege").to_str();
59 const auto& prev_priv = args.get("previous_privilege").to_str();
61 CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(current_priv, prev_priv, &out);
69 return (T(0) < val) - (val < T(0));
72 const double kTwoPow63 = 9223372036854775808.0;
73 const double kTwoPow64 = 18446744073709551616.0;
77 void UtilsInstance::UtilsToLongLong(const picojson::value& args, picojson::object& out) {
80 const auto& n = args.get("n");
84 auto d = n.get<double>();
85 d = sgn<double>(d) * std::floor(std::fabs(d));
86 d = std::fmod(d, kTwoPow64);
90 output = static_cast<long long>(d);
93 ReportSuccess(picojson::value(static_cast<double>(output)), out);
96 void UtilsInstance::UtilsToUnsignedLongLong(const picojson::value& args, picojson::object& out) {
99 const auto& n = args.get("n");
100 unsigned long long output = 0;
102 if (n.is<double>()) {
103 auto d = n.get<double>();
104 d = sgn<double>(d) * std::floor(std::fabs(d));
105 d = std::fmod(d, kTwoPow64);
109 output = static_cast<unsigned long long>(d);
112 ReportSuccess(picojson::value(static_cast<double>(output)), out);
115 void UtilsInstance::UtilsCheckProfile(const picojson::value& args, picojson::object& out) {
118 std::string profile = "common";
119 #if defined(TIZEN_MOBILE)
121 #elif defined(TIZEN_WEARABLE)
122 profile = "wearable";
123 #elif defined(TIZEN_TV) || defined(USBHOST)
125 #elif defined(TIZEN_IVI)
129 ReportSuccess(picojson::value(profile), out);
133 } // namespace extension