mpcomplete@chromium.org | eb7afa3 | 2012-06-13 08:11:00 +0900 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "base/value_conversions.h" |
| 6 | |
mostynb@opera.com | f29dd61 | 2013-09-04 08:29:12 +0900 | [diff] [blame] | 7 | #include <string> |
| 8 | |
| 9 | #include "base/basictypes.h" |
brettw@chromium.org | 59eef1f | 2013-02-24 14:40:52 +0900 | [diff] [blame] | 10 | #include "base/files/file_path.h" |
brettw@chromium.org | abcde5c | 2013-02-07 11:57:22 +0900 | [diff] [blame] | 11 | #include "base/strings/string_number_conversions.h" |
avi@chromium.org | b45ec93 | 2013-06-29 00:14:18 +0900 | [diff] [blame] | 12 | #include "base/time/time.h" |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 13 | #include "base/values.h" |
| 14 | |
| 15 | namespace base { |
| 16 | |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 17 | // |Value| internally stores strings in UTF-8, so we have to convert from the |
| 18 | // system native code to UTF-8 and back. |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 19 | StringValue* CreateFilePathValue(const FilePath& in_value) { |
satorux@chromium.org | efba417 | 2011-11-02 13:55:23 +0900 | [diff] [blame] | 20 | return new StringValue(in_value.AsUTF8Unsafe()); |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 21 | } |
| 22 | |
| 23 | bool GetValueAsFilePath(const Value& value, FilePath* file_path) { |
| 24 | std::string str; |
| 25 | if (!value.GetAsString(&str)) |
| 26 | return false; |
| 27 | if (file_path) |
satorux@chromium.org | efba417 | 2011-11-02 13:55:23 +0900 | [diff] [blame] | 28 | *file_path = FilePath::FromUTF8Unsafe(str); |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 29 | return true; |
| 30 | } |
| 31 | |
mpcomplete@chromium.org | eb7afa3 | 2012-06-13 08:11:00 +0900 | [diff] [blame] | 32 | // |Value| does not support 64-bit integers, and doubles do not have enough |
| 33 | // precision, so we store the 64-bit time value as a string instead. |
jyasskin@chromium.org | 8e3c3df | 2012-06-14 09:30:56 +0900 | [diff] [blame] | 34 | StringValue* CreateTimeDeltaValue(const TimeDelta& time) { |
mpcomplete@chromium.org | eb7afa3 | 2012-06-13 08:11:00 +0900 | [diff] [blame] | 35 | std::string string_value = base::Int64ToString(time.ToInternalValue()); |
| 36 | return new StringValue(string_value); |
| 37 | } |
| 38 | |
jyasskin@chromium.org | 8e3c3df | 2012-06-14 09:30:56 +0900 | [diff] [blame] | 39 | bool GetValueAsTimeDelta(const Value& value, TimeDelta* time) { |
mpcomplete@chromium.org | eb7afa3 | 2012-06-13 08:11:00 +0900 | [diff] [blame] | 40 | std::string str; |
| 41 | int64 int_value; |
| 42 | if (!value.GetAsString(&str) || !base::StringToInt64(str, &int_value)) |
| 43 | return false; |
| 44 | if (time) |
jyasskin@chromium.org | 8e3c3df | 2012-06-14 09:30:56 +0900 | [diff] [blame] | 45 | *time = TimeDelta::FromInternalValue(int_value); |
mpcomplete@chromium.org | eb7afa3 | 2012-06-13 08:11:00 +0900 | [diff] [blame] | 46 | return true; |
| 47 | } |
| 48 | |
bauerb@chromium.org | fe9f853 | 2011-03-15 18:51:50 +0900 | [diff] [blame] | 49 | } // namespace base |