|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #import "ios/web/navigation/nscoder_util.h" | 
|  |  | 
|  | #if !defined(__has_feature) || !__has_feature(objc_arc) | 
|  | #error "This file requires ARC support." | 
|  | #endif | 
|  |  | 
|  | namespace web { | 
|  | namespace nscoder_util { | 
|  |  | 
|  | void EncodeString(NSCoder* coder, NSString* key, const std::string& string) { | 
|  | [coder encodeBytes:reinterpret_cast<const uint8_t*>(string.data()) | 
|  | length:string.size() | 
|  | forKey:key]; | 
|  | } | 
|  |  | 
|  | std::string DecodeString(NSCoder* decoder, NSString* key) { | 
|  | NSUInteger length = 0; | 
|  | const uint8_t* bytes = [decoder decodeBytesForKey:key returnedLength:&length]; | 
|  | return std::string(reinterpret_cast<const char*>(bytes), length); | 
|  | } | 
|  |  | 
|  | }  // namespace nscoder_util | 
|  | }  // namespace web |