ICE 3.4.2
[php5-ice-freebsdport.git] / cpp / src / Ice / SliceChecksums.cpp
blob645d1f36a80874420b4c67f63dbb1c6387fa942a
1 // **********************************************************************
2 //
3 // Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
4 //
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
7 //
8 // **********************************************************************
10 #include <Ice/SliceChecksums.h>
11 #include <IceUtil/Mutex.h>
12 #include <IceUtil/MutexPtrLock.h>
14 using namespace std;
15 using namespace Ice;
17 namespace
20 SliceChecksumDict* _sliceChecksums = 0;
22 IceUtil::Mutex* _mutex = 0;
24 class Init
26 public:
28 Init()
30 _mutex = new IceUtil::Mutex;
33 ~Init()
35 delete _mutex;
36 _mutex = 0;
40 Init init;
42 class SliceChecksumDictDestroyer
44 public:
46 ~SliceChecksumDictDestroyer()
48 delete _sliceChecksums;
49 _sliceChecksums = 0;
53 SliceChecksumDictDestroyer destroyer;
57 SliceChecksumDict
58 Ice::sliceChecksums()
60 IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(_mutex);
61 if(_sliceChecksums == 0)
63 _sliceChecksums = new SliceChecksumDict();
65 return *_sliceChecksums;
68 IceInternal::SliceChecksumInit::SliceChecksumInit(const char* checksums[])
70 IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(_mutex);
71 if(_sliceChecksums == 0)
73 _sliceChecksums = new SliceChecksumDict();
76 for(int i = 0; checksums[i] != 0; i += 2)
78 _sliceChecksums->insert(SliceChecksumDict::value_type(checksums[i], checksums[i + 1]));