Initial Import
[profile/ivi/bundle.git] / include / keyval.h
1 /*
2  * bundle
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
7  * Jaeho Lee <jaeho81.lee@samsung.com>
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */
22
23
24 #ifndef __KEYVAL_H__
25 #define __KEYVAL_H__
26
27 /**
28  * keyval.h
29  *
30  * keyval object
31  */
32
33 #include <stddef.h>
34
35 // ADT: object
36 typedef struct keyval_t keyval_t;
37
38 // Object methods
39 typedef struct keyval_method_collection_t keyval_method_collection_t;
40
41 typedef void (*keyval_method_free_t)(keyval_t *kv, int do_free_object);
42 typedef int (*keyval_method_compare_t) (keyval_t *kv1, keyval_t *kv2);
43 typedef size_t (*keyval_method_get_encoded_size_t)(keyval_t *kv);
44 typedef size_t (*keyval_method_encode_t)(keyval_t *, unsigned char **byte, size_t *byte_len);
45 typedef size_t (*keyval_method_decode_t)(unsigned char *byte, keyval_t **kv);
46
47
48 struct keyval_method_collection_t
49 {
50         keyval_method_free_t free;
51         keyval_method_compare_t compare;
52         keyval_method_get_encoded_size_t get_encoded_size;
53         keyval_method_encode_t encode;
54         keyval_method_decode_t decode;
55 };
56
57 struct keyval_t
58 {
59         int type;
60         char *key;      // To be freed.
61         void *val;      // To be freed.
62         size_t size;    // Size of a single value.
63         struct keyval_t *next;
64
65         keyval_method_collection_t *method;
66
67 };
68
69
70 keyval_t * keyval_new(keyval_t *kv, const char *key, const int type, const void *val, const size_t size);
71 void keyval_free(keyval_t *kv, int do_free_object);
72 int keyval_compare(keyval_t *kv1, keyval_t *kv2);
73 size_t keyval_get_encoded_size(keyval_t *kv);
74 size_t keyval_encode(keyval_t *kv, unsigned char **byte, size_t *byte_len);
75 size_t keyval_decode(unsigned char *byte, keyval_t **kv);
76 int keyval_get_data(keyval_t *kv, int *type, void **val, size_t *size);
77 int keyval_get_type_from_encoded_byte(unsigned char *byte);
78
79 #endif /* __KEYVAL_H__ */
80