예제 #1
0
APCHandle* ConcurrentTableSharedStore::unserialize(const String& key,
                                                   StoreValue* sval) {
  auto const sAddr = sval->data.right();
  assert(sAddr != nullptr);

  try {
    auto const sType =
      apcExtension::EnableApcSerialize
        ? VariableUnserializer::Type::APCSerialize
        : VariableUnserializer::Type::Serialize;

    VariableUnserializer vu(sAddr, sval->getSerializedSize(), sType);
    Variant v = vu.unserialize();
    auto const pair = APCHandle::Create(v, sval->isSerializedObj(),
      APCHandleLevel::Outer, false);
    sval->data = pair.handle;
    sval->dataSize = pair.size;
    APCStats::getAPCStats().addAPCValue(pair.handle, pair.size, true);
    return pair.handle;
  } catch (ResourceExceededException&) {
    throw;
  } catch (Exception& e) {
    raise_notice("APC Primed fetch failed: key %s (%s).",
                 key.c_str(), e.getMessage().c_str());
    return nullptr;
  }
}
예제 #2
0
static Variant unserialize_with_no_notice(CStrRef str) {
  istringstream in(std::string(str.data(), str.size()));
  VariableUnserializer vu(in, VariableUnserializer::Serialize);
  Variant v;
  try {
    v = vu.unserialize();
  } catch (Exception &e) {}
  return v;
}
예제 #3
0
static Variant unserialize_with_no_notice(CStrRef str) {
    VariableUnserializer vu(str.data(), str.data() + str.size(),
                            VariableUnserializer::Type::Serialize, true);
    Variant v;
    try {
        v = vu.unserialize();
    } catch (Exception &e) {
        Logger::Error("unserialize(): %s", e.getMessage().c_str());
    }
    return v;
}
예제 #4
0
static Variant unserialize_with_no_notice(const String& str) {
  VariableUnserializer vu(str.data(), str.size(),
      VariableUnserializer::Type::Serialize, true);
  Variant v;
  try {
    v = vu.unserialize();
  } catch (ResourceExceededException &) {
    throw;
  } catch (Exception &e) {
    Logger::Error("unserialize(): %s", e.getMessage().c_str());
  }
  return v;
}
예제 #5
0
TV Cylinder::surface(const TV& X) const {
  const TV v = X - base.x0;
  const T h = dot(v,base.n);
  // Generate an orthogonal basis for n^perp and use it to compute dr
  const TV u0 = base.n.unit_orthogonal_vector(),
           u1 = cross(base.n,u0);
  Vector<T,2> vu(dot(v,u0),dot(v,u1));
  const T r = normalize(vu);
  const TV dr = vu.x*u0+vu.y*u1;
  // Case analysis
  const T rp = r-radius,
          hp = max(-h,h-height);
  return hp>0 && rp>0 ? base.x0+clamp(h,(T)0,height)*base.n+radius*dr // outside
       : hp>rp ? X+((2*h<=height?0:height)-h)*base.n // close to end caps
       : X+(radius-r)*dr; // close to infinite cylinder
}
예제 #6
0
파일: lininteg.cpp 프로젝트: lyq105/mfem
void BoundaryFlowIntegrator::AssembleRHSElementVect(
    const FiniteElement &el, FaceElementTransformations &Tr, Vector &elvect)
{
    int dim, ndof, order;
    double un, w, vu_data[3], nor_data[3];

    dim  = el.GetDim();
    ndof = el.GetDof();
    Vector vu(vu_data, dim), nor(nor_data, dim);

    const IntegrationRule *ir = IntRule;
    if (ir == NULL)
    {
        // Assuming order(u)==order(mesh)
        order = Tr.Elem1->OrderW() + 2*el.GetOrder();
        if (el.Space() == FunctionSpace::Pk)
            order++;
        ir = &IntRules.Get(Tr.FaceGeom, order);
    }

    shape.SetSize(ndof);
    elvect.SetSize(ndof);
    elvect = 0.0;

    for (int p = 0; p < ir->GetNPoints(); p++)
    {
        const IntegrationPoint &ip = ir->IntPoint(p);
        IntegrationPoint eip;
        Tr.Loc1.Transform(ip, eip);
        el.CalcShape(eip, shape);

        Tr.Face->SetIntPoint(&ip);

        u->Eval(vu, *Tr.Elem1, eip);

        if (dim == 1)
            nor(0) = 2*eip.x - 1.0;
        else
            CalcOrtho(Tr.Face->Jacobian(), nor);

        un = vu * nor;
        w = 0.5*alpha*un - beta*fabs(un);
        w *= ip.weight*f->Eval(*Tr.Elem1, eip);
        elvect.Add(w, shape);
    }
}
static inline int unserializeImpl(CStrRef sdata, Variant& data) {
  if (sdata.same(s_hit_limit)) {
    return DebuggerWireHelpers::HitLimit;
  }
  if (sdata.same(s_unknown_exp)) {
    return DebuggerWireHelpers::UnknownError;
  }
  VariableUnserializer vu(sdata.data(), sdata.size(),
                          VariableUnserializer::Serialize, true);
  try {
    data = vu.unserialize();
  } catch (Exception &e) {
    data = null_variant;
    return DebuggerWireHelpers::UnknownError;
  }
  return DebuggerWireHelpers::NoError;
}
예제 #8
0
APCHandle* ConcurrentTableSharedStore::unserialize(const String& key,
                                                   const StoreValue* sval) {
  try {
    VariableUnserializer::Type sType =
      apcExtension::EnableApcSerialize ?
      VariableUnserializer::Type::APCSerialize :
      VariableUnserializer::Type::Serialize;

    VariableUnserializer vu(sval->sAddr, sval->getSerializedSize(), sType);
    Variant v;
    v.unserialize(&vu);
    sval->var = APCHandle::Create(v, sval->isSerializedObj());
    return sval->var;
  } catch (Exception &e) {
    raise_notice("APC Primed fetch failed: key %s (%s).",
                 key.c_str(), e.getMessage().c_str());
    return nullptr;
  }
}
예제 #9
0
Variant unserialize_ex(const char* str, int len,
                       VariableUnserializer::Type type,
                       const Array& class_whitelist /* = null_array */) {
  if (str == nullptr || len <= 0) {
    return false;
  }

  VariableUnserializer vu(str, len, type, true, class_whitelist);
  Variant v;
  try {
    v = vu.unserialize();
  } catch (FatalErrorException &e) {
    throw;
  } catch (Exception &e) {
    raise_notice("Unable to unserialize: [%s]. %s.", str,
                 e.getMessage().c_str());
    return false;
  }
  return v;
}
예제 #10
0
SharedVariant* ConcurrentTableSharedStore::unserialize(CStrRef key,
                                                       const StoreValue* sval) {
  try {
    VariableUnserializer::Type sType =
      RuntimeOption::EnableApcSerialize ?
      VariableUnserializer::APCSerialize :
      VariableUnserializer::Serialize;

    VariableUnserializer vu(sval->sAddr, sval->getSerializedSize(), sType);
    Variant v;
    v.unserialize(&vu);
    sval->var = SharedVariant::Create(v, sval->isSerializedObj());
    stats_on_add(key.get(), sval, 0, true, true); // delayed prime
    return sval->var;
  } catch (Exception &e) {
    raise_notice("APC Primed fetch failed: key %s (%s).",
                 key.c_str(), e.getMessage().c_str());
    return NULL;
  }
}
예제 #11
0
TV Cylinder::normal(const TV& X) const {
  const TV v = X - base.x0;
  const T h0 = -dot(v,base.n),
          h1 = -h0-height,
          h = max(h0,h1),
          sh = h1>h0?1:-1;
  // Generate an orthogonal basis for n^perp and use it to compute dr
  const TV u0 = base.n.unit_orthogonal_vector(),
           u1 = cross(base.n,u0);
  Vector<T,2> vu(dot(v,u0),dot(v,u1));
  const T r = normalize(vu);
  const TV dr = vu.x*u0+vu.y*u1;
  // Case analysis
  const T rp = r-radius;
  if (rp>0 && h>0) { // Outside
    T mag = magnitude(vec(rp,h));
    return rp/mag*dr+sh*h/mag*base.n;
  } else if (rp > h) // Closest to infinite cylinder
    return dr;
  return sh*base.n; // Closest to an end cap
}
예제 #12
0
TEST(SharedValueTest, ctorInt)
{
    int i = -324523;
    unsigned u = 0x334234u;
    char c = -22;
    short s = 289;
    unsigned char uc = 244;
    unsigned short us = 3467;
    long long ll = -20398574395872907ll;
    unsigned long long ull = 985734209239847656ull;

    EXPECT_NO_THROW(Value v(i));
    EXPECT_NO_THROW(Value v(u));
    EXPECT_NO_THROW(Value v(c));
    EXPECT_NO_THROW(Value v(s));
    EXPECT_NO_THROW(Value v(uc));
    EXPECT_NO_THROW(Value v(us));
    EXPECT_NO_THROW(Value v(ll));
    EXPECT_NO_THROW(Value v(ull));

    Value vi(i);
    EXPECT_EQ(vi.as<int>(), i);
    Value vu(u);
    EXPECT_EQ(vu.as<unsigned>(), u);
    Value vc(c);
    EXPECT_EQ(vc.as<char>(), c);
    Value vs(s);
    EXPECT_EQ(vs.as<short>(), s);
    Value vuc(uc);
    EXPECT_EQ(vuc.as<unsigned char>(), uc);
    Value vus(us);
    EXPECT_EQ(vus.as<unsigned short>(), us);
    Value vll(ll);
    EXPECT_NE(vll.as<long long>(), ll); // 32 bit storage overfflow
    EXPECT_EQ(vll.as<long long>(), static_cast<long long>(int(ll)));
    Value vull(ull);
    EXPECT_NE(vull.as<unsigned long long>(), ull); // 32 bit storage overfflow
    EXPECT_EQ(vull.as<unsigned long long>(), static_cast<unsigned long long>(int(ull)));

    Value vllNoOverflow(-42424ll); // no 32 bit storage overflow
    EXPECT_EQ(vllNoOverflow.as<long long>(), -42424ll);
    Value vullNoOverflow(0x43424242ull); // no 32 bit storage overflow
    EXPECT_EQ(vullNoOverflow.as<unsigned long long>(), 0x43424242ull);

    EXPECT_EQ(vi.type(), typeid(int));
    EXPECT_EQ(vu.type(), typeid(int));
    EXPECT_EQ(vc.type(), typeid(int));
    EXPECT_EQ(vs.type(), typeid(int));
    EXPECT_EQ(vuc.type(), typeid(int));
    EXPECT_EQ(vus.type(), typeid(int));
    EXPECT_EQ(vll.type(), typeid(int));
    EXPECT_EQ(vull.type(), typeid(int));

    // copy
    EXPECT_NO_THROW(Value v(vi));
    EXPECT_NO_THROW(Value v(vu));
    EXPECT_NO_THROW(Value v(vc));
    EXPECT_NO_THROW(Value v(vs));
    EXPECT_NO_THROW(Value v(vuc));
    EXPECT_NO_THROW(Value v(vus));
    EXPECT_NO_THROW(Value v(vll));
    EXPECT_NO_THROW(Value v(vull));

    Value vi2(vi);
    EXPECT_EQ(vi2.as<int>(), i);
    Value vu2(vu);
    EXPECT_EQ(vu2.as<unsigned>(), u);
    Value vc2(vc);
    EXPECT_EQ(vc2.as<char>(), c);
    Value vs2(vs);
    EXPECT_EQ(vs2.as<short>(), s);
    Value vuc2(vuc);
    EXPECT_EQ(vuc2.as<unsigned char>(), uc);
    Value vus2(vus);
    EXPECT_EQ(vus2.as<unsigned short>(), us);
    Value vll2(vll);
    EXPECT_NE(vll.as<long long>(), ll);
    EXPECT_EQ(vll2.as<long long>(), static_cast<long long>(int(vll)));
    Value vull2(vull);
    EXPECT_NE(vull.as<unsigned long long>(), ull);
    EXPECT_EQ(vull2.as<unsigned long long>(), static_cast<unsigned long long>(int(vull)));

    EXPECT_EQ(vi2.type(), typeid(int));
    EXPECT_EQ(vu2.type(), typeid(int));
    EXPECT_EQ(vc2.type(), typeid(int));
    EXPECT_EQ(vs2.type(), typeid(int));
    EXPECT_EQ(vuc2.type(), typeid(int));
    EXPECT_EQ(vus2.type(), typeid(int));
    EXPECT_EQ(vll2.type(), typeid(int));
    EXPECT_EQ(vull2.type(), typeid(int));
}
예제 #13
0
ClassInfoUnique::ClassInfoUnique(const char **&p) {
  m_attribute = (Attribute)(int64)(*p++);
  m_name = *p++;
  m_parent = *p++;

  while (*p) {
    const char *name = *p++;
    ASSERT(m_interfaces.find(name) == m_interfaces.end());
    m_interfaces.insert(name);
    m_interfacesVec.push_back(name);
  }
  p++;

  while (*p) {
    MethodInfo *method = new MethodInfo();
    method->attribute = (Attribute)(int64)(*p++);
    method->name = *p++;
    method->invokeFn = (Variant (**)(const Array& params))*p++;
    method->invokeFailedFn = (Variant (*)(const Array& params))*p++;

    while (*p) {
      ParameterInfo *parameter = new ParameterInfo();
      parameter->attribute = (Attribute)(int64)(*p++);
      parameter->name = *p++;
      parameter->type = *p++;
      ASSERT(Util::toLower(parameter->type) == parameter->type);
      parameter->value = *p++;

      method->parameters.push_back(parameter);
    }
    p++;

    while (*p) {
      ConstantInfo *staticVariable = new ConstantInfo();
      staticVariable->name = *p++;
      staticVariable->valueLen = (int64)(*p++);
      staticVariable->valueText = *p++;
      istringstream in(std::string(staticVariable->valueText,
                                   staticVariable->valueLen));
      VariableUnserializer vu(in);
      try {
        staticVariable->value = vu.unserialize();
      } catch (Exception &e) {
        ASSERT(false);
      }
      method->staticVariables.push_back(staticVariable);
    }
    p++;

    ASSERT(m_methods.find(method->name) == m_methods.end());
    m_methods[method->name] = method;
    m_methodsVec.push_back(method);
  }
  p++;

  while (*p) {
    PropertyInfo *property = new PropertyInfo();
    property->attribute = (Attribute)(int64)(*p++);
    property->name = *p++;
    property->owner = this;
    ASSERT(m_properties.find(property->name) == m_properties.end());
    m_properties[property->name] = property;
    m_propertiesVec.push_back(property);
  }
  p++;

  while (*p) {
    ConstantInfo *constant = new ConstantInfo();
    constant->name = *p++;
    constant->valueLen = (int64)(*p++);
    constant->valueText = *p++;

    if (constant->valueText) {
      istringstream in(std::string(constant->valueText, constant->valueLen));
      VariableUnserializer vu(in);
      try {
        constant->value = vu.unserialize();
      } catch (Exception &e) {
        ASSERT(false);
      }
    }

    ASSERT(m_constants.find(constant->name) == m_constants.end());
    m_constants[constant->name] = constant;
  }
  p++;
}