heap.hpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #ifndef __HEAP_HPP__
  2. #define __HEAP_HPP__
  3. #include "types.hpp"
  4. #include "mpcio.hpp"
  5. #include "coroutine.hpp"
  6. #include "options.hpp"
  7. #include "mpcops.hpp"
  8. class MinHeap {
  9. private: Duoram < RegAS > oram;
  10. Duoram < RegBS > oram_insert;
  11. size_t MAX_SIZE;
  12. public: size_t num_items = 0;
  13. MinHeap(int num_players, size_t size) : oram(num_players, size), oram_insert(num_players, size), MAX_SIZE(size){
  14. };
  15. RegAS extract_min(MPCIO &mpcio, MPCTIO tio, yield_t & yield, int is_optimized);
  16. void initialize(MPCTIO tio, yield_t & yield);
  17. void initialize_heap(MPCTIO tio, yield_t & yield);
  18. int insert(MPCTIO tio, yield_t & yield, RegAS val);
  19. int insert_optimized(MPCTIO tio, yield_t & yield, RegAS val);
  20. int verify_heap_property(MPCTIO tio, yield_t & yield);
  21. RegXS restore_heap_property(MPCIO &mpcio, MPCTIO tio, yield_t & yield, RegXS index);
  22. auto restore_heap_property_optimized(MPCTIO tio, yield_t & yield, RegXS index, size_t depth, size_t layer, typename Duoram<RegAS>::template OblivIndex<RegXS,3> oidx);
  23. auto restore_heap_property_at_root(MPCTIO tio, yield_t & yield, size_t index);
  24. void print_heap(MPCTIO tio, yield_t & yield);
  25. void heapify(MPCIO &mpcio, MPCTIO tio, yield_t & yield);
  26. void heapify_at_level(MPCIO &mpcio, MPCTIO tio, yield_t & yield, size_t index);
  27. };
  28. void Heap(MPCIO &mpcio,
  29. const PRACOptions &opts, char **args);
  30. #endif