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::AddStrAttrDatN(const int& NId, const TStr& value, const TStr& attr) { int i; TInt CurrLen; if (!IsNode(NId)) { // AddNode(NId); return -1; } if (KeyToIndexTypeN.IsKey(attr)) { TVec<TStr>& NewVec = VecOfStrVecsN[KeyToIndexTypeN.GetDat(attr).Val2]; NewVec[NodeH.GetKeyId(NId)] = value; } else { CurrLen = VecOfStrVecsN.Len(); KeyToIndexTypeN.AddDat(attr, TIntPr(StrType, CurrLen)); TVec<TStr> NewVec = TVec<TStr>(); for (i = 0; i < MxNId; i++) { NewVec.Ins(i, GetStrAttrDefaultN(attr)); } NewVec[NodeH.GetKeyId(NId)] = value; VecOfStrVecsN.Add(NewVec); } return 0; }
bool TNEANet::NodeAttrIsStrDeleted(const int& NId, const TStrIntPrH::TIter& NodeHI) const { return (NodeHI.GetDat().Val1 == StrType && GetStrAttrDefaultN(NodeHI.GetKey()) == this->VecOfStrVecsN.GetVal( this->KeyToIndexTypeN.GetDat(NodeHI.GetKey()).Val2).GetVal(NId)); }