|  | #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); | 
|  | } | 
|  | } | 
|  | } |