Beispiel #1
0
void CRecBinViewer::UndeleteAll ()
{
	for (unsigned int i = 0; i< m_List.size (); i++)
		Undelete (i);
}
Beispiel #2
0
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;
}