Lucene.Net  3.0.3
Lucene.Net is a port of the Lucene search engine library, written in C# and targeted at .NET runtime users.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Pages
PayloadHelper.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 using Lucene.Net.Support;
19 
20 namespace Lucene.Net.Analysis.Payloads
21 {
22  /// <summary>
23  /// Utility methods for encoding payloads.
24  /// </summary>
25  public static class PayloadHelper
26  {
27  public static byte[] EncodeFloat(float payload)
28  {
29  return EncodeFloat(payload, new byte[4], 0);
30  }
31 
32  public static byte[] EncodeFloat(float payload, byte[] data, int offset)
33  {
34  return EncodeInt(Single.FloatToIntBits(payload), data, offset);
35  }
36 
37  public static byte[] EncodeInt(int payload)
38  {
39  return EncodeInt(payload, new byte[4], 0);
40  }
41 
42  public static byte[] EncodeInt(int payload, byte[] data, int offset)
43  {
44  data[offset] = (byte) (payload >> 24);
45  data[offset + 1] = (byte) (payload >> 16);
46  data[offset + 2] = (byte) (payload >> 8);
47  data[offset + 3] = (byte) payload;
48  return data;
49  }
50 
51  /// <summary>
52  /// <p>Decode the payload that was encoded using encodeFloat(float)</p>
53  /// <p>NOTE: the length of the array must be at least offset + 4 long.</p>
54  /// </summary>
55  /// <param name="bytes">The bytes to decode</param>
56  /// <returns>the decoded float</returns>
57  public static float DecodeFloat(byte[] bytes)
58  {
59  return DecodeFloat(bytes, 0);
60  }
61 
62  /// <summary>
63  /// <p>Decode the payload that was encoded using encodeFloat(float)</p>
64  /// <p>NOTE: the length of the array must be at least offset + 4 long.</p>
65  /// </summary>
66  /// <param name="bytes">The bytes to decode</param>
67  /// <param name="offset">The offset into the array.</param>
68  /// <returns>The float that was encoded</returns>
69  public static float DecodeFloat(byte[] bytes, int offset)
70  {
71  return Single.IntBitsToFloat(DecodeInt(bytes, offset));
72  }
73 
74  public static int DecodeInt(byte[] bytes, int offset)
75  {
76  return ((bytes[offset] & 0xFF) << 24) | ((bytes[offset + 1] & 0xFF) << 16)
77  | ((bytes[offset + 2] & 0xFF) << 8) | (bytes[offset + 3] & 0xFF);
78  }
79  }
80 }