Import the WebKit version
[browser-dbus-bridge.git] / jscorebus / jscorebus-classfactory.c
1 /**
2  * Browser D-Bus Bridge, JavaScriptCore version
3  *
4  * Copyright © 2008 Movial Creative Technologies Inc
5  *  Contact: Movial Creative Technologies Inc, <info@movial.com>
6  *  Authors: Kalle Vahlman, <kalle.vahlman@movial.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 #include <JavaScriptCore/JavaScript.h>
24 #include <glib.h>
25
26 #include "jscorebus-classfactory.h"
27
28 static
29 GHashTable *definitions = NULL;
30 static
31 GHashTable *classes = NULL;
32
33 void
34 jsclassdef_insert(const char *class_name, const JSClassDefinition *definition)
35 {
36   if (G_UNLIKELY(definitions == NULL))
37   {
38     definitions = g_hash_table_new(g_str_hash, g_str_equal);
39   }
40
41   g_hash_table_insert(definitions, (gpointer)class_name, (gpointer)definition);
42 }
43
44 const JSClassDefinition *
45 jsclassdef_lookup(const char *class_name)
46 {
47   if (class_name == NULL)
48   {
49     return NULL;
50   }
51   
52   if (G_UNLIKELY(definitions == NULL))
53   {
54     return NULL;
55   }
56   
57   return (const JSClassDefinition *) g_hash_table_lookup(definitions,
58                                                          (gpointer)class_name);
59 }
60
61 JSClassRef
62 jsclass_lookup(const JSClassDefinition *definition)
63 {
64   JSClassRef jsclass;
65   
66   if (G_UNLIKELY(classes == NULL))
67   {
68     classes = g_hash_table_new(NULL, NULL);
69   }
70   
71   jsclass = g_hash_table_lookup(classes, (gpointer)definition);
72   if (G_UNLIKELY(jsclass == NULL))
73   {
74     jsclass = JSClassCreate(definition);
75     g_hash_table_insert(classes, (gpointer)definition, (gpointer)jsclass);
76   }
77   
78   return jsclass;
79 }
80