1+ #region Copyright notice and license
2+ // Protocol Buffers - Google's data interchange format
3+ // Copyright 2008 Google Inc. All rights reserved.
4+ // https://developers.google.com/protocol-buffers/
5+ //
6+ // Redistribution and use in source and binary forms, with or without
7+ // modification, are permitted provided that the following conditions are
8+ // met:
9+ //
10+ // * Redistributions of source code must retain the above copyright
11+ // notice, this list of conditions and the following disclaimer.
12+ // * Redistributions in binary form must reproduce the above
13+ // copyright notice, this list of conditions and the following disclaimer
14+ // in the documentation and/or other materials provided with the
15+ // distribution.
16+ // * Neither the name of Google Inc. nor the names of its
17+ // contributors may be used to endorse or promote products derived from
18+ // this software without specific prior written permission.
19+ //
20+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+ #endregion
32+
33+ using System ;
34+
35+ namespace Google . Protobuf
36+ {
37+ /// <summary>
38+ /// Provides a utility routine to copy small arrays much more quickly than Buffer.BlockCopy
39+ /// </summary>
40+ internal static class ByteArray
41+ {
42+ /// <summary>
43+ /// The threshold above which you should use Buffer.BlockCopy rather than ByteArray.Copy
44+ /// </summary>
45+ private const int CopyThreshold = 12 ;
46+
47+ /// <summary>
48+ /// Determines which copy routine to use based on the number of bytes to be copied.
49+ /// </summary>
50+ internal static void Copy ( byte [ ] src , int srcOffset , byte [ ] dst , int dstOffset , int count )
51+ {
52+ if ( count > CopyThreshold )
53+ {
54+ Buffer . BlockCopy ( src , srcOffset , dst , dstOffset , count ) ;
55+ }
56+ else
57+ {
58+ int stop = srcOffset + count ;
59+ for ( int i = srcOffset ; i < stop ; i ++ )
60+ {
61+ dst [ dstOffset ++ ] = src [ i ] ;
62+ }
63+ }
64+ }
65+
66+ /// <summary>
67+ /// Reverses the order of bytes in the array
68+ /// </summary>
69+ internal static void Reverse ( byte [ ] bytes )
70+ {
71+ for ( int first = 0 , last = bytes . Length - 1 ; first < last ; first ++ , last -- )
72+ {
73+ byte temp = bytes [ first ] ;
74+ bytes [ first ] = bytes [ last ] ;
75+ bytes [ last ] = temp ;
76+ }
77+ }
78+ }
79+ }
0 commit comments