void CRecBinViewer::UndeleteAll () { for (unsigned int i = 0; i< m_List.size (); i++) Undelete (i); }
template <class T> int DBItemList<T>::Add(long lID, T pItem, int iOp) { STACKTRACE int iItemNum = 0; bool bAdd = false; DBItem<T> *pAdd = NULL, *pChange = NULL; // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add entry %ld %p %d\n", lID, pItem, iOp); } pAdd = new DBItem<T>; pAdd->m_lID = lID; pAdd->m_pData = pItem; pAdd->m_iOp = iOp; bAdd = ItemList<DBItem<T> *>::Add(pAdd, &iItemNum); if(bAdd == false && iItemNum == -1) { // Failed to add item if(m_bDataDelete == true) { delete pAdd->m_pData; } delete pAdd; // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add exit ADD_NO, failed\n"); } return ADD_NO; } else if(bAdd == true) { // Item added if(m_bWrite == true && pAdd->m_iOp > 0 && pAdd->m_iOp != OP_NONE && ItemWrite(pAdd) == true) { // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add add written, OP_NONE\n"); } pAdd->m_iOp = OP_NONE; } else if(pAdd->m_iOp != OP_NONE) { // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add add changed\n"); } m_bChanged = true; } // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add exit ADD_YES, add\n"); } return ADD_YES; } // Item not added (already present) delete pAdd; // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add not added (item %d)\n", iItemNum); } pChange = this->Item(iItemNum); if(Op(pChange) == OP_DELETE) { Undelete(pChange); if(ItemCompare(pChange->m_pData, pItem) == true) { // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add undelete same data\n"); } if(m_bDataDelete == true) { delete pItem; } // pChange->m_iOp = OP_NONE; } else { // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add undelete different data\n"); } if(m_bDataDelete == true) { delete pChange->m_pData; } pChange->m_pData = pItem; // pChange->m_iOp = OP_UPDATE; m_bChanged = true; } // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add exit ADD_UNDELETE\n"); } return ADD_UNDELETE; } else if(ItemCompare(pChange->m_pData, pItem) == false) { // if(Debug() == true) { // debug(DEBUGLEVEL_DEBUG, "DBItemList::Add change OP_UPDATE\n"); } if(m_bDataDelete == true) { delete pChange->m_pData; } pChange->m_pData = pItem; if(m_bWrite == true && pChange->m_iOp > 0 && pChange->m_iOp != OP_NONE && ItemWrite(pChange) == true) { // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add change written, OP_NONE\n"); } pChange->m_iOp = OP_NONE; } else { if(Op(pChange) == OP_NONE) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add change change OP_UPDATE\n"); pChange->m_iOp = OP_UPDATE; } m_bChanged = true; } // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add exit ADD_CHANGE\n"); } return ADD_CHANGE; } // if(Debug() == true) { debug(DEBUGLEVEL_DEBUG, "DBItemList::Add exit ADD_NO\n"); } return ADD_NO; }