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