59 lines
2.3 KiB
C#
59 lines
2.3 KiB
C#
#region Copyright notice and license
|
|
// Protocol Buffers - Google's data interchange format
|
|
// Copyright 2008 Google Inc. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file or at
|
|
// https://developers.google.com/open-source/licenses/bsd
|
|
#endregion
|
|
|
|
using System;
|
|
using System.Security;
|
|
|
|
namespace Google.Protobuf
|
|
{
|
|
/// <summary>
|
|
/// Provides a number of unsafe byte operations to be used by advanced applications with high performance
|
|
/// requirements. These methods are referred to as "unsafe" due to the fact that they potentially expose
|
|
/// the backing buffer of a <see cref="ByteString"/> to the application.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// The methods in this class should only be called if it is guaranteed that the buffer backing the
|
|
/// <see cref="ByteString"/> will never change! Mutation of a <see cref="ByteString"/> can lead to unexpected
|
|
/// and undesirable consequences in your application, and will likely be difficult to debug. Proceed with caution!
|
|
/// </para>
|
|
/// <para>
|
|
/// This can have a number of significant side affects that have spooky-action-at-a-distance-like behavior. In
|
|
/// particular, if the bytes value changes out from under a Protocol Buffer:
|
|
/// </para>
|
|
/// <list type="bullet">
|
|
/// <item>
|
|
/// <description>serialization may throw</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>serialization may succeed but the wrong bytes may be written out</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>objects that are normally immutable (such as ByteString) are no longer immutable</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>hashCode may be incorrect</description>
|
|
/// </item>
|
|
/// </list>
|
|
/// </remarks>
|
|
[SecuritySafeCritical]
|
|
public static class UnsafeByteOperations
|
|
{
|
|
/// <summary>
|
|
/// Constructs a new <see cref="ByteString" /> from the given bytes. The bytes are not copied,
|
|
/// and must not be modified while the <see cref="ByteString" /> is in use.
|
|
/// This API is experimental and subject to change.
|
|
/// </summary>
|
|
public static ByteString UnsafeWrap(ReadOnlyMemory<byte> bytes)
|
|
{
|
|
return ByteString.AttachBytes(bytes);
|
|
}
|
|
}
|
|
}
|