HdfDestroyer.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // Created by patrik on 23.08.17.
  3. //
  4. #ifndef GRASP_SEGMENTER_HDFDESTROYER_H
  5. #define GRASP_SEGMENTER_HDFDESTROYER_H
  6. #include <iostream>
  7. #include <boost/shared_ptr.hpp>
  8. #include <hdf/hdf.h>
  9. #include <hdf/mfhdf.h>
  10. #include <vector>
  11. namespace hdf4cpp {
  12. class HdfDestroyerBase {
  13. public:
  14. virtual ~HdfDestroyerBase() {}
  15. protected:
  16. HdfDestroyerBase() {}
  17. };
  18. class HdfFileDestroyer : public HdfDestroyerBase {
  19. public:
  20. HdfFileDestroyer(int32 sId, int32 vId) : sId(sId), vId(vId) {}
  21. ~HdfFileDestroyer() {
  22. SDend(sId);
  23. Vend(vId);
  24. Hclose(vId);
  25. }
  26. private:
  27. int32 sId;
  28. int32 vId;
  29. };
  30. class HdfDatasetItemDestroyer : public HdfDestroyerBase {
  31. public:
  32. HdfDatasetItemDestroyer(int32 id) : id(id) {}
  33. ~HdfDatasetItemDestroyer() {
  34. SDendaccess(id);
  35. }
  36. private:
  37. int32 id;
  38. };
  39. class HdfGroupItemDestroyer : public HdfDestroyerBase {
  40. public:
  41. HdfGroupItemDestroyer(int32 id) : id(id) {}
  42. ~HdfGroupItemDestroyer() {
  43. Vdetach(id);
  44. }
  45. private:
  46. int32 id;
  47. };
  48. class HdfDataItemDestroyer : public HdfDestroyerBase {
  49. public:
  50. HdfDataItemDestroyer(int32 id) : id(id) {}
  51. ~HdfDataItemDestroyer() {
  52. VSdetach(id);
  53. }
  54. private:
  55. int32 id;
  56. };
  57. class HdfDestroyer {
  58. public:
  59. HdfDestroyer(HdfDestroyerBase *destroyerBase) : destroyer(destroyerBase) {}
  60. HdfDestroyer(const HdfDestroyer& destroyerObject) : destroyer(destroyerObject.destroyer) {}
  61. private:
  62. std::shared_ptr<HdfDestroyerBase> destroyer;
  63. };
  64. typedef std::vector<HdfDestroyer> HdfDestroyerChain;
  65. }
  66. #endif //GRASP_SEGMENTER_HDFDESTROYER_H