// Delete node of ID NId from the graph. void TUNGraph::DelNode(const int& NId) { { AssertR(IsNode(NId), TStr::Fmt("NodeId %d does not exist", NId)); TNode& Node = GetNode(NId); for (int e = 0; e < Node.GetDeg(); e++) { const int nbr = Node.GetNbrNId(e); if (nbr == NId) { continue; } TNode& N = GetNode(nbr); const int n = N.NIdV.SearchBin(NId); if (n!= -1) { N.NIdV.Del(n); } } } NodeH.DelKey(NId); }
double TLinear::Interpolate(const uint64& Tm) const { AssertR(CanInterpolate(Tm), "TLinear::Interpolate: Time not in the desired interval!"); const TUInt64FltPr& PrevRec = Buff.GetOldest(); if (Tm == PrevRec.Val1) { return PrevRec.Val2; } const TUInt64FltPr& NextRec = Buff.GetOldest(1); // don't need to check if the times of the previous rec and next rec are equal since if // that is true Tm will be equal to PrevRec.Tm and the correct result will be returned const double Result = PrevRec.Val2 + ((double) (Tm - PrevRec.Val1) / (NextRec.Val1 - PrevRec.Val1)) * (NextRec.Val2 - PrevRec.Val2); EAssertR(!TFlt::IsNan(Result), "TLinear: result of interpolation is NaN!"); return Result; }
// Delete node of ID NId from the bipartite graph. void TBPGraph::DelNode(const int& NId) { AssertR(IsNode(NId), TStr::Fmt("NodeId %d does not exist", NId)); THash<TInt, TNode>& SrcH = IsLNode(NId) ? LeftH : RightH; THash<TInt, TNode>& DstH = IsLNode(NId) ? RightH : LeftH; { TNode& Node = SrcH.GetDat(NId); for (int e = 0; e < Node.GetOutDeg(); e++) { const int nbr = Node.GetOutNId(e); IAssertR(nbr != NId, "Bipartite graph has a loop!"); TNode& N = DstH.GetDat(nbr); const int n = N.NIdV.SearchBin(NId); IAssert(n!= -1); N.NIdV.Del(n); } } SrcH.DelKey(NId); }
PJsonVal TNodeJsUtil::GetObjJson(const v8::Local<v8::Value>& Val, const bool IgnoreFunc) { AssertR(!Val->IsExternal(), "TNodeJsUtil::GetObjJson: Cannot parse v8::External!"); if (Val->IsObject()) { // if we aren't ignoring functions and the object is a function // then throw an exception EAssertR(IgnoreFunc || !Val->IsFunction(), "TNodeJsUtil::GetObjJson: Cannot parse functions!"); // parse the object if (Val->IsFunction()) { return TJsonVal::New(); } else if (Val->IsBooleanObject()) { v8::Local<v8::BooleanObject> BoolObj = v8::Local<v8::BooleanObject>::Cast(Val); return TJsonVal::NewBool(BoolObj->ValueOf()); } else if (Val->IsNumberObject()) { return TJsonVal::NewNum(Val->NumberValue()); } else if (Val->IsStringObject() || Val->IsRegExp() || Val->IsDate()) { return TJsonVal::NewStr(TStr(*v8::String::Utf8Value(Val->ToString()))); } else if (Val->IsArray()) { PJsonVal JsonArr = TJsonVal::NewArr(); v8::Array* Arr = v8::Array::Cast(*Val); for (uint i = 0; i < Arr->Length(); i++) { if (!IgnoreFunc || !Arr->Get(i)->IsFunction()) { JsonArr->AddToArr(GetObjJson(Arr->Get(i), IgnoreFunc)); } } return JsonArr; } else { // general object with fields PJsonVal JsonVal = TJsonVal::NewObj(); v8::Local<v8::Object> Obj = Val->ToObject(); v8::Local<v8::Array> FldNmV = Obj->GetOwnPropertyNames(); for (uint i = 0; i < FldNmV->Length(); i++) { const TStr FldNm(*v8::String::Utf8Value(FldNmV->Get(i)->ToString())); v8::Local<v8::Value> FldVal = Obj->Get(FldNmV->Get(i)); if (!IgnoreFunc || !FldVal->IsFunction()) { JsonVal->AddToObj(FldNm, GetObjJson(FldVal, IgnoreFunc)); } } return JsonVal; } } else { // primitive if (Val->IsUndefined()) { return TJsonVal::New(); } else if (Val->IsNull()) { return TJsonVal::NewNull(); } else if (Val->IsBoolean()) { return TJsonVal::NewBool(Val->BooleanValue()); } else if (Val->IsNumber()) { return TJsonVal::NewNum(Val->NumberValue()); } else if (Val->IsString()) { return TJsonVal::NewStr(TStr(*v8::String::Utf8Value(Val->ToString()))); } else { // TODO check for v8::Symbol throw TExcept::New("TNodeJsUtil::GetObjJson: Unknown v8::Primitive type!"); } } }