00001 template <class C> inline bool is_corner_12(const byte* p, const int w, const int barrier) {
00002 const int w3 = 3*w;
00003 const int t = C::prep_t(*p, barrier);
00004 if (!C::eval(p[-w3],t)) {
00005 if (!C::eval(p[-3],t)) {
00006 return false;
00007 }
00008 if (!C::eval(p[3],t)) {
00009 return false;
00010 }
00011 if (!C::eval(p[3+w],t)) {
00012 return false;
00013 }
00014 if (!C::eval(p[-3+w],t)) {
00015 return false;
00016 }
00017 if (!C::eval(p[-2+2*w],t)) {
00018 return false;
00019 }
00020 if (!C::eval(p[-1+w3],t)) {
00021 return false;
00022 }
00023 if (!C::eval(p[2+2*w],t)) {
00024 return false;
00025 }
00026 if (!C::eval(p[w3],t)) {
00027 return false;
00028 }
00029 if (!C::eval(p[1+w3],t)) {
00030 return false;
00031 }
00032 if (!C::eval(p[-3-w],t)) {
00033 if (!C::eval(p[1-w3],t)) {
00034 return false;
00035 }
00036 if (!C::eval(p[2-2*w],t)) {
00037 return false;
00038 }
00039 if (!C::eval(p[3-w],t)) {
00040 return false;
00041 }
00042 return true;
00043 }
00044 if (!C::eval(p[-2-2*w],t)) {
00045 if (!C::eval(p[2-2*w],t)) {
00046 return false;
00047 }
00048 if (!C::eval(p[3-w],t)) {
00049 return false;
00050 }
00051 return true;
00052 }
00053 if (!C::eval(p[3-w],t)) {
00054 if (!C::eval(p[-1-w3],t)) {
00055 return false;
00056 }
00057 return true;
00058 }
00059 return true;
00060 }
00061 if (!C::eval(p[-1-w3],t)) {
00062 if (!C::eval(p[3-w],t)) {
00063 return false;
00064 }
00065 if (!C::eval(p[-3+w],t)) {
00066 return false;
00067 }
00068 if (!C::eval(p[-2+2*w],t)) {
00069 return false;
00070 }
00071 if (!C::eval(p[-1+w3],t)) {
00072 return false;
00073 }
00074 if (!C::eval(p[w3],t)) {
00075 return false;
00076 }
00077 if (!C::eval(p[3],t)) {
00078 return false;
00079 }
00080 if (!C::eval(p[1+w3],t)) {
00081 return false;
00082 }
00083 if (!C::eval(p[2+2*w],t)) {
00084 return false;
00085 }
00086 if (!C::eval(p[3+w],t)) {
00087 return false;
00088 }
00089 if (!C::eval(p[2-2*w],t)) {
00090 if (!C::eval(p[-3],t)) {
00091 return false;
00092 }
00093 if (!C::eval(p[-3-w],t)) {
00094 return false;
00095 }
00096 if (!C::eval(p[-2-2*w],t)) {
00097 return false;
00098 }
00099 return true;
00100 }
00101 if (!C::eval(p[1-w3],t)) {
00102 if (!C::eval(p[-3],t)) {
00103 return false;
00104 }
00105 if (!C::eval(p[-3-w],t)) {
00106 return false;
00107 }
00108 return true;
00109 }
00110 return true;
00111 }
00112 if (!C::eval(p[1-w3],t)) {
00113 if (!C::eval(p[3+w],t)) {
00114 return false;
00115 }
00116 if (!C::eval(p[-3-w],t)) {
00117 return false;
00118 }
00119 if (!C::eval(p[-3],t)) {
00120 return false;
00121 }
00122 if (!C::eval(p[-3+w],t)) {
00123 return false;
00124 }
00125 if (!C::eval(p[-2+2*w],t)) {
00126 return false;
00127 }
00128 if (!C::eval(p[2+2*w],t)) {
00129 return false;
00130 }
00131 if (!C::eval(p[1+w3],t)) {
00132 return false;
00133 }
00134 if (!C::eval(p[-1+w3],t)) {
00135 return false;
00136 }
00137 if (!C::eval(p[w3],t)) {
00138 return false;
00139 }
00140 if (!C::eval(p[-2-2*w],t)) {
00141 if (!C::eval(p[2-2*w],t)) {
00142 return false;
00143 }
00144 if (!C::eval(p[3-w],t)) {
00145 return false;
00146 }
00147 if (!C::eval(p[3],t)) {
00148 return false;
00149 }
00150 return true;
00151 }
00152 return true;
00153 }
00154 if (!C::eval(p[2-2*w],t)) {
00155 if (!C::eval(p[2+2*w],t)) {
00156 return false;
00157 }
00158 if (!C::eval(p[1+w3],t)) {
00159 return false;
00160 }
00161 if (!C::eval(p[-2-2*w],t)) {
00162 return false;
00163 }
00164 if (!C::eval(p[w3],t)) {
00165 return false;
00166 }
00167 if (!C::eval(p[-3-w],t)) {
00168 return false;
00169 }
00170 if (!C::eval(p[-3],t)) {
00171 return false;
00172 }
00173 if (!C::eval(p[-1+w3],t)) {
00174 return false;
00175 }
00176 if (!C::eval(p[-2+2*w],t)) {
00177 return false;
00178 }
00179 if (!C::eval(p[-3+w],t)) {
00180 return false;
00181 }
00182 return true;
00183 }
00184 if (!C::eval(p[-2-2*w],t)) {
00185 if (!C::eval(p[3-w],t)) {
00186 return false;
00187 }
00188 if (!C::eval(p[-2+2*w],t)) {
00189 return false;
00190 }
00191 if (!C::eval(p[3],t)) {
00192 return false;
00193 }
00194 if (!C::eval(p[-1+w3],t)) {
00195 return false;
00196 }
00197 if (!C::eval(p[w3],t)) {
00198 return false;
00199 }
00200 if (!C::eval(p[3+w],t)) {
00201 return false;
00202 }
00203 if (!C::eval(p[2+2*w],t)) {
00204 return false;
00205 }
00206 if (!C::eval(p[1+w3],t)) {
00207 return false;
00208 }
00209 return true;
00210 }
00211 if (!C::eval(p[3-w],t)) {
00212 if (!C::eval(p[-3-w],t)) {
00213 return false;
00214 }
00215 if (!C::eval(p[1+w3],t)) {
00216 return false;
00217 }
00218 if (!C::eval(p[-3],t)) {
00219 return false;
00220 }
00221 if (!C::eval(p[-3+w],t)) {
00222 return false;
00223 }
00224 if (!C::eval(p[w3],t)) {
00225 return false;
00226 }
00227 if (!C::eval(p[-1+w3],t)) {
00228 return false;
00229 }
00230 if (!C::eval(p[-2+2*w],t)) {
00231 return false;
00232 }
00233 return true;
00234 }
00235 if (!C::eval(p[3],t)) {
00236 if (!C::eval(p[w3],t)) {
00237 return false;
00238 }
00239 if (!C::eval(p[-3-w],t)) {
00240 return false;
00241 }
00242 if (!C::eval(p[-3],t)) {
00243 return false;
00244 }
00245 if (!C::eval(p[-1+w3],t)) {
00246 return false;
00247 }
00248 if (!C::eval(p[-2+2*w],t)) {
00249 return false;
00250 }
00251 if (!C::eval(p[-3+w],t)) {
00252 return false;
00253 }
00254 return true;
00255 }
00256 if (!C::eval(p[-3-w],t)) {
00257 if (!C::eval(p[-1+w3],t)) {
00258 return false;
00259 }
00260 if (!C::eval(p[w3],t)) {
00261 return false;
00262 }
00263 if (!C::eval(p[3+w],t)) {
00264 return false;
00265 }
00266 if (!C::eval(p[2+2*w],t)) {
00267 return false;
00268 }
00269 if (!C::eval(p[1+w3],t)) {
00270 return false;
00271 }
00272 return true;
00273 }
00274 if (!C::eval(p[3+w],t)) {
00275 if (!C::eval(p[-3],t)) {
00276 return false;
00277 }
00278 if (!C::eval(p[-1+w3],t)) {
00279 return false;
00280 }
00281 if (!C::eval(p[-2+2*w],t)) {
00282 return false;
00283 }
00284 if (!C::eval(p[-3+w],t)) {
00285 return false;
00286 }
00287 return true;
00288 }
00289 if (!C::eval(p[2+2*w],t)) {
00290 if (!C::eval(p[-2+2*w],t)) {
00291 return false;
00292 }
00293 if (!C::eval(p[-3+w],t)) {
00294 return false;
00295 }
00296 if (!C::eval(p[-3],t)) {
00297 return false;
00298 }
00299 return true;
00300 }
00301 if (!C::eval(p[1+w3],t)) {
00302 if (!C::eval(p[-3+w],t)) {
00303 return false;
00304 }
00305 if (!C::eval(p[-3],t)) {
00306 return false;
00307 }
00308 return true;
00309 }
00310 if (!C::eval(p[-3],t)) {
00311 if (!C::eval(p[w3],t)) {
00312 return false;
00313 }
00314 return true;
00315 }
00316 return true;
00317 }
00318