4 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
8 * Jaewon Lim <jaewon81.lim@samsung.com>
9 * Woojin Jung <woojin2.jung@samsung.com>
10 * Juyoung Kim <j0.kim@samsung.com>
12 * This library is free software; you can redistribute it and/or modify it under
13 * the terms of the GNU Lesser General Public License as published by the
14 * Free Software Foundation; either version 2.1 of the License, or (at your option)
17 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20 * License for more details.
22 * You should have received a copy of the GNU Lesser General Public License
23 * along with this library; if not, write to the Free Software Foundation, Inc., 51
24 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
31 #ifndef __COLLECTIONS_H__
32 #define __COLLECTIONS_H__
34 #include <pthread.h> // for pthread_mutex_t
42 #define SYMBOLHASH _hashinfo.symHash
43 #define SYMBOLHASH_LOCK pthread_mutex_lock(&(_hashinfo.symHashMutex))
44 #define SYMBOLHASH_UNLOCK pthread_mutex_unlock(&(_hashinfo.symHashMutex))
46 #define MEMORYHASH _hashinfo.memHash
47 #define MEMORYHASH_LOCK pthread_mutex_lock(&(_hashinfo.memHashMutex))
48 #define MEMORYHASH_UNLOCK pthread_mutex_unlock(&(_hashinfo.memHashMutex))
50 #define UIOBJECTHASH _hashinfo.uiobjHash
51 #define UIOBJECTHASH_LOCK pthread_mutex_lock(&(_hashinfo.uiobjHashMutex))
52 #define UIOBJECTHASH_UNLOCK pthread_mutex_unlock(&(_hashinfo.uiobjHashMutex))
54 #define OBJECTHASH _hashinfo.objHash
55 #define OBJECTHASH_LOCK pthread_mutex_lock(&(_hashinfo.objHashMutex))
56 #define OBJECTHASH_UNLOCK pthread_mutex_unlock(&(_hashinfo.objHashMutex))
58 #define DETECTORHASH _hashinfo.dttHash
59 #define DETECTORHASH_LOCK pthread_mutex_lock(&(_hashinfo.dttHashMutex))
60 #define DETECTORHASH_UNLOCK pthread_mutex_unlock(&(_hashinfo.dttHashMutex))
62 #define MEMTYPE_ALLOC 0x01
63 #define MEMTYPE_FREE 0x01
64 #define MEMTYPE_NEW 0x03
65 #define MEMTYPE_DELETE 0x03
67 #define MEM_INTERNAL 0x01
68 #define MEM_EXTERNAL 0x02
70 #define MEMMASK_CALLER 0xFFFF000000000000L
71 #define MEMMASK_TYPE 0x0000FFFF00000000L
72 #define MEMMASK_SIZE 0x00000000FFFFFFFFL
74 #define GET_MEMSIZE(_info) ((size_t)(_info & MEMMASK_SIZE))
75 #define GET_MEMCALLER(_info) ((unsigned short)((_info & MEMMASK_CALLER) >> 48))
76 #define GET_MEMTYPE(_info) ((unsigned short)((_info & MEMMASK_TYPE) >> 32))
78 #define MAKE_MEMINFO(caller, type, size) \
79 (((uint64_t)caller << 48) | ((uint64_t)type << 32) | ((uint64_t)size))
81 #define OBJECT_INTERNAL 0x01
82 #define OBJECT_EXTERNAL 0x02
90 // khash table function definition
91 KHASH_MAP_INIT_INT(symbol, char*)
93 KHASH_MAP_INIT_INT(allocmap, uint64_t)
95 KHASH_MAP_INIT_INT(uiobject, _uiobjectinfo*)
97 KHASH_MAP_INIT_INT(object, unsigned short)
99 KHASH_MAP_INIT_INT(detector, void*)
103 khash_t(symbol)* symHash;
104 pthread_mutex_t symHashMutex;
105 khash_t(allocmap)* memHash;
106 pthread_mutex_t memHashMutex;
107 khash_t(uiobject)* uiobjHash;
108 pthread_mutex_t uiobjHashMutex;
109 khash_t(object)* objHash;
110 pthread_mutex_t objHashMutex;
111 khash_t(detector)* dttHash;
112 pthread_mutex_t dttHashMutex;
115 extern __hashInfo _hashinfo;
117 // APIs for symdata linked list
118 int add_to_glist(char* key, void* data);
119 int remove_from_glist(char* key);
120 int remove_all_glist();
121 void* find_glist(char* key);
123 // APIs for hash table
124 int initialize_hash_table();
125 int finalize_hash_table();
127 int find_symbol_hash(void* ptr, char** psymbol);
128 int add_symbol_hash(void* ptr, const char* str, int strlen);
129 int add_memory_hash(void* ptr, size_t size, unsigned short type, unsigned short caller);
130 int del_memory_hash(void* ptr, unsigned short type, unsigned short* caller);
132 int find_uiobject_hash(void* ptr, char** type, char** classname);
133 int add_uiobject_hash_class(void* ptr, const char* classname);
134 int add_uiobject_hash_type(void* ptr, const char* type);
135 int del_uiobject_hash(void* ptr);
137 int find_object_hash(void* ptr, unsigned short *caller);
138 int add_object_hash(void* ptr, unsigned short caller);
139 int del_object_hash(void* ptr, unsigned short *caller);
141 int add_detector_hash(void* ptr, void* listener);
142 int del_detector_hash(void* ptr);
148 #endif /* __COLLECTIONS_H_ */