heap.hpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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:
  10. Duoram < RegAS > oram;
  11. size_t MAX_SIZE;
  12. size_t num_items;
  13. public:
  14. MinHeap(int player_num, size_t size) : oram(player_num, size){
  15. };
  16. void set_num_items (size_t n) {num_items = n;}
  17. RegAS extract_min(MPCIO &mpcio, MPCTIO tio, yield_t & yield, int is_optimized);
  18. void init(MPCTIO tio, yield_t & yield);
  19. void init(MPCTIO tio, yield_t & yield, size_t which_init);
  20. int insert(MPCTIO tio, yield_t & yield, RegAS val);
  21. void insert_optimized(MPCTIO tio, yield_t & yield, RegAS val);
  22. #ifdef HEAP_DEBUG
  23. void verify_heap_property(MPCTIO tio, yield_t & yield);
  24. #endif
  25. RegXS restore_heap_property(MPCIO &mpcio, MPCTIO tio, yield_t & yield, RegXS index);
  26. std::pair<RegXS, RegBS> 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);
  27. std::pair<RegXS, RegBS> restore_heap_property_at_explicit_index(MPCTIO tio, yield_t & yield, size_t index);
  28. void print_heap(MPCTIO tio, yield_t & yield);
  29. };
  30. void Heap(MPCIO &mpcio,
  31. const PRACOptions &opts, char **args, int argc);
  32. #endif