53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
// Copyright 2014 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.
 | 
						|
 | 
						|
#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_STRING_SERIALIZATION_H_
 | 
						|
#define MOJO_PUBLIC_CPP_BINDINGS_LIB_STRING_SERIALIZATION_H_
 | 
						|
 | 
						|
#include <stddef.h>
 | 
						|
#include <string.h>
 | 
						|
 | 
						|
#include "mojo/public/cpp/bindings/lib/array_internal.h"
 | 
						|
#include "mojo/public/cpp/bindings/lib/serialization_forward.h"
 | 
						|
#include "mojo/public/cpp/bindings/lib/serialization_util.h"
 | 
						|
#include "mojo/public/cpp/bindings/string_data_view.h"
 | 
						|
#include "mojo/public/cpp/bindings/string_traits.h"
 | 
						|
 | 
						|
namespace mojo {
 | 
						|
namespace internal {
 | 
						|
 | 
						|
template <typename MaybeConstUserType>
 | 
						|
struct Serializer<StringDataView, MaybeConstUserType> {
 | 
						|
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
 | 
						|
  using Traits = StringTraits<UserType>;
 | 
						|
 | 
						|
  static void Serialize(MaybeConstUserType& input,
 | 
						|
                        Buffer* buffer,
 | 
						|
                        String_Data::BufferWriter* writer,
 | 
						|
                        SerializationContext* context) {
 | 
						|
    if (CallIsNullIfExists<Traits>(input))
 | 
						|
      return;
 | 
						|
 | 
						|
    void* custom_context = CustomContextHelper<Traits>::SetUp(input, context);
 | 
						|
    const size_t size = CallWithContext(Traits::GetSize, input, custom_context);
 | 
						|
    writer->Allocate(size, buffer);
 | 
						|
    memcpy((*writer)->storage(),
 | 
						|
           CallWithContext(Traits::GetData, input, custom_context), size);
 | 
						|
    CustomContextHelper<Traits>::TearDown(input, custom_context);
 | 
						|
  }
 | 
						|
 | 
						|
  static bool Deserialize(String_Data* input,
 | 
						|
                          UserType* output,
 | 
						|
                          SerializationContext* context) {
 | 
						|
    if (!input)
 | 
						|
      return CallSetToNullIfExists<Traits>(output);
 | 
						|
    return Traits::Read(StringDataView(input, context), output);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace internal
 | 
						|
}  // namespace mojo
 | 
						|
 | 
						|
#endif  // MOJO_PUBLIC_CPP_BINDINGS_LIB_STRING_SERIALIZATION_H_
 |