View Javadoc

1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.directory.mavibot.btree.serializer;
21  
22  
23  import java.io.IOException;
24  import java.nio.ByteBuffer;
25  import java.util.Comparator;
26  
27  
28  /**
29   * This interface is used by implementations of serializer, deserializer and comparator.
30   * 
31   * @param <T> The type for the element to serialize and compare
32   * 
33   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
34   */
35  public interface ElementSerializer<T>
36  {
37      /**
38       * Produce the byte[] representation of the element
39       * 
40       * @param key The element to serialize
41       * @return The byte[] containing the serialized element
42       */
43      byte[] serialize( T key );
44  
45  
46      /**
47       * Deserialize an element from a BufferHandler
48       * 
49       * @param bufferHandler The incoming bufferHandler
50       * @return The deserialized element
51       * @throws IOException If the deserialization failed
52       */
53      T deserialize( BufferHandler bufferHandler ) throws IOException;
54  
55  
56      /**
57       * Deserialize an element from a ByteBuffer
58       * 
59       * @param buffer The incoming ByteBuffer
60       * @return The deserialized element
61       * @throws IOException If the deserialization failed
62       */
63      T deserialize( ByteBuffer buffer ) throws IOException;
64  
65  
66      /**
67       * Deserialize an element from a byte[]
68       * 
69       * @param buffer The incoming byte[]
70       * @return The deserialized element
71       * @throws IOException If the deserialization failed
72       */
73      T fromBytes( byte[] buffer ) throws IOException;
74  
75  
76      /**
77       * Deserialize an element from a byte[]
78       * 
79       * @param buffer The incoming byte[]
80       * @return The deserialized element
81       * @throws IOException If the deserialization failed
82       */
83      T fromBytes( byte[] buffer, int pos ) throws IOException;
84  
85  
86      /**
87       * Returns the comparison of two types. <br/>
88       * <ul>
89       * <li>If type1 < type2, return -1</li>
90       * <li>If type1 > type2, return 1</li>
91       * <li>If type1 == type2, return 0</li>
92       * </ul>
93       * 
94       * @param type1 The first type to compare 
95       * @param type2 The second type to compare 
96       * @return The comparison result
97       */
98      int compare( T type1, T type2 );
99  
100 
101     /**
102      * @return the comparator for the used type
103      */
104     Comparator<T> getComparator();
105 
106 
107     /**
108      * @return the type being serialized
109      */
110     Class<?> getType();
111 }