void OpenSteer::SharedPointerTest::testInheritance() { { Sub* rawSubPointer0 = new Sub(); SharedPointer< Super > sp0( rawSubPointer0 ); CPPUNIT_ASSERT_EQUAL( 1, Super::superCount_ ); } CPPUNIT_ASSERT_EQUAL( 0, Super::superCount_ ); { Super* rawSuperPointer0 = new Super(); SharedPointer< Super > sp0( rawSuperPointer0 ); CPPUNIT_ASSERT_EQUAL( 1, Super::superCount_ ); CPPUNIT_ASSERT_EQUAL( 0, Sub::subCount_ ); Sub* rawSubPointer0 = new Sub(); SharedPointer< Sub > sp1( rawSubPointer0 ); CPPUNIT_ASSERT_EQUAL( 2, Super::superCount_ ); CPPUNIT_ASSERT_EQUAL( 1, Sub::subCount_ ); sp0 = sp1; CPPUNIT_ASSERT_EQUAL( 1, Super::superCount_ ); CPPUNIT_ASSERT_EQUAL( 1, Sub::subCount_ ); } CPPUNIT_ASSERT_EQUAL( 0, Super::superCount_ ); CPPUNIT_ASSERT_EQUAL( 0, Sub::subCount_ ); }
void OpenSteer::SharedPointerTest::testComparisons() { Super* rawSuperPointer0 = new Super(); SharedPointer< Super > sp0( rawSuperPointer0 ); Sub* rawSubPointer1 = new Sub(); SharedPointer< Super > sp1( rawSubPointer1 ); CPPUNIT_ASSERT( sp0 != sp1 ); CPPUNIT_ASSERT( ( sp0 < sp1 ) || ( sp1 < sp0 ) ); sp1 = sp0; CPPUNIT_ASSERT( sp0 == sp1 ); CPPUNIT_ASSERT( !( sp0 < sp1 ) && !( sp1 < sp0 ) ); sp0.reset(); sp1.reset(); CPPUNIT_ASSERT( sp0 == sp1 ); // @todo Are these semantics really a good idea? CPPUNIT_ASSERT( ( sp0 < sp1 ) || ( sp1 < sp0 ) ); }
void OpenSteer::SharedPointerTest::testConstruction() { // Testing automatic destruction of a raw pointer hold by a single // shared pointer. CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); SharedPointerTester< 0 >* rawPointer = new SharedPointerTester< 0 >(); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); { SharedPointer< SharedPointerTester< 0 > > sp( rawPointer ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Testing copy constructor. rawPointer = new SharedPointerTester< 0 >(); { SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer ); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 1 ), sp0.useCount() ); { SharedPointer< SharedPointerTester< 0 > > sp1( sp0 ); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 2 ), sp0.useCount() ); CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 2 ), sp1.useCount() ); CPPUNIT_ASSERT_EQUAL( rawPointer, sp0.get() ); CPPUNIT_ASSERT_EQUAL( rawPointer, sp1.get() ); } CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 1 ), sp0.useCount() ); CPPUNIT_ASSERT_EQUAL( rawPointer, sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Testing construction of an empty shared pointer. { SharedPointer< SharedPointerTester< 0 > > sp0; CPPUNIT_ASSERT( 0 == sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); }
void OpenSteer::SharedPointerTest::testAssignment() { // Testing assignment of shared pointers pointing to 0. { SharedPointer< SharedPointerTester< 0 > > sp0; SharedPointer< SharedPointerTester< 0 > > sp1( sp0 ); CPPUNIT_ASSERT( 0 == sp0.get() ); CPPUNIT_ASSERT( 0 == sp1.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Testing assignment to a shared pointer holding 0. { SharedPointerTester< 0 >* rawPointer = new SharedPointerTester< 0 >(); SharedPointer< SharedPointerTester< 0 > > sp0; SharedPointer< SharedPointerTester< 0 > > sp1( rawPointer ); SharedPointer< SharedPointerTester< 0 > > sp2( sp0 ); sp0 = sp1; CPPUNIT_ASSERT( 2 == sp0.useCount() ); CPPUNIT_ASSERT( 2 == sp1.useCount() ); CPPUNIT_ASSERT_EQUAL( rawPointer, sp0.get() ); CPPUNIT_ASSERT_EQUAL( rawPointer, sp1.get() ); CPPUNIT_ASSERT( 0 == sp2.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Testing assignment that should lead to a destruction. { SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >(); SharedPointerTester< 0 >* rawPointer1 = new SharedPointerTester< 0 >(); CPPUNIT_ASSERT_EQUAL( 2, SharedPointerTester< 0 >::static_counter_ ); SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 ); SharedPointer< SharedPointerTester< 0 > > sp1( rawPointer1 ); sp1 = sp0; CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( 2 == sp0.useCount() ); CPPUNIT_ASSERT( 2 == sp1.useCount() ); CPPUNIT_ASSERT_EQUAL( rawPointer0, sp0.get() ); CPPUNIT_ASSERT_EQUAL( rawPointer0, sp1.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); }
int main() { { std::weak_ptr<A> wp; assert(wp.use_count() == 0); assert(wp.expired() == (wp.use_count() == 0)); } { std::shared_ptr<A> sp0(new A); std::weak_ptr<A> wp(sp0); assert(wp.use_count() == 1); assert(wp.expired() == (wp.use_count() == 0)); sp0.reset(); assert(wp.use_count() == 0); assert(wp.expired() == (wp.use_count() == 0)); } }
int main() { shared_ptr<resource> sp0(new resource(0)); shared_ptr<resource> sp1(new resource(1)); show("sp0 before swap", sp0); show("sp1 before swap", sp1); sp0.swap(sp1); show("sp0 after swap", sp0); show("sp1 after swap", sp1); swap(sp0, sp1); show("sp0 after second swap", sp0); show("sp1 after second swap", sp1); return 0; }
float calVelUpdateStepLen(const FwiParams ¶ms, const float *wlt, const float *dobs, const float *derr, float epsil, const EnquistAbc2d &fmMethod, const ShotPosition &allSrcPos, const ShotPosition &allGeoPos ) { int nt = params.nt; int nz = params.nz; int nx = params.nx; int ng = params.ng; int ns = params.ns; std::vector<float> dcal(ng, 0); /* calculated/synthetic seismic data */ std::vector<float> sp0(nz * nx); /* source wavefield p0 */ std::vector<float> sp1(nz * nx); /* source wavefield p1 */ std::vector<float> sp2(nz * nx); /* source wavefield p2 */ std::vector<float> alpha1(ng, 0); /* numerator of alpha, length=ng */ std::vector<float> alpha2(ng, 0); /* denominator of alpha, length=ng */ for (int is = 0; is < ns; is++) { std::fill(sp0.begin(), sp0.end(), 0); std::fill(sp1.begin(), sp1.end(), 0); ShotPosition currSrcPos = allSrcPos.clip(is); for (int it = 0; it < nt; it++) { fmMethod.addSource(&sp1[0], &wlt[it], currSrcPos); fmMethod.stepForward(&sp0[0], &sp1[0], &sp2[0]); cycleSwap(sp0, sp1, sp2); fmMethod.recordSeis(&dcal[0], &sp0[0], allGeoPos); sum_alpha12(&alpha1[0], &alpha2[0], &dcal[0], &dobs[is * nt * ng + it * ng], &derr[is * ng * nt + it * ng], ng); } } float alpha = cal_alpha(&alpha1[0], &alpha2[0], epsil, ng); return alpha; }
int main() { iset data; spi sp0(new int(0)); spi sp1(new int(1)); spi sp2(new int(2)); spi sp3(sp1); spi sp4(new int(1)); data.insert(sp0); data.insert(sp1); data.insert(sp2); lookup(data, sp1); lookup(data, sp3); lookup(data, sp4); return 0; }
void OpenSteer::SharedPointerTest::testSwap() { Super* rawSuperPointer0 = new Super(); SharedPointer< Super > sp0( rawSuperPointer0 ); Super* rawSuperPointer1 = new Super(); SharedPointer< Super > sp1( rawSuperPointer1 ); CPPUNIT_ASSERT_EQUAL( 2, Super::superCount_ ); sp0.swap( sp1 ); CPPUNIT_ASSERT( rawSuperPointer0 == sp1.get() ); CPPUNIT_ASSERT( rawSuperPointer1 == sp0.get() ); CPPUNIT_ASSERT_EQUAL( 2, Super::superCount_ ); }
void triangle(Vec3i t0, Vec3i t1, Vec3i t2, Vec2i uv0, Vec2i uv1, Vec2i uv2, float intensity, int* zbuf, TGAImage& image) { if (isDegenerated(t0,t1,t2)) return; if (t0.y > t1.y) { std::swap(t0, t1); std::swap(uv0, uv1); } if (t0.y > t2.y) { std::swap(t0, t2); std::swap(uv0, uv2); } if (t1.y > t2.y) { std::swap(t1, t2); std::swap(uv1, uv2); } int* boundbox = getBoundBox(t0, t1, t2); Vec2i vertex(t1.x - t0.x, t1.y - t0.y); Vec2i tmpUv(uv1.x - uv0.x, uv1.y - uv0.y); for (int x = boundbox[0]; x <= boundbox[2]; x++) { for (int y = boundbox[1]; y <= boundbox[3]; y++) { if (insideTriangle(x, y, t0, t1, t2)) { int idx = x + y * width; int z = find_z(x, y, t0, t1, t2); Vec2i P(x, y), v(t0.x, t0.y); Vec2i s01(t1.x - t0.x, t1.y - t0.y), s02(t2.x - t0.x, t2.y - t0.y), sp0(t0.x - P.x, t0.y - P.y); Vec3i tmp1(s01.x, s02.x, sp0.x), tmp2(s01.y, s02.y, sp0.y); Vec3i tmp3 = tmp1 ^ tmp2; Vec3f res(tmp3.x, tmp3.y, tmp3.z); if (res.z != 0) { res = res * (1 / res.z); } else { continue; } Vec2f uvP = uv0 * (1 - res.x - res.y) + uv1 * res.x + uv2 * res.y; if (zbuf[idx] < z) { zbuf[idx] = z; TGAColor color = model->getDiffusive(uvP); image.set(x, y, TGAColor(color.r * intensity , color.g * intensity , color.b * intensity , 255)); } } } } delete[] boundbox; }
void OpenSteer::SharedPointerTest::testReset() { // Reset a shared pointer that manages a 0-pointer. { SharedPointer< SharedPointerTester< 0 > > sp0; sp0.reset(); CPPUNIT_ASSERT( 0 == sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Reset a shared pointer that manages a raw pointer. { SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >(); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 ); sp0.reset(); CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( 0 == sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Reset more than once. { SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >(); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 ); sp0.reset(); CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( 0 == sp0.get() ); sp0.reset(); CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( 0 == sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Reset a shared pointer managing a 0-pointer with a new raw pointer. { SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >(); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); SharedPointer< SharedPointerTester< 0 > > sp0; sp0.reset( rawPointer0 ); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( rawPointer0 == sp0.get() ); sp0.reset(); CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( 0 == sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); // Reset a shared pointer managing a raw pointer with a new raw pointer. { SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >(); SharedPointerTester< 0 >* rawPointer1 = new SharedPointerTester< 0 >(); CPPUNIT_ASSERT_EQUAL( 2, SharedPointerTester< 0 >::static_counter_ ); SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 ); sp0.reset( rawPointer1 ); CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( rawPointer1 == sp0.get() ); sp0.reset(); CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); CPPUNIT_ASSERT( 0 == sp0.get() ); } CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ ); }
float cal_obj_derr_illum_grad(const FwiParams ¶ms, float *derr, /* output */ float *illum, /* output */ float *g1, /* output */ const float *wlt, const float *dobs, const EnquistAbc2d &fmMethod, const ShotPosition &allSrcPos, const ShotPosition &allGeoPos) { int nt = params.nt; int nz = params.nz; int nx = params.nx; int ng = params.ng; int ns = params.ns; std::vector<float> bndr = fmMethod.initBndryVector(nt); std::vector<float> dcal(ng, 0); /* calculated/synthetic seismic data */ std::vector<float> sp0(nz * nx); /* source wavefield p0 */ std::vector<float> sp1(nz * nx); /* source wavefield p1 */ std::vector<float> sp2(nz * nx); /* source wavefield p2 */ std::vector<float> gp0(nz * nx); /* geophone/receiver wavefield p0 */ std::vector<float> gp1(nz * nx); /* geophone/receiver wavefield p1 */ std::vector<float> gp2(nz * nx); /* geophone/receiver wavefield p2 */ std::vector<float> lap(nz * nx); /* laplace of the source wavefield */ for (int is = 0; is < ns; is++) { std::fill(sp0.begin(), sp0.end(), 0); std::fill(sp1.begin(), sp1.end(), 0); ShotPosition curSrcPos = allSrcPos.clip(is); for (int it = 0; it < nt; it++) { fmMethod.addSource(&sp1[0], &wlt[it], curSrcPos); fmMethod.stepForward(&sp0[0], &sp1[0], &sp2[0]); // cycle swap cycleSwap(sp0, sp1, sp2); fmMethod.writeBndry(&bndr[0], &sp0[0], it); fmMethod.recordSeis(&dcal[0], &sp0[0], allGeoPos); cal_residuals(&dcal[0], &dobs[is * nt * ng + it * ng], &derr[is * ng * nt + it * ng], ng); } std::swap(sp0, sp1); std::fill(gp0.begin(), gp0.end(), 0); std::fill(gp1.begin(), gp1.end(), 0); for (int it = nt - 1; it > -1; it--) { /// backward propagate source wavefield fmMethod.readBndry(&bndr[0], &sp1[0], it); fmMethod.stepBackward(illum, &lap[0], &sp0[0], &sp1[0], &sp2[0]); fmMethod.subSource(&sp1[0], &wlt[it], curSrcPos); /// forward propagate geophone wavefield fmMethod.addSource(&gp1[0], &derr[is * ng * nt + it * ng], allGeoPos); fmMethod.stepForward(&gp0[0], &gp1[0], &gp2[0]); /// calculate gradient cal_gradient(&g1[0], &lap[0], &gp1[0], nz, nx); cycleSwap(sp0, sp1, sp2); cycleSwap(gp0, gp1, gp2); } } /// output: derr, g1, illum float obj = cal_objective(&derr[0], ng * nt * ns); return obj; }