Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

SmartSegment.h
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 };