HdfDestroyer.h 1.5 KB

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