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  
26  import org.apache.directory.mavibot.btree.comparator.BooleanComparator;
27  import org.apache.directory.mavibot.btree.exception.SerializerCreationException;
28  
29  
30  /**
31   * The Boolean serializer.
32   *
33   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
34   */
35  public class BooleanSerializer extends AbstractElementSerializer<Boolean>
36  {
37      /** A static instance of a BooleanSerializer */
38      public static final BooleanSerializer INSTANCE = new BooleanSerializer();
39  
40      /**
41       * Create a new instance of BooleanSerializer
42       */
43      private BooleanSerializer()
44      {
45          super( BooleanComparator.INSTANCE );
46      }
47  
48  
49      /**
50       * {@inheritDoc}
51       */
52      public byte[] serialize( Boolean element )
53      {
54          byte[] bytes = new byte[1];
55  
56          return serialize( bytes, 0, element );
57      }
58  
59  
60      /**
61       * Serialize a boolean
62       *
63       * @param value the value to serialize
64       * @return The byte[] containing the serialized boolean
65       */
66      public static byte[] serialize( boolean element )
67      {
68          byte[] bytes = new byte[1];
69  
70          return serialize( bytes, 0, element );
71      }
72  
73  
74      /**
75       * Serialize a boolean
76       *
77       * @param buffer the Buffer that will contain the serialized value
78       * @param start the position in the buffer we will store the serialized boolean
79       * @param value the value to serialize
80       * @return The byte[] containing the serialized boolean
81       */
82      public static byte[] serialize( byte[] buffer, int start, boolean element )
83      {
84          buffer[start] = element ? ( byte ) 0x01 : ( byte ) 0x00;
85  
86          return buffer;
87      }
88  
89  
90      /**
91       * A static method used to deserialize a Boolean from a byte array.
92       *
93       * @param in The byte array containing the boolean
94       * @return A boolean
95       */
96      public static Boolean deserialize( byte[] in )
97      {
98          return deserialize( in, 0 );
99      }
100 
101 
102     /**
103      * A static method used to deserialize a Boolean from a byte array.
104      *
105      * @param in The byte array containing the boolean
106      * @param start the position in the byte[] we will deserialize the boolean from
107      * @return A boolean
108      */
109     public static Boolean deserialize( byte[] in, int start )
110     {
111         if ( ( in == null ) || ( in.length < 1 + start ) )
112         {
113             throw new SerializerCreationException( "Cannot extract a Boolean from a buffer with not enough bytes" );
114         }
115 
116         return in[start] == 0x01;
117     }
118 
119 
120     /**
121      * A method used to deserialize a Boolean from a byte array.
122      *
123      * @param in The byte array containing the boolean
124      * @return A boolean
125      */
126     public Boolean fromBytes( byte[] in )
127     {
128         return deserialize( in, 0 );
129     }
130 
131 
132     /**
133      * A method used to deserialize a Boolean from a byte array.
134      *
135      * @param in The byte array containing the boolean
136      * @param start the position in the byte[] we will deserialize the boolean from
137      * @return A boolean
138      */
139     public Boolean fromBytes( byte[] in, int start )
140     {
141         if ( ( in == null ) || ( in.length < 1 + start ) )
142         {
143             throw new SerializerCreationException( "Cannot extract a Boolean from a buffer with not enough bytes" );
144         }
145 
146         return in[start] == 0x01;
147     }
148 
149 
150     /**
151      * {@inheritDoc}
152      */
153     public Boolean deserialize( ByteBuffer buffer ) throws IOException
154     {
155         return buffer.get() != 0x00;
156     }
157 
158 
159     /**
160      * {@inheritDoc}
161      */
162     @Override
163     public Boolean deserialize( BufferHandler bufferHandler ) throws IOException
164     {
165         byte[] in = bufferHandler.read( 1 );
166 
167         return deserialize( in );
168     }
169 }