You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/06/23 21:29:49 UTC
[lucy-commits] svn commit: r1139043 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Binding/Core/Class.pm src/CFCBindClass.c src/CFCBindClass.h
src/CFCClass.c src/CFCClass.h
Author: marvin
Date: Thu Jun 23 19:29:49 2011
New Revision: 1139043
URL: http://svn.apache.org/viewvc?rev=1139043&view=rev
Log:
Port some properties of Clownfish::Binding::Core::Class to C.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm
incubator/lucy/trunk/clownfish/src/CFCBindClass.c
incubator/lucy/trunk/clownfish/src/CFCBindClass.h
incubator/lucy/trunk/clownfish/src/CFCClass.c
incubator/lucy/trunk/clownfish/src/CFCClass.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Thu Jun 23 19:29:49 2011
@@ -1771,3 +1771,32 @@ DESTROY(self)
PPCODE:
CFCBindClass_destroy(self);
+void
+_set_or_get(self, ...)
+ CFCBindClass *self;
+ALIAS:
+ _full_callbacks_var = 2
+ _full_name_var = 4
+ _short_names_macro = 6
+PPCODE:
+{
+ START_SET_OR_GET_SWITCH
+ case 2: {
+ const char *value = CFCBindClass_full_callbacks_var(self);
+ retval = newSVpv(value, strlen(value));
+ }
+ break;
+ case 4: {
+ const char *value = CFCBindClass_full_name_var(self);
+ retval = newSVpv(value, strlen(value));
+ }
+ break;
+ case 6: {
+ const char *value = CFCBindClass_short_names_macro(self);
+ retval = newSVpv(value, strlen(value));
+ }
+ break;
+ END_SET_OR_GET_SWITCH
+}
+
+
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm Thu Jun 23 19:29:49 2011
@@ -30,10 +30,6 @@ sub new {
return _new( $args{client} );
}
-sub _full_callbacks_var { shift->_get_client->full_vtable_var . '_CALLBACKS' }
-sub _full_name_var { shift->_get_client->full_vtable_var . '_CLASS_NAME' }
-sub _short_names_macro { shift->_get_client->get_PREFIX . 'USE_SHORT_NAMES' }
-
# C code defining the ZombieCharBuf which contains the class name for this
# class.
sub _name_var_definition {
Modified: incubator/lucy/trunk/clownfish/src/CFCBindClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindClass.c?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindClass.c Thu Jun 23 19:29:49 2011
@@ -31,6 +31,9 @@
struct CFCBindClass {
CFCBase base;
CFCClass *client;
+ char *full_callbacks_var;
+ char *full_name_var;
+ char *short_names_macro;
};
CFCBindClass*
@@ -45,12 +48,25 @@ CFCBindClass*
CFCBindClass_init(CFCBindClass *self, CFCClass *client) {
CFCUTIL_NULL_CHECK(client);
self->client = (CFCClass*)CFCBase_incref((CFCBase*)client);
+
+ const char *full_vtable_var = CFCClass_full_vtable_var(client);
+ const char *PREFIX = CFCClass_get_PREFIX(client);
+ self->full_callbacks_var = (char*)MALLOCATE(strlen(full_vtable_var) + 20);
+ self->full_name_var = (char*)MALLOCATE(strlen(full_vtable_var) + 20);
+ self->short_names_macro = (char*)MALLOCATE(strlen(PREFIX) + 20);
+ sprintf(self->full_callbacks_var, "%s_CALLBACKS", full_vtable_var);
+ sprintf(self->full_name_var, "%s_CLASS_NAME", full_vtable_var);
+ sprintf(self->short_names_macro, "%sUSE_SHORT_NAMES", PREFIX);
+
return self;
}
void
CFCBindClass_destroy(CFCBindClass *self)
{
+ FREEMEM(self->full_callbacks_var);
+ FREEMEM(self->full_name_var);
+ FREEMEM(self->short_names_macro);
CFCBase_decref((CFCBase*)self->client);
CFCBase_destroy((CFCBase*)self);
}
@@ -60,3 +76,21 @@ CFCBindClass_get_client(CFCBindClass *se
return self->client;
}
+const char*
+CFCBindClass_full_callbacks_var(CFCBindClass *self)
+{
+ return self->full_callbacks_var;
+}
+
+const char*
+CFCBindClass_full_name_var(CFCBindClass *self)
+{
+ return self->full_name_var;
+}
+
+const char*
+CFCBindClass_short_names_macro(CFCBindClass *self)
+{
+ return self->short_names_macro;
+}
+
Modified: incubator/lucy/trunk/clownfish/src/CFCBindClass.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindClass.h?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindClass.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindClass.h Thu Jun 23 19:29:49 2011
@@ -37,6 +37,15 @@ CFCBindClass_destroy(CFCBindClass *self)
struct CFCClass*
CFCBindClass_get_client(struct CFCBindClass *self);
+const char*
+CFCBindClass_full_callbacks_var(CFCBindClass *self);
+
+const char*
+CFCBindClass_full_name_var(CFCBindClass *self);
+
+const char*
+CFCBindClass_short_names_macro(CFCBindClass *self);
+
#ifdef __cplusplus
}
#endif
Modified: incubator/lucy/trunk/clownfish/src/CFCClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.c?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.c Thu Jun 23 19:29:49 2011
@@ -763,6 +763,16 @@ CFCClass_get_prefix(CFCClass *self) {
}
const char*
+CFCClass_get_Prefix(CFCClass *self) {
+ return CFCSymbol_get_Prefix((CFCSymbol*)self);
+}
+
+const char*
+CFCClass_get_PREFIX(CFCClass *self) {
+ return CFCSymbol_get_PREFIX((CFCSymbol*)self);
+}
+
+const char*
CFCClass_get_class_name(CFCClass *self) {
return CFCSymbol_get_class_name((CFCSymbol*)self);
}
Modified: incubator/lucy/trunk/clownfish/src/CFCClass.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.h?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.h Thu Jun 23 19:29:49 2011
@@ -164,6 +164,12 @@ const char*
CFCClass_get_prefix(CFCClass *self);
const char*
+CFCClass_get_Prefix(CFCClass *self);
+
+const char*
+CFCClass_get_PREFIX(CFCClass *self);
+
+const char*
CFCClass_get_class_name(CFCClass *self);
struct CFCParcel*