libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] libcvd/cvd_src faster_corner.cxx corner_12.h


From: Ethan Eade
Subject: [libcvd-members] libcvd/cvd_src faster_corner.cxx corner_12.h
Date: Thu, 25 Jan 2007 15:40:04 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    libcvd
Changes by:     Ethan Eade <ethaneade>  07/01/25 15:40:04

Modified files:
        cvd_src        : faster_corner.cxx 
Added files:
        cvd_src        : corner_12.h 

Log message:
        Fixed barrier check to be correct in high contrast images.  Removed the 
only inline assembly in the code, so that all the code is intrinsics now. 
is_corner_12 now lives in a separate file, corner_12.h, and has been generated 
as the series of questions with the least number of questions asked before 
termination for a fixed probability of each one being 'yes'. 

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd_src/faster_corner.cxx?cvsroot=libcvd&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd_src/corner_12.h?cvsroot=libcvd&rev=1.1

Patches:
Index: faster_corner.cxx
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd_src/faster_corner.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- faster_corner.cxx   22 Jan 2007 14:23:37 -0000      1.2
+++ faster_corner.cxx   25 Jan 2007 15:40:04 -0000      1.3
@@ -13,70 +13,11 @@
 namespace CVD
 {
 
-
+    #include <cvd_src/corner_12.h>    
 
     struct Less { template <class T1, class T2> static bool eval(const T1 a, 
const T2 b) { return a < b; }};
     struct Greater { template <class T1, class T2> static bool eval(const T1 
a, const T2 b) { return b < a; }};
 
-    template <class C> inline bool is_corner_12(const byte* p, int w, int t) {
-       const int w3 = 3*w;
-       if (!C::eval(p[-3],t)) {
-           if (!C::eval(p[-w3],t) || !C::eval(p[1-w3],t) || 
!C::eval(p[2-2*w],t) || !C::eval(p[3-w],t) || !C::eval(p[3],t) || 
!C::eval(p[3+w],t) || !C::eval(p[2+2*w],t) || !C::eval(p[1+w3],t) || 
!C::eval(p[w3],t))
-               return false;
-           if (!C::eval(p[-1-w3],t))
-               return (C::eval(p[-1+w3],t) && C::eval(p[-2+2*w],t) && 
C::eval(p[-3+w],t));
-           if (!C::eval(p[-2-2*w],t))
-               return (C::eval(p[-1+w3],t) && C::eval(p[-2+2*w],t));
-           if (!C::eval(p[-3-w],t))
-               return (C::eval(p[-1+w3],t));
-           return true;
-       }
-       if (!C::eval(p[-3-w],t)) {
-           if (!C::eval(p[1-w3],t) || !C::eval(p[2-2*w],t) || 
!C::eval(p[3-w],t) || !C::eval(p[3],t) || !C::eval(p[3+w],t) || 
!C::eval(p[2+2*w],t) || !C::eval(p[1+w3],t) || !C::eval(p[w3],t) || 
!C::eval(p[-1+w3],t))
-               return false;
-           if (!C::eval(p[-w3],t)  || !C::eval(p[-1-w3],t))
-               return (C::eval(p[-2+2*w],t) && C::eval(p[-3+w],t));
-           if (!C::eval(p[-2-2*w],t))
-               return (C::eval(p[-2+2*w],t));
-           return true;
-       }
-       if (!C::eval(p[-2-2*w],t)) {
-           if (!C::eval(p[2-2*w],t) || !C::eval(p[3-w],t) || !C::eval(p[3],t) 
|| !C::eval(p[3+w],t) || !C::eval(p[2+2*w],t) || !C::eval(p[1+w3],t) || 
!C::eval(p[w3],t) || !C::eval(p[-1+w3],t) || !C::eval(p[-2+2*w],t))
-               return false;
-           if (C::eval(p[-3+w],t)) return true;
-           return (C::eval(p[1-w3],t)  && C::eval(p[-w3],t) && 
C::eval(p[-1-w3],t));
-       }
-       if (!C::eval(p[-1-w3],t)) {
-           return (C::eval(p[3-w],t) && C::eval(p[3],t) && C::eval(p[3+w],t) 
&& C::eval(p[2+2*w],t) && C::eval(p[1+w3],t) && C::eval(p[w3],t) && 
C::eval(p[-1+w3],t) && C::eval(p[-2+2*w],t));
-       }
-       if (!C::eval(p[-w3],t)) {
-           return (C::eval(p[3],t) && C::eval(p[3+w],t) && C::eval(p[2+2*w],t) 
&& C::eval(p[1+w3],t) && C::eval(p[w3],t) && C::eval(p[-1+w3],t) && 
C::eval(p[-2+2*w],t) && C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[1-w3],t)) {
-           return (C::eval(p[3+w],t) && C::eval(p[2+2*w],t) && 
C::eval(p[1+w3],t) && C::eval(p[w3],t) && C::eval(p[-1+w3],t) && 
C::eval(p[-2+2*w],t) && C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[2-2*w],t)) {
-           return (C::eval(p[2+2*w],t) && C::eval(p[1+w3],t) && 
C::eval(p[w3],t) && C::eval(p[-1+w3],t) && C::eval(p[-2+2*w],t) && 
C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[3-w],t)) {
-           return (C::eval(p[1+w3],t) && C::eval(p[w3],t) && 
C::eval(p[-1+w3],t) && C::eval(p[-2+2*w],t) && C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[3],t)) {
-           return (C::eval(p[w3],t) && C::eval(p[-1+w3],t) && 
C::eval(p[-2+2*w],t) && C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[3+w],t)) {
-           return (C::eval(p[-1+w3],t) && C::eval(p[-2+2*w],t) && 
C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[2+2*w],t)) {
-           return (C::eval(p[-2+2*w],t) && C::eval(p[-3+w],t));
-       }
-       if (!C::eval(p[1+w3],t)) {
-           return (C::eval(p[-3+w],t));
-       }
-       return true;
-    }
-
-
     template <int I, int N> struct BitCheck {
        template <class C> static inline void eval(unsigned int three, const 
byte* p, const int w, const int barrier, C& corners) {
            const int BIT = 1<<I;
@@ -110,15 +51,17 @@
        }
     }
 
-#define CHECK_BARRIER(here, other, flags)                              \
+#define CHECK_BARRIER(lo, hi, other, flags)                            \
     {                                                                  \
-       __m128i diff = _mm_subs_epu8(here, other);                      \
-       __m128i diff2 = _mm_subs_epu8(other, here);                     \
-       asm( "pcmpgtb %%xmm7, %0  \n\t" : : "x"(diff2));                \
-       asm( "pcmpgtb %%xmm7, %0  \n\t" : : "x"(diff));                 \
-       flags = _mm_movemask_epi8(diff) | (_mm_movemask_epi8(diff2) << 16); \
+       __m128i diff = _mm_subs_epu8(lo, other);                        \
+       __m128i diff2 = _mm_subs_epu8(other, hi);                       \
+       __m128i z = _mm_setzero_si128();                                \
+       diff = _mm_cmpeq_epi8(diff, z);                                 \
+       diff2 = _mm_cmpeq_epi8(diff2, z);                               \
+       flags = ~(_mm_movemask_epi8(diff) | (_mm_movemask_epi8(diff2) << 16)); \
     }
     
+    
     template <bool Aligned> inline __m128i load_si128(const void* addr) { 
return _mm_loadu_si128((const __m128i*)addr); }
     template <> inline __m128i load_si128<true>(const void* addr) { return 
_mm_load_si128((const __m128i*)addr); }
     
@@ -129,33 +72,38 @@
        typedef std::list<const byte*> Passed;
        Passed passed;
     
-       // Put the barrier in xmm7, which the compiler 
-       // does not seem to allocate
-       {   const __m128i barriers = _mm_set1_epi8((byte)barrier);
-           asm( "movdqa %0, %%xmm7  \n\t" : : "x"(barriers));  }
+       // The compiler refuses to reserve a register for this,
+       // even though xmm6 and xmm7 go unused.
+       // It loads it from memory each time.  I am stymied.
+       register const __m128i barriers = _mm_set1_epi8((byte)barrier);
 
        for (int i=3; i<I.size().y-3; ++i) {
            const byte* p = I[i];
            for (int j=0; j<w/16; ++j, p+=16) {
+               __m128i lo, hi;
+               {
                const __m128i here = load_si128<Aligned>((const __m128i*)(p));
+                   lo = _mm_subs_epu8(here, barriers);
+                   hi = _mm_adds_epu8(barriers, here);
+               }
                const __m128i above = load_si128<Aligned>((const 
__m128i*)(p-stride));
                const __m128i below = load_si128<Aligned>((const 
__m128i*)(p+stride));
                unsigned int up_flags, down_flags;
-               CHECK_BARRIER(here, above, up_flags);
-               CHECK_BARRIER(here, below, down_flags);
+               CHECK_BARRIER(lo, hi, above, up_flags);
+               CHECK_BARRIER(lo, hi, below, down_flags);
                const unsigned int either_ud = up_flags | down_flags;
                if (either_ud) {
                    unsigned int left_flags;
                    {
                        const __m128i other = _mm_loadu_si128((const 
__m128i*)(p-3));
-                       CHECK_BARRIER(here, other, left_flags);
+                       CHECK_BARRIER(lo, hi, other, left_flags);
                    }
                    const unsigned int both_ud = up_flags & down_flags;
                    if (both_ud | (either_ud&left_flags)) {
                        unsigned int right_flags;
                        {
                            const __m128i other = _mm_loadu_si128((const 
__m128i*)(p+3));
-                           CHECK_BARRIER(here, other, right_flags);
+                           CHECK_BARRIER(lo, hi, other, right_flags);
                        }
                        const unsigned int at_least_three = (either_ud & 
(left_flags & right_flags)) | (both_ud & (left_flags | right_flags));
                        if (at_least_three) {

Index: corner_12.h
===================================================================
RCS file: corner_12.h
diff -N corner_12.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ corner_12.h 25 Jan 2007 15:40:04 -0000      1.1
@@ -0,0 +1,317 @@
+template <class C> inline bool is_corner_12(const byte* p, const int w, const 
int t) {
+    const int w3 = 3*w;
+    if (!C::eval(p[-w3],t)) { // -???????????????
+        if (!C::eval(p[-3],t)) { // -???????????-???
+            return false;
+        } // address@hidden
+        if (!C::eval(p[3],t)) { // address@hidden
+            return false;
+        } // address@hidden@???
+        if (!C::eval(p[3+w],t)) { // address@hidden@???
+            return false;
+        } // -???@@address@hidden
+        if (!C::eval(p[-3+w],t)) { // -???@@address@hidden
+            return false;
+        } // -???@@?????@@???
+        if (!C::eval(p[-2+2*w],t)) { // -???@@????-@@???
+            return false;
+        } // -???@@????@@@???
+        if (!C::eval(p[-1+w3],t)) { // -???@@???-@@@???
+            return false;
+        } // -???@@???@@@@???
+        if (!C::eval(p[2+2*w],t)) { // -???@@-??@@@@???
+            return false;
+        } // -???@@@??@@@@???
+        if (!C::eval(p[w3],t)) { // -???@@@?-@@@@???
+            return false;
+        } // -???@@@?@@@@@???
+        if (!C::eval(p[1+w3],t)) { // -???@@@-@@@@@???
+            return false;
+        } // -???@@@@@@@@@???
+        if (!C::eval(p[-3-w],t)) { // -???@@@@@@@@@-??
+            if (!C::eval(p[1-w3],t)) { // --??@@@@@@@@@-??
+                return false;
+            } // address@hidden@@@@@@@@@-??
+            if (!C::eval(p[2-2*w],t)) { // address@hidden@@@@@@@@@-??
+                return false;
+            } // -@@?@@@@@@@@@-??
+            if (!C::eval(p[3-w],t)) { // -@@-@@@@@@@@@-??
+                return false;
+            } // -@@@@@@@@@@@@-??
+            return true;
+        } // -???@@@@@@@@@@??
+        if (!C::eval(p[-2-2*w],t)) { // -???@@@@@@@@@@-?
+            if (!C::eval(p[2-2*w],t)) { // -?-?@@@@@@@@@@-?
+                return false;
+            } // address@hidden@@@@@@@@@@-?
+            if (!C::eval(p[3-w],t)) { // address@hidden@@@@@@@@@@-?
+                return false;
+            } // -?@@@@@@@@@@@@-?
+            return true;
+        } // -???@@@@@@@@@@@?
+        if (!C::eval(p[3-w],t)) { // -??-@@@@@@@@@@@?
+            if (!C::eval(p[-1-w3],t)) { // -??-@@@@@@@@@@@-
+                return false;
+            } // -??-@@@@@@@@@@@@
+            return true;
+        } // -??@@@@@@@@@@@@?
+        return true;
+    } // @???????????????
+    if (!C::eval(p[-1-w3],t)) { // @??????????????-
+        if (!C::eval(p[3-w],t)) { // @??-???????????-
+            return false;
+        } // @address@hidden
+        if (!C::eval(p[-3+w],t)) { // @address@hidden
+            return false;
+        } // @address@hidden@???-
+        if (!C::eval(p[-2+2*w],t)) { // @address@hidden@???-
+            return false;
+        } // @address@hidden@@???-
+        if (!C::eval(p[-1+w3],t)) { // @address@hidden@@???-
+            return false;
+        } // @address@hidden@@@???-
+        if (!C::eval(p[w3],t)) { // @address@hidden@@@???-
+            return false;
+        } // @address@hidden@@@@???-
+        if (!C::eval(p[3],t)) { // @address@hidden@@@@???-
+            return false;
+        } // @??@@???@@@@???-
+        if (!C::eval(p[1+w3],t)) { // @??@@??-@@@@???-
+            return false;
+        } // @??@@??@@@@@???-
+        if (!C::eval(p[2+2*w],t)) { // @??@@?-@@@@@???-
+            return false;
+        } // @??@@?@@@@@@???-
+        if (!C::eval(p[3+w],t)) { // @??@@-@@@@@@???-
+            return false;
+        } // @??@@@@@@@@@???-
+        if (!C::eval(p[2-2*w],t)) { // @?-@@@@@@@@@???-
+            if (!C::eval(p[-3],t)) { // @?-@@@@@@@@@-??-
+                return false;
+            } // @?-@@@@@@@@@@??-
+            if (!C::eval(p[-3-w],t)) { // @?-@@@@@@@@@@-?-
+                return false;
+            } // @?-@@@@@@@@@@@?-
+            if (!C::eval(p[-2-2*w],t)) { // @?-@@@@@@@@@@@--
+                return false;
+            } // @?-@@@@@@@@@@@@-
+            return true;
+        } // @?@@@@@@@@@@???-
+        if (!C::eval(p[1-w3],t)) { // @-@@@@@@@@@@???-
+            if (!C::eval(p[-3],t)) { // @-@@@@@@@@@@-??-
+                return false;
+            } // @-@@@@@@@@@@@??-
+            if (!C::eval(p[-3-w],t)) { // @-@@@@@@@@@@@-?-
+                return false;
+            } // @-@@@@@@@@@@@@?-
+            return true;
+        } // @@@@@@@@@@@@???-
+        return true;
+    } // @??????????????@
+    if (!C::eval(p[1-w3],t)) { // @-?????????????@
+        if (!C::eval(p[3+w],t)) { // @-???-?????????@
+            return false;
+        } // @address@hidden@
+        if (!C::eval(p[-3-w],t)) { // @address@hidden@
+            return false;
+        } // @address@hidden@?@
+        if (!C::eval(p[-3],t)) { // @address@hidden@?@
+            return false;
+        } // @address@hidden@@?@
+        if (!C::eval(p[-3+w],t)) { // @address@hidden@@?@
+            return false;
+        } // @address@hidden@@@?@
+        if (!C::eval(p[-2+2*w],t)) { // @address@hidden@@@?@
+            return false;
+        } // @address@hidden@@@@?@
+        if (!C::eval(p[2+2*w],t)) { // @address@hidden@@@@?@
+            return false;
+        } // @-???@@???@@@@?@
+        if (!C::eval(p[1+w3],t)) { // @-???@@-??@@@@?@
+            return false;
+        } // @-???@@@??@@@@?@
+        if (!C::eval(p[-1+w3],t)) { // @-???@@@?-@@@@?@
+            return false;
+        } // @-???@@@?@@@@@?@
+        if (!C::eval(p[w3],t)) { // @-???@@@-@@@@@?@
+            return false;
+        } // @-???@@@@@@@@@?@
+        if (!C::eval(p[-2-2*w],t)) { // @-???@@@@@@@@@-@
+            if (!C::eval(p[2-2*w],t)) { // @--??@@@@@@@@@-@
+                return false;
+            } // @address@hidden@@@@@@@@@-@
+            if (!C::eval(p[3-w],t)) { // @address@hidden@@@@@@@@@-@
+                return false;
+            } // @-@@?@@@@@@@@@-@
+            if (!C::eval(p[3],t)) { // @-@@-@@@@@@@@@-@
+                return false;
+            } // @-@@@@@@@@@@@@-@
+            return true;
+        } // @-???@@@@@@@@@@@
+        return true;
+    } // @@?????????????@
+    if (!C::eval(p[2-2*w],t)) { // @@-????????????@
+        if (!C::eval(p[2+2*w],t)) { // @@-???-????????@
+            return false;
+        } // @@address@hidden@
+        if (!C::eval(p[1+w3],t)) { // @@address@hidden@
+            return false;
+        } // @@-???@@???????@
+        if (!C::eval(p[-2-2*w],t)) { // @@-???@@??????-@
+            return false;
+        } // @@-???@@??????@@
+        if (!C::eval(p[w3],t)) { // @@-???@@-?????@@
+            return false;
+        } // @@-???@@@?????@@
+        if (!C::eval(p[-3-w],t)) { // @@-???@@@????-@@
+            return false;
+        } // @@-???@@@????@@@
+        if (!C::eval(p[-3],t)) { // @@-???@@@???-@@@
+            return false;
+        } // @@-???@@@???@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@-???@@@-??@@@@
+            return false;
+        } // @@-???@@@@??@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@-???@@@@-?@@@@
+            return false;
+        } // @@-???@@@@@?@@@@
+        if (!C::eval(p[-3+w],t)) { // @@-???@@@@@-@@@@
+            return false;
+        } // @@-???@@@@@@@@@@
+        return true;
+    } // @@@????????????@
+    if (!C::eval(p[-2-2*w],t)) { // @@@???????????-@
+        if (!C::eval(p[3-w],t)) { // @@@-??????????-@
+            return false;
+        } // @@@@??????????-@
+        if (!C::eval(p[-2+2*w],t)) { // @@@@??????-???-@
+            return false;
+        } // @@@@address@hidden@
+        if (!C::eval(p[3],t)) { // @@@@address@hidden@
+            return false;
+        } // @@@@@address@hidden@
+        if (!C::eval(p[-1+w3],t)) { // @@@@@address@hidden@
+            return false;
+        } // @@@@@????@@???-@
+        if (!C::eval(p[w3],t)) { // @@@@@???-@@???-@
+            return false;
+        } // @@@@@???@@@???-@
+        if (!C::eval(p[3+w],t)) { // @@@@@-??@@@???-@
+            return false;
+        } // @@@@@@??@@@???-@
+        if (!C::eval(p[2+2*w],t)) { // @@@@@@-?@@@???-@
+            return false;
+        } // @@@@@@@?@@@???-@
+        if (!C::eval(p[1+w3],t)) { // @@@@@@@-@@@???-@
+            return false;
+        } // @@@@@@@@@@@???-@
+        return true;
+    } // @@@???????????@@
+    if (!C::eval(p[3-w],t)) { // @@@-??????????@@
+        if (!C::eval(p[-3-w],t)) { // @@@-?????????-@@
+            return false;
+        } // @@@-?????????@@@
+        if (!C::eval(p[1+w3],t)) { // @@@-???-?????@@@
+            return false;
+        } // @@@address@hidden@@@
+        if (!C::eval(p[-3],t)) { // @@@address@hidden@@@
+            return false;
+        } // @@@address@hidden@@@@
+        if (!C::eval(p[-3+w],t)) { // @@@address@hidden@@@@
+            return false;
+        } // @@@address@hidden@@@@@
+        if (!C::eval(p[w3],t)) { // @@@address@hidden@@@@@
+            return false;
+        } // @@@-???@@??@@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@@-???@@-?@@@@@
+            return false;
+        } // @@@-???@@@?@@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@@-???@@@-@@@@@
+            return false;
+        } // @@@-???@@@@@@@@@
+        return true;
+    } // @@@@??????????@@
+    if (!C::eval(p[3],t)) { // @@@@-?????????@@
+        if (!C::eval(p[w3],t)) { // @@@@-???-?????@@
+            return false;
+        } // @@@@address@hidden@@
+        if (!C::eval(p[-3-w],t)) { // @@@@address@hidden@@
+            return false;
+        } // @@@@address@hidden@@@
+        if (!C::eval(p[-3],t)) { // @@@@address@hidden@@@
+            return false;
+        } // @@@@address@hidden@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@@@address@hidden@@@@
+            return false;
+        } // @@@@-???@@??@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@@@-???@@-?@@@@
+            return false;
+        } // @@@@-???@@@?@@@@
+        if (!C::eval(p[-3+w],t)) { // @@@@-???@@@-@@@@
+            return false;
+        } // @@@@-???@@@@@@@@
+        return true;
+    } // @@@@@?????????@@
+    if (!C::eval(p[-3-w],t)) { // @@@@@????????-@@
+        if (!C::eval(p[-1+w3],t)) { // @@@@@????-???-@@
+            return false;
+        } // @@@@@address@hidden@@
+        if (!C::eval(p[w3],t)) { // @@@@@address@hidden@@
+            return false;
+        } // @@@@@???@@???-@@
+        if (!C::eval(p[3+w],t)) { // @@@@@-??@@???-@@
+            return false;
+        } // @@@@@@??@@???-@@
+        if (!C::eval(p[2+2*w],t)) { // @@@@@@-?@@???-@@
+            return false;
+        } // @@@@@@@?@@???-@@
+        if (!C::eval(p[1+w3],t)) { // @@@@@@@-@@???-@@
+            return false;
+        } // @@@@@@@@@@???-@@
+        return true;
+    } // @@@@@????????@@@
+    if (!C::eval(p[3+w],t)) { // @@@@@-???????@@@
+        if (!C::eval(p[-3],t)) { // @@@@@-??????-@@@
+            return false;
+        } // @@@@@-??????@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@@@@-???-??@@@@
+            return false;
+        } // @@@@@address@hidden@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@@@@address@hidden@@@@
+            return false;
+        } // @@@@@-???@@?@@@@
+        if (!C::eval(p[-3+w],t)) { // @@@@@-???@@-@@@@
+            return false;
+        } // @@@@@-???@@@@@@@
+        return true;
+    } // @@@@@@???????@@@
+    if (!C::eval(p[2+2*w],t)) { // @@@@@@-??????@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@@@@@-???-??@@@
+            return false;
+        } // @@@@@@address@hidden@@@
+        if (!C::eval(p[-3+w],t)) { // @@@@@@address@hidden@@@
+            return false;
+        } // @@@@@@-???@@?@@@
+        if (!C::eval(p[-3],t)) { // @@@@@@-???@@-@@@
+            return false;
+        } // @@@@@@-???@@@@@@
+        return true;
+    } // @@@@@@@??????@@@
+    if (!C::eval(p[1+w3],t)) { // @@@@@@@-?????@@@
+        if (!C::eval(p[-3+w],t)) { // @@@@@@@-???-?@@@
+            return false;
+        } // @@@@@@@address@hidden@@@
+        if (!C::eval(p[-3],t)) { // @@@@@@@address@hidden@@@
+            return false;
+        } // @@@@@@@-???@@@@@
+        return true;
+    } // @@@@@@@@?????@@@
+    if (!C::eval(p[-3],t)) { // @@@@@@@@????-@@@
+        if (!C::eval(p[w3],t)) { // @@@@@@@@-???-@@@
+            return false;
+        } // @@@@@@@@@???-@@@
+        return true;
+    } // @@@@@@@@????@@@@
+    return true;
+}
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]