// Для сравнения в том, что имена совпадают public bool Equal(TMetaBase _p1) { if (pTestElem == null) return (_p1.sName.Equals(sTestName)); else return ((_p1.sName.Equals(pTestElem.sName)) && (pTestElem != _p1)); }
// Добавление элемента c проверкой наличия уже такого с такимже именем public HRESULT AddAndCheckElem(TMetaBase _pElem) { pTestElem = _pElem; if (pElems.Find(pdEqual) != null) return HRESULT.E_PAIR_NAME; pTestElem = null; pElems.Add(_pElem); return HRESULT.S_OK; }
private string sTestName; // Имя для теста - для извлечения (актуально, когда pTestElem == null) #endregion Fields #region Constructors public TAssembleHelper() : base() { pElems = new List<TMetaBase>(); pTestElem = null; sTestName = ""; pdEqual = new Predicate<TMetaBase>(Equal); pdCompare = new Comparison<TMetaBase>(Compare); }
// Подготовка перед связыванием public HRESULT Prepare() { pElems.Sort(pdCompare); foreach(TMetaBase p1 in pElems) { pTestElem = p1; if (pElems.Find(pdEqual) != null) return HRESULT.E_PAIR_NAME; pTestElem = null; } return HRESULT.S_OK; }
// Добавить в конец элемент public HRESULT AddChild(TMetaBase _pTMetaBase) { if (_pTMetaBase == null) return HRESULT.E_NULL_PARAMS; fpChilds.Add(_pTMetaBase); return HRESULT.S_OK; }
// Добавить элемент на позицию _iIndex public HRESULT InsertChild(TMetaBase _pTMetaBase, int _iIndex) { if ((fpChilds.Count > _iIndex) && (_iIndex >= 0)) { fpChilds.Insert(_iIndex, _pTMetaBase); return HRESULT.S_OK; } else return HRESULT.E_OUT_OF_LIST; }
// Удалить дочерний элемент по самому элемненту public HRESULT DeleteChild(TMetaBase _pBase) { if(fpChilds.Remove(_pBase)) return HRESULT.S_OK; else return HRESULT.E_NO_IN_LIST; }
// Выдача элемента по имени public TMetaBase getElemByName(string _sName) { sTestName = _sName; pTestElem = null; return pElems.Find(pdEqual); }
// Для делегата сравнения - сортировка public int Compare(TMetaBase _p1, TMetaBase _p2) { return _p1.sName.CompareTo(_p2.sName); }
// Добавление элемента public HRESULT AddElem(TMetaBase _pElem) { pElems.Add(_pElem); return HRESULT.S_OK; }