int main(int argc, char *argv[]) { (void)argc; (void)argv; call<pointer> cf1(&fun1); call<pointer> cf2(&fun2); return 0; }
int main () { CommFrac cf1(1, 2); CommFrac cf2(2, 3); std::cout << cf1 << " + " << cf2 << " = " << (cf1 + cf2) << std::endl; std::cout << cf1 << " - " << cf2 << " = " << (cf1 - cf2) << std::endl; std::cout << cf1 << " * " << cf2 << " = " << (cf1 * cf2) << std::endl; std::cout << cf1 << " / " << cf2 << " = " << (cf1 / cf2) << std::endl; return 0; }
struct coord * place_at_distance (struct frame *f0, coord_f cf0, struct frame *f1, coord_f cf1, int d, enum dir dir, struct coord *c) { struct coord c0; cf0 (f0, &c0); struct coord c1; cf1 (f1, &c1); struct coord tl; _tl (f1, &tl); *c = c1; coord2room (&c0, c1.room, &c0); c->x = (c0.x - c1.x) + ((dir == RIGHT) ? d : -d) + tl.x; return c; }
static SkColorFilter* make_compose_cf() { SkAutoTUnref<SkColorFilter> cf0(make_mode_cf()); SkAutoTUnref<SkColorFilter> cf1(make_mx_cf()); return SkColorFilter::CreateComposeFilter(cf0, cf1); }
void onDraw(SkCanvas* canvas) override { canvas->clear(SK_ColorBLACK); { sk_sp<SkImageFilter> bitmapSource(SkImageSource::Make(fImage)); sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkBlendMode::kSrcIn)); sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(4.0f, 4.0f, std::move(bitmapSource))); sk_sp<SkImageFilter> erode(SkErodeImageFilter::Make(4, 4, blur)); sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Make(std::move(cf), std::move(erode))); sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color, SkBlendMode::kSrcOver)); SkPaint paint; paint.setImageFilter(std::move(merge)); canvas->drawPaint(paint); canvas->translate(SkIntToScalar(100), 0); } { sk_sp<SkImageFilter> morph(SkDilateImageFilter::Make(5, 5, nullptr)); SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, 0, SK_Scalar1, 0, 0, 0, 0, 0, SK_Scalar1, 0, 0, 0, 0, 0, 0.5f, 0 }; sk_sp<SkColorFilter> matrixFilter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); sk_sp<SkImageFilter> colorMorph(SkColorFilterImageFilter::Make(std::move(matrixFilter), std::move(morph))); SkPaint paint; paint.setImageFilter(SkXfermodeImageFilter::Make(SkBlendMode::kSrcOver, std::move(colorMorph))); DrawClippedImage(canvas, fImage.get(), paint); canvas->translate(SkIntToScalar(100), 0); } { SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, 0, SK_Scalar1, 0, 0, 0, 0, 0, SK_Scalar1, 0, 0, 0, 0, 0, 0.5f, 0 }; sk_sp<SkColorFilter> matrixCF(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); sk_sp<SkImageFilter> matrixFilter(SkColorFilterImageFilter::Make(std::move(matrixCF), nullptr)); sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Make(10.0f, 10.f, matrixFilter)); SkPaint paint; paint.setImageFilter( SkXfermodeImageFilter::MakeArithmetic(0, 1, 1, 0, true, std::move(matrixFilter), std::move(offsetFilter), nullptr)); DrawClippedImage(canvas, fImage.get(), paint); canvas->translate(SkIntToScalar(100), 0); } { sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(SkIntToScalar(10), SkIntToScalar(10), nullptr)); SkImageFilter::CropRect cropRect(SkRect::MakeWH(SkIntToScalar(95), SkIntToScalar(100))); SkPaint paint; paint.setImageFilter( SkXfermodeImageFilter::Make(SkBlendMode::kSrcIn, std::move(blur), nullptr, &cropRect)); DrawClippedImage(canvas, fImage.get(), paint); canvas->translate(SkIntToScalar(100), 0); } { // Dilate -> matrix convolution. // This tests that a filter using asFragmentProcessor (matrix // convolution) correctly handles a non-zero source offset // (supplied by the dilate). sk_sp<SkImageFilter> dilate(SkDilateImageFilter::Make(5, 5, nullptr)); SkScalar kernel[9] = { SkIntToScalar(-1), SkIntToScalar( -1 ), SkIntToScalar(-1), SkIntToScalar(-1), SkIntToScalar( 7 ), SkIntToScalar(-1), SkIntToScalar(-1), SkIntToScalar( -1 ), SkIntToScalar(-1), }; SkISize kernelSize = SkISize::Make(3, 3); SkScalar gain = 1.0f, bias = SkIntToScalar(0); SkIPoint kernelOffset = SkIPoint::Make(1, 1); auto tileMode = SkMatrixConvolutionImageFilter::kClamp_TileMode; bool convolveAlpha = false; sk_sp<SkImageFilter> convolve(SkMatrixConvolutionImageFilter::Make(kernelSize, kernel, gain, bias, kernelOffset, tileMode, convolveAlpha, std::move(dilate))); SkPaint paint; paint.setImageFilter(std::move(convolve)); DrawClippedImage(canvas, fImage.get(), paint); canvas->translate(SkIntToScalar(100), 0); } { // Test that crop offsets are absolute, not relative to the parent's crop rect. sk_sp<SkColorFilter> cf1(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkBlendMode::kSrcIn)); sk_sp<SkColorFilter> cf2(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkBlendMode::kSrcIn)); SkImageFilter::CropRect outerRect(SkRect::MakeXYWH(SkIntToScalar(10), SkIntToScalar(10), SkIntToScalar(80), SkIntToScalar(80))); SkImageFilter::CropRect innerRect(SkRect::MakeXYWH(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(60), SkIntToScalar(60))); sk_sp<SkImageFilter> color1(SkColorFilterImageFilter::Make(std::move(cf1), nullptr, &outerRect)); sk_sp<SkImageFilter> color2(SkColorFilterImageFilter::Make(std::move(cf2), std::move(color1), &innerRect)); SkPaint paint; paint.setImageFilter(std::move(color2)); paint.setColor(SK_ColorRED); canvas->drawRect(SkRect::MakeXYWH(0, 0, 100, 100), paint); canvas->translate(SkIntToScalar(100), 0); } }
bool NucleicAcidTools::symm_match( clipper::MiniMol& molwrk, const clipper::MiniMol& molref ) { clipper::Spacegroup spg1 = clipper::Spacegroup(clipper::Spacegroup::P1); clipper::Spacegroup spgr = molwrk.spacegroup(); clipper::Cell cell = molwrk.cell(); // calculate extent of model clipper::Atom_list atomr = molref.atom_list(); clipper::Range<clipper::ftype> urange, vrange, wrange; clipper::Coord_frac cfr( 0.0, 0.0, 0.0 ); for ( int i = 0; i < atomr.size(); i++ ) { clipper::Coord_frac cf = atomr[i].coord_orth().coord_frac( cell ); cfr += cf; urange.include( cf.u() ); vrange.include( cf.v() ); wrange.include( cf.w() ); } clipper::Coord_frac cf0( urange.min(), vrange.min(), wrange.min() ); clipper::Coord_frac cf1( urange.max(), vrange.max(), wrange.max() ); cfr = (1.0/double(atomr.size())) * cfr; // calculate mask using wrk cell and ref atoms clipper::Resolution reso( 5.0 ); clipper::Grid_sampling grid( spg1, cell, reso ); clipper::Grid_range grng( grid, cf0, cf1 ); grng.add_border(4); clipper::NXmap<float> nxmap( cell, grid, grng ), nxflt( cell, grid, grng ); clipper::EDcalc_mask<float> maskcalc( 2.0 ); nxmap = 0.0; maskcalc( nxmap, atomr ); MapFilterFn_g5 fn; clipper::MapFilter_fft<float> fltr( fn, 1.0, clipper::MapFilter_fft<float>::Relative ); fltr( nxflt, nxmap ); // now score each chain, symmetry and offset in turn for ( int c = 0; c < molwrk.size(); c++ ) { double bestscr = 0.0; int bestsym = 0; clipper::Coord_frac bestoff( 0.0, 0.0, 0.0 ); const clipper::Coord_frac cfh( 0.5, 0.5, 0.5 ); for ( int sym = 0; sym < spgr.num_symops(); sym++ ) { clipper::Atom_list atomw = molwrk[c].atom_list(); clipper::RTop_orth rtop = spgr.symop(sym).rtop_orth( cell ); clipper::Coord_orth cow( 0.0, 0.0, 0.0 ); for ( int a = 0; a < atomw.size(); a++ ) { atomw[a].transform( rtop ); cow += atomw[a].coord_orth(); } if ( atomw.size() > 0 ) cow = (1.0/double(atomw.size())) * cow; clipper::Coord_frac cfw = cow.coord_frac( cell ); clipper::Coord_frac cfwt = cfw.lattice_copy_near( cfr - cfh ); clipper::Coord_frac off0 = cfwt - cfw; // try offsets for ( double du = 0.0; du <= 1.01; du += 1.0 ) for ( double dv = 0.0; dv < 1.01; dv += 1.0 ) for ( double dw = 0.0; dw < 1.01; dw += 1.0 ) { clipper::Coord_frac off( rint( off0.u() ) + du, rint( off0.v() ) + dv, rint( off0.w() ) + dw ); clipper::Coord_orth ofo = off.coord_orth( cell ); double scr = 0.0; for ( int a = 0; a < atomw.size(); a++ ) { clipper::Coord_orth coa = atomw[a].coord_orth() + ofo; clipper::Coord_grid cga = nxflt.coord_map( coa ).coord_grid(); if ( nxflt.in_map( cga ) ) scr += nxflt.get_data( cga ); } if ( scr > bestscr ) { bestscr = scr; bestsym = sym; bestoff = off; } } } // now transform using the best operator clipper::Coord_orth cot = bestoff.coord_orth( cell ); clipper::RTop_orth rtop = spgr.symop(bestsym).rtop_orth( cell ); rtop = clipper::RTop_orth( rtop.rot(), rtop.trn()+cot ); molwrk[c].transform( rtop ); } return true; }
/* Call functions through pointers and and check against expected results. */ void test (void) { CHECK_VOID_RESULT (v0 (), 1.0); CHECK_VOID_RESULT (v1 (1.0), 2.0); CHECK_VOID_RESULT (v5 (5.0, 6.0), 12.0); CHECK_VOID_RESULT (v9 (9.0, 10.0), 20.0); CHECK_VOID_RESULT (v2 (2.0), 3.0); CHECK_VOID_RESULT (v6 (6.0, 7.0), 14.0); CHECK_VOID_RESULT (v10 (10.0, 11.0), 22.0); CHECK_RESULT (f0 (), 1.0); CHECK_RESULT (f1 (1.0), 2.0); CHECK_RESULT (f5 (5.0, 6.0), 12.0); CHECK_RESULT (f9 (9.0, 10.0), 20.0); CHECK_RESULT (f2 (2.0), 3.0); CHECK_RESULT (f6 (6.0, 7.0), 14.0); CHECK_RESULT (f10 (10.0, 11.0), 22.0); CHECK_RESULT (d0 (), 1.0); CHECK_RESULT (d1 (1.0), 2.0); CHECK_RESULT (d5 (5.0, 6.0), 12.0); CHECK_RESULT (d9 (9.0, 10.0), 20.0); CHECK_RESULT (d2 (2.0), 3.0); CHECK_RESULT (d6 (6.0, 7.0), 14.0); CHECK_RESULT (d10 (10.0, 11.0), 22.0); CHECK_RESULT (cf0 (), 1.0 + 0.0i); CHECK_RESULT (cf1 (1.0), 2.0 + 1.0i); CHECK_RESULT (cf5 (5.0, 6.0), 12.0 + 5.0i); CHECK_RESULT (cf9 (9.0, 10.0), 20.0 + 9.0i); CHECK_RESULT (cf2 (2.0), 3.0 + 2.0i); CHECK_RESULT (cf6 (6.0, 7.0), 14.0 + 6.0i); CHECK_RESULT (cf10 (10.0, 11.0), 22.0 + 10.0i); CHECK_RESULT (cd0 (), 1.0 + 0.0i); CHECK_RESULT (cd1 (1.0), 2.0 + 1.0i); CHECK_RESULT (cd5 (5.0, 6.0), 12.0 + 5.0i); CHECK_RESULT (cd9 (9.0, 10.0), 20.0 + 9.0i); CHECK_RESULT (cd2 (2.0), 3.0 + 2.0i); CHECK_RESULT (cd6 (6.0, 7.0), 14.0 + 6.0i); CHECK_RESULT (cd10 (10.0, 11.0), 22.0 + 10.0i); CHECK_VOID_RESULT ((*pv0) (), 1.0); CHECK_VOID_RESULT ((*pv1) (1.0), 2.0); CHECK_VOID_RESULT ((*pv5) (5.0, 6.0), 12.0); CHECK_VOID_RESULT ((*pv9) (9.0, 10.0), 20.0); CHECK_VOID_RESULT ((*pv2) (2.0), 3.0); CHECK_VOID_RESULT ((*pv6) (6.0, 7.0), 14.0); CHECK_VOID_RESULT ((*pv10) (10.0, 11.0), 22.0); CHECK_RESULT ((*pf0) (), 1.0); CHECK_RESULT ((*pf1) (1.0), 2.0); CHECK_RESULT ((*pf5) (5.0, 6.0), 12.0); CHECK_RESULT ((*pf9) (9.0, 10.0), 20.0); CHECK_RESULT ((*pf2) (2.0), 3.0); CHECK_RESULT ((*pf6) (6.0, 7.0), 14.0); CHECK_RESULT ((*pf10) (10.0, 11.0), 22.0); CHECK_RESULT ((*pd0) (), 1.0); CHECK_RESULT ((*pd1) (1.0), 2.0); CHECK_RESULT ((*pd5) (5.0, 6.0), 12.0); CHECK_RESULT ((*pd9) (9.0, 10.0), 20.0); CHECK_RESULT ((*pd2) (2.0), 3.0); CHECK_RESULT ((*pd6) (6.0, 7.0), 14.0); CHECK_RESULT ((*pd10) (10.0, 11.0), 22.0); CHECK_RESULT ((*pcf0) (), 1.0 + 0.0i); CHECK_RESULT ((*pcf1) (1.0), 2.0 + 1.0i); CHECK_RESULT ((*pcf5) (5.0, 6.0), 12.0 + 5.0i); CHECK_RESULT ((*pcf9) (9.0, 10.0), 20.0 + 9.0i); CHECK_RESULT ((*pcf2) (2.0), 3.0 + 2.0i); CHECK_RESULT ((*pcf6) (6.0, 7.0), 14.0 + 6.0i); CHECK_RESULT ((*pcf10) (10.0, 11.0), 22.0 + 10.0i); CHECK_RESULT ((*pcd0) (), 1.0 + 0.0i); CHECK_RESULT ((*pcd1) (1.0), 2.0 + 1.0i); CHECK_RESULT ((*pcd5) (5.0, 6.0), 12.0 + 5.0i); CHECK_RESULT ((*pcd9) (9.0, 10.0), 20.0 + 9.0i); CHECK_RESULT ((*pcd2) (2.0), 3.0 + 2.0i); CHECK_RESULT ((*pcd6) (6.0, 7.0), 14.0 + 6.0i); CHECK_RESULT ((*pcd10) (10.0, 11.0), 22.0 + 10.0i); }