UpdateProduce.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // UpdateProduce.cpp
  2. #include "StdAfx.h"
  3. #include "UpdateProduce.h"
  4. using namespace NUpdateArchive;
  5. static const char *kUpdateActionSetCollision =
  6. "Internal collision in update action set";
  7. void UpdateProduce(
  8. const CObjectVector<CUpdatePair> &updatePairs,
  9. const NUpdateArchive::CActionSet &actionSet,
  10. CObjectVector<CUpdatePair2> &operationChain)
  11. {
  12. for(int i = 0; i < updatePairs.Size(); i++)
  13. {
  14. // CUpdateArchiveRange aRange;
  15. const CUpdatePair &pair = updatePairs[i];
  16. CUpdatePair2 pair2;
  17. pair2.IsAnti = false;
  18. pair2.ArchiveItemIndex = pair.ArchiveItemIndex;
  19. pair2.DirItemIndex = pair.DirItemIndex;
  20. pair2.ExistInArchive = (pair.State != NPairState::kOnlyOnDisk);
  21. pair2.ExistOnDisk = (pair.State != NPairState::kOnlyInArchive && pair.State != NPairState::kNotMasked);
  22. switch(actionSet.StateActions[pair.State])
  23. {
  24. case NPairAction::kIgnore:
  25. /*
  26. if (pair.State != NPairState::kOnlyOnDisk)
  27. IgnoreArchiveItem(m_ArchiveItems[pair.ArchiveItemIndex]);
  28. // cout << "deleting";
  29. */
  30. break;
  31. case NPairAction::kCopy:
  32. {
  33. if (pair.State == NPairState::kOnlyOnDisk)
  34. throw kUpdateActionSetCollision;
  35. pair2.NewData = pair2.NewProperties = false;
  36. operationChain.Add(pair2);
  37. break;
  38. }
  39. case NPairAction::kCompress:
  40. {
  41. if (pair.State == NPairState::kOnlyInArchive ||
  42. pair.State == NPairState::kNotMasked)
  43. throw kUpdateActionSetCollision;
  44. pair2.NewData = pair2.NewProperties = true;
  45. operationChain.Add(pair2);
  46. break;
  47. }
  48. case NPairAction::kCompressAsAnti:
  49. {
  50. pair2.IsAnti = true;
  51. pair2.NewData = pair2.NewProperties = true;
  52. operationChain.Add(pair2);
  53. break;
  54. }
  55. }
  56. }
  57. }