fixed a compiler error with VC++ 10.0
[charm.git] / src / langs / bluegene / shared_alloc.C
1 #include <vector>
2 #include <utility>
3 #include <cstdlib>
4
5 #include "shared-alloc.h"
6
7 typedef std::pair<void*, int> Alloc;
8
9 static std::vector<Alloc> allocs;
10
11 void *shalloc(size_t s, int i)
12 {
13   // Make space to record at least i allocations
14   if(allocs.size() <= i)
15     allocs.resize(i+1, Alloc((void*)0,0));
16
17   // Ensure allocation i is initialized
18   if(allocs[i].first == 0)
19     allocs[i].first = malloc(s);
20
21   // Increment its reference count
22   allocs[i].second++;
23
24   // Return the address
25   return allocs[i].first;
26 }
27
28 void shfree(void *p, int i)
29 {
30   // Check that pointer matches
31   //CkAssert(p == allocs[i].first);
32             
33   // Decrement refcount
34   allocs[i].second--;
35
36   // Free if 0
37   if (allocs[i].second == 0)
38     {
39       free(allocs[i].first);
40       allocs[i].first = 0;
41     }
42 }
43
44
45 // Note that these are liable to crash and burn in the face of alignment 
46 // requirements
47 void* operator new(size_t sz, int i)
48 { return shalloc(sz, i); }
49 void operator delete(void *p, int i)
50 { shfree(p, i); }
51 void* operator new[](size_t sz, int i)
52 { return shalloc(sz, i); }
53 void operator delete[](void *p, int i)
54 { shfree(p, i); }