[Top][All Lists]
[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;
+}
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libcvd-members] libcvd/cvd_src faster_corner.cxx corner_12.h,
Ethan Eade <=