1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 "mojo/common/common_type_converters.h" 6 7 #include <stdint.h> 8 9 #include <string> 10 11 #include "base/strings/utf_string_conversions.h" 12 13 namespace mojo { 14 15 // static 16 String TypeConverter<String, base::StringPiece>::Convert( 17 const base::StringPiece& input) { 18 if (input.empty()) { 19 char c = 0; 20 return String(&c, 0); 21 } 22 return String(input.data(), input.size()); 23 } 24 // static 25 base::StringPiece TypeConverter<base::StringPiece, String>::Convert( 26 const String& input) { 27 return input.get(); 28 } 29 30 // static 31 String TypeConverter<String, base::string16>::Convert( 32 const base::string16& input) { 33 return TypeConverter<String, base::StringPiece>::Convert( 34 base::UTF16ToUTF8(input)); 35 } 36 // static 37 base::string16 TypeConverter<base::string16, String>::Convert( 38 const String& input) { 39 return base::UTF8ToUTF16(input.To<base::StringPiece>()); 40 } 41 42 std::string TypeConverter<std::string, Array<uint8_t>>::Convert( 43 const Array<uint8_t>& input) { 44 if (input.is_null() || input.empty()) 45 return std::string(); 46 47 return std::string(reinterpret_cast<const char*>(&input.front()), 48 input.size()); 49 } 50 51 Array<uint8_t> TypeConverter<Array<uint8_t>, std::string>::Convert( 52 const std::string& input) { 53 Array<uint8_t> result(input.size()); 54 if (!input.empty()) 55 memcpy(&result.front(), input.c_str(), input.size()); 56 return result; 57 } 58 59 Array<uint8_t> TypeConverter<Array<uint8_t>, base::StringPiece>::Convert( 60 const base::StringPiece& input) { 61 Array<uint8_t> result(input.size()); 62 if (!input.empty()) 63 memcpy(&result.front(), input.data(), input.size()); 64 return result; 65 } 66 67 base::string16 TypeConverter<base::string16, Array<uint8_t>>::Convert( 68 const Array<uint8_t>& input) { 69 if (input.is_null() || input.empty()) 70 return base::string16(); 71 72 return base::string16(reinterpret_cast<const base::char16*>(&input.front()), 73 input.size() / sizeof(base::char16)); 74 } 75 76 Array<uint8_t> TypeConverter<Array<uint8_t>, base::string16>::Convert( 77 const base::string16& input) { 78 Array<uint8_t> result(input.size() * sizeof(base::char16)); 79 if (!input.empty()) 80 memcpy(&result.front(), input.c_str(), input.size() * sizeof(base::char16)); 81 return result; 82 } 83 84 } // namespace mojo 85