1 | /* |
2 | * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0, |
3 | * and the EPL 1.0 (http://h2database.com/html/license.html). |
4 | * Initial Developer: H2 Group |
5 | */ |
6 | package org.h2.mvstore.type; |
7 | |
8 | import java.nio.ByteBuffer; |
9 | import org.h2.mvstore.DataUtils; |
10 | import org.h2.mvstore.WriteBuffer; |
11 | |
12 | /** |
13 | * A string type. |
14 | */ |
15 | public class StringDataType implements DataType { |
16 | |
17 | public static final StringDataType INSTANCE = new StringDataType(); |
18 | |
19 | @Override |
20 | public int compare(Object a, Object b) { |
21 | return a.toString().compareTo(b.toString()); |
22 | } |
23 | |
24 | @Override |
25 | public int getMemory(Object obj) { |
26 | return 24 + 2 * obj.toString().length(); |
27 | } |
28 | |
29 | @Override |
30 | public void read(ByteBuffer buff, Object[] obj, int len, boolean key) { |
31 | for (int i = 0; i < len; i++) { |
32 | obj[i] = read(buff); |
33 | } |
34 | } |
35 | |
36 | @Override |
37 | public void write(WriteBuffer buff, Object[] obj, int len, boolean key) { |
38 | for (int i = 0; i < len; i++) { |
39 | write(buff, obj[i]); |
40 | } |
41 | } |
42 | |
43 | @Override |
44 | public String read(ByteBuffer buff) { |
45 | int len = DataUtils.readVarInt(buff); |
46 | return DataUtils.readString(buff, len); |
47 | } |
48 | |
49 | @Override |
50 | public void write(WriteBuffer buff, Object obj) { |
51 | String s = obj.toString(); |
52 | int len = s.length(); |
53 | buff.putVarInt(len).putStringData(s, len); |
54 | } |
55 | |
56 | } |
57 | |