int TNEANet::DelAttrDatN(const int& NId, const TStr& attr) { TInt vecType = KeyToIndexTypeN(attr).Val1; if (vecType == IntType) { VecOfIntVecsN[KeyToIndexTypeN.GetDat(attr).Val2][NId] = GetIntAttrDefaultN(attr); } else if (vecType == StrType) { VecOfStrVecsN[KeyToIndexTypeN.GetDat(attr).Val2][NId] = GetStrAttrDefaultN(attr); } else if (vecType == FltType) { VecOfFltVecsN[KeyToIndexTypeN.GetDat(attr).Val2][NId] = GetFltAttrDefaultN(attr); } else { return -1; } return 0; }
int TNEANetMP::AddNode(int NId) { int i; if (NId == -1) { NId = MxNId; MxNId++; } else { IAssertR(!IsNode(NId), TStr::Fmt("NodeId %d already exists", NId)); MxNId = TMath::Mx(NId+1, MxNId()); } // update attribute columns NodeH.AddDat(NId, TNode(NId)); for (i = 0; i < VecOfIntVecsN.Len(); i++) { TVec<TInt>& IntVec = VecOfIntVecsN[i]; IntVec.Ins(NodeH.GetKeyId(NId), TInt::Mn); } TVec<TStr> DefIntVec = TVec<TStr>(); IntDefaultsN.GetKeyV(DefIntVec); for (i = 0; i < DefIntVec.Len(); i++) { TStr attr = DefIntVec[i]; TVec<TInt>& IntVec = VecOfIntVecsN[KeyToIndexTypeN.GetDat(DefIntVec[i]).Val2]; IntVec[NodeH.GetKeyId(NId)] = GetIntAttrDefaultN(attr); } for (i = 0; i < VecOfStrVecsN.Len(); i++) { TVec<TStr>& StrVec = VecOfStrVecsN[i]; StrVec.Ins(NodeH.GetKeyId(NId), TStr::GetNullStr()); } TVec<TStr> DefStrVec = TVec<TStr>(); IntDefaultsN.GetKeyV(DefStrVec); for (i = 0; i < DefStrVec.Len(); i++) { TStr attr = DefStrVec[i]; TVec<TStr>& StrVec = VecOfStrVecsN[KeyToIndexTypeN.GetDat(DefStrVec[i]).Val2]; StrVec[NodeH.GetKeyId(NId)] = GetStrAttrDefaultN(attr); } for (i = 0; i < VecOfFltVecsN.Len(); i++) { TVec<TFlt>& FltVec = VecOfFltVecsN[i]; FltVec.Ins(NodeH.GetKeyId(NId), TFlt::Mn); } TVec<TStr> DefFltVec = TVec<TStr>(); FltDefaultsN.GetKeyV(DefFltVec); for (i = 0; i < DefFltVec.Len(); i++) { TStr attr = DefFltVec[i]; TVec<TFlt>& FltVec = VecOfFltVecsN[KeyToIndexTypeN.GetDat(DefFltVec[i]).Val2]; FltVec[NodeH.GetKeyId(NId)] = GetFltAttrDefaultN(attr); } return NId; }
int TNEANet::AddFltAttrDatN(const int& NId, const TFlt& value, const TStr& attr) { int i; TInt CurrLen; if (!IsNode(NId)) { // AddNode(NId); return -1; } if (KeyToIndexTypeN.IsKey(attr)) { TVec<TFlt>& NewVec = VecOfFltVecsN[KeyToIndexTypeN.GetDat(attr).Val2]; NewVec[NodeH.GetKeyId(NId)] = value; } else { CurrLen = VecOfFltVecsN.Len(); KeyToIndexTypeN.AddDat(attr, TIntPr(FltType, CurrLen)); TVec<TFlt> NewVec = TVec<TFlt>(); for (i = 0; i < MxNId; i++) { NewVec.Ins(i, GetFltAttrDefaultN(attr)); } NewVec[NodeH.GetKeyId(NId)] = value; VecOfFltVecsN.Add(NewVec); } return 0; }
bool TNEANet::NodeAttrIsFltDeleted(const int& NId, const TStrIntPrH::TIter& NodeHI) const { return (NodeHI.GetDat().Val1 == FltType && GetFltAttrDefaultN(NodeHI.GetKey()) == this->VecOfFltVecsN.GetVal( this->KeyToIndexTypeN.GetDat(NodeHI.GetKey()).Val2).GetVal(NId)); }