Changeset 1139:0900cfe4a84d in lemon-main
- Timestamp:
- 05/06/15 16:01:26 (10 years ago)
- Branch:
- default
- Children:
- 1140:f8ec64f78b5f, 1147:138714057145
- Phase:
- public
- Location:
- lemon
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/cplex.cc
r1092 r1139 38 38 } 39 39 40 void CplexEnv::incCnt() 41 { 42 _cnt_lock->lock(); 43 ++(*_cnt); 44 _cnt_lock->unlock(); 45 } 46 47 void CplexEnv::decCnt() 48 { 49 _cnt_lock->lock(); 50 --(*_cnt); 51 if (*_cnt == 0) { 52 delete _cnt; 53 _cnt_lock->unlock(); 54 delete _cnt_lock; 55 CPXcloseCPLEX(&_env); 56 } 57 else _cnt_lock->unlock(); 58 } 59 40 60 CplexEnv::CplexEnv() { 41 61 int status; 62 _env = CPXopenCPLEX(&status); 63 if (_env == 0) 64 throw LicenseError(status); 42 65 _cnt = new int; 43 66 (*_cnt) = 1; 44 _env = CPXopenCPLEX(&status); 45 if (_env == 0) { 46 delete _cnt; 47 _cnt = 0; 48 throw LicenseError(status); 49 } 67 _cnt_lock = new bits::Lock; 50 68 } 51 69 … … 53 71 _env = other._env; 54 72 _cnt = other._cnt; 55 ++(*_cnt); 73 _cnt_lock = other._cnt_lock; 74 incCnt(); 56 75 } 57 76 58 77 CplexEnv& CplexEnv::operator=(const CplexEnv& other) { 78 decCnt(); 59 79 _env = other._env; 60 80 _cnt = other._cnt; 61 ++(*_cnt); 81 _cnt_lock = other._cnt_lock; 82 incCnt(); 62 83 return *this; 63 84 } 64 85 65 86 CplexEnv::~CplexEnv() { 66 --(*_cnt); 67 if (*_cnt == 0) { 68 delete _cnt; 69 CPXcloseCPLEX(&_env); 70 } 87 decCnt(); 71 88 } 72 89 -
lemon/cplex.h
r1092 r1139 24 24 25 25 #include <lemon/lp_base.h> 26 #include <lemon/bits/lock.h> 26 27 27 28 struct cpxenv; … … 41 42 cpxenv* _env; 42 43 mutable int* _cnt; 43 44 mutable bits::Lock* _cnt_lock; 45 46 void incCnt(); 47 void decCnt(); 48 44 49 public: 45 50
Note: See TracChangeset
for help on using the changeset viewer.