示例#1
0
Iu32vec4 mandel_4(F32vec4 &c_re4, F32vec4 &c_im4, int max_iterations) {
  F32vec4  z_re4 = c_re4;
  F32vec4  z_im4 = c_im4;
  F32vec4  four4(4.0f);
  F32vec4  two4(2.0f);
  Iu32vec4 count4(0,0,0,0);
  Iu32vec4 one4(1,1,1,1);

  int i;

  for (i = 0; i < max_iterations; ++i) {
    F32vec4  z_re24 = z_re4 * z_re4;
    F32vec4  z_im24 = z_im4 * z_im4;
    F32vec4  mf4 = cmplt(z_re24 + z_im24, four4);
    Iu32vec4 mi4 (_mm_castps_si128((__m128)mf4));
    if (is_zero (mi4)) {
      break;
    }
    F32vec4 new_re4 = z_re24 - z_im24;
    F32vec4 new_im4 = two4 * z_re4 * z_im4;
    z_re4 = c_re4 + new_re4;
    z_im4 = c_im4 + new_im4;
    count4 = count4 + (mi4 & one4);
  }
  return count4;
}
示例#2
0
TEST(Pointer, SPtr)
{
    static int count = 0;

    struct counter {
        counter()
        {
            ++count;
        }

        ~counter()
        {
            --count;
        }

        void nop() {}
    };

    struct counter_inherit
        : counter
    {};

    {
        util::sptr<counter> count0(new counter);
        ASSERT_TRUE(count0.not_nul());
        ASSERT_TRUE((*count0).not_nul());
        ASSERT_EQ(1, count);
        util::sref<counter> refcount0 = *count0;
        util::sptr<counter> count1(std::move(count0));
        ASSERT_EQ(1, count);
        util::sref<counter> refcount1 = *count1;
        ASSERT_EQ(refcount0.id().str(), refcount1.id().str());
        ASSERT_EQ(refcount0.id().str(), count1.id().str());
        ASSERT_TRUE(count0.nul());
        ASSERT_TRUE((*count0).nul());

        util::sptr<counter_inherit> count2(new counter_inherit);
        count1 = std::move(count2);
        ASSERT_EQ(1, count);

        util::sptr<counter_inherit> count3(new counter_inherit);
        ASSERT_EQ(2, count);
        util::sptr<counter> count4(std::move(count3));
        count4->nop();
    }
    ASSERT_EQ(0, count);
}