00001 // Copyright (c) 1998-2014 by Tech Soft 3D, Inc. 00002 // 00003 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., 00004 // and considered a trade secret as defined under civil and criminal statutes. 00005 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of 00006 // unauthorized use or misappropriation of its trade secrets. Use of this information 00007 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under 00008 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use. 00009 00010 #pragma once 00011 00012 #include <hc.h> 00013 00014 #include <utility> 00015 00016 class SmartSegment 00017 { 00018 public: 00019 SmartSegment(HC_KEY key = HC_ERROR_KEY) : m_key(key) { } 00020 00021 void Open(HC_KEY key) 00022 { 00023 if(key != HC_ERROR_KEY) { 00024 HC_Open_Segment_By_Key(key); 00025 } 00026 00027 m_key = key; 00028 } 00029 00030 ~SmartSegment() { Release(); } 00031 00032 HC_KEY Get() { return m_key; } 00033 00034 void Swap(SmartSegment& other) { std::swap(m_key, other.m_key); } 00035 00036 void Release() 00037 { 00038 if(m_key != HC_ERROR_KEY) { 00039 HC_Close_Segment(); 00040 m_key = HC_ERROR_KEY; 00041 } 00042 } 00043 00044 private: 00045 SmartSegment(const SmartSegment&); 00046 SmartSegment& operator=(const SmartSegment&); 00047 00048 private: 00049 HC_KEY m_key; 00050 };