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 2009/03/12 04:03:52 UTC
svn commit: r752754 - in /lucene/lucy/trunk:
charmonizer/src/Charmonizer/Core/HeadCheck.charm
charmonizer/src/Charmonizer/Core/HeadCheck.harm devel/file_format/
Author: marvin
Date: Thu Mar 12 03:03:51 2009
New Revision: 752754
URL: http://svn.apache.org/viewvc?rev=752754&view=rev
Log:
Add a probe function which discovers whether a struct contains a given member.
Added:
lucene/lucy/trunk/devel/file_format/
Modified:
lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.charm
lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.harm
Modified: lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.charm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.charm?rev=752754&r1=752753&r2=752754&view=diff
==============================================================================
--- lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.charm (original)
+++ lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.charm Thu Mar 12 03:03:51 2009
@@ -109,6 +109,27 @@
return success;
}
+static char contains_code[] = METAQUOTE
+ #include <stddef.h>
+ %s
+ int main() { return offsetof(%s, %s); }
+METAQUOTE;
+
+chaz_bool_t
+chaz_HeadCheck_contains_member(const char *struct_name, const char *member,
+ const char *includes)
+{
+ long needed = sizeof(contains_code) + strlen(struct_name)
+ + strlen(member) + strlen(includes) + 10;
+ if (code_buf_len < needed) {
+ code_buf_len = needed;
+ free(code_buf);
+ code_buf = malloc(code_buf_len);
+ }
+ sprintf(code_buf, contains_code, includes, struct_name, member);
+ return test_compile(code_buf, strlen(code_buf));
+}
+
static int
compare_headers(const void *vptr_a, const void *vptr_b) {
Header **const a = (Header**)vptr_a;
Modified: lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.harm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.harm?rev=752754&r1=752753&r2=752754&view=diff
==============================================================================
--- lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.harm (original)
+++ lucene/lucy/trunk/charmonizer/src/Charmonizer/Core/HeadCheck.harm Thu Mar 12 03:03:51 2009
@@ -24,8 +24,14 @@
chaz_bool_t
chaz_HeadCheck_check_many_headers(const char **header_names);
+/* Return true if the member is present in the struct. */
+chaz_bool_t
+chaz_HeadCheck_contains_member(const char *struct_name, const char *member,
+ const char *includes);
+
#ifdef CHAZ_USE_SHORT_NAMES
#define HeadCheck_init chaz_HeadCheck_init
+ #define HeadCheck_contains_member chaz_HeadCheck_contains_member
#define check_header chaz_HeadCheck_check_header
#define check_many_headers chaz_HeadCheck_check_many_headers
#endif