OSDN Git Service

ecc3ff62ca2d52a9797eab2e474e107abff0cae7
[codecoverage/main.git] / SharedMemory / Java / CoverageManager.h
1 #ifndef COVERAGE_MANAGER_H_\r
2 #define COVERAGE_MANAGER_H_\r
3 \r
4 #undef UNICODE\r
5 #include <stdio.h>\r
6 #include <windows.h>\r
7 \r
8 class CoverageManager\r
9 {\r
10 private:\r
11         static HANDLE _hMemory;\r
12         static char *_memory;\r
13         \r
14         static bool initialize(int nameNumberHigh, int nameNumberLow, int size) {\r
15                 char name[256];\r
16                 sprintf(name, "%d-%d-%d", nameNumberHigh, nameNumberLow, size);\r
17 \r
18                 _hMemory = CreateFileMapping(\r
19                         (HANDLE)-1,                     // \83t\83@\83C\83\8b\82Ì\83n\83\93\83h\83\8b(0xFFFFFFFF\82¾\82Æ\83t\83@\83C\83\8b\82ð\90\90¬\82µ\82È\82¢)\r
20                         NULL,                           // \83Z\83L\83\85\83\8a\83e\83B\r
21                         PAGE_READWRITE,         // \95Û\8cì\r
22                         0,                                      // \83T\83C\83Y\82ð\95\\82·\8fã\88Ê DWORD\r
23                         size,                           // \83T\83C\83Y\82ð\95\\82·\89º\88Ê DWORD\r
24                         name);                          // \83I\83u\83W\83F\83N\83g\96¼\81i\8e¯\95Ê\8eq\81j\r
25                 if (GetLastError() == ERROR_ALREADY_EXISTS) {\r
26                         _hMemory = OpenFileMapping(\r
27                                 FILE_MAP_ALL_ACCESS,    // \83A\83N\83Z\83X\83\82\81[\83h\r
28                                 FALSE,                                  // \8cp\8f³\83t\83\89\83O\81i\8eq\83v\83\8d\83Z\83X\82É\8cp\8f³\82·\82é\82©\94Û\82©\81j\r
29                                 name);                                  // \83I\83u\83W\83F\83N\83g\96¼\81i\8e¯\95Ê\8eq\81j\r
30                 }\r
31                 if (_hMemory == NULL)\r
32                         return false;\r
33 \r
34                 _memory = (char*)MapViewOfFile(\r
35                         _hMemory,                               // \83t\83@\83C\83\8b\83}\83b\83s\83\93\83O\83I\83u\83W\83F\83N\83g\82Ì\83n\83\93\83h\83\8b\r
36                         FILE_MAP_ALL_ACCESS,    // \83A\83N\83Z\83X\83\82\81[\83h\r
37                         0,                                              // \83I\83t\83Z\83b\83g\82Ì\8fã\88Ê DWORD\r
38                         0,                                              // \83I\83t\83Z\83b\83g\82Ì\89º\88Ê DWORD\r
39                         0);                                             // \83}\83b\83v\91Î\8fÛ\82Ì\83o\83C\83g\90\94\r
40                 if (_memory == NULL)\r
41                         return false;\r
42                 return true;\r
43         }\r
44 \r
45         static void write(int nameNumberHigh, int nameNumberLow, int size, int id, char value) {\r
46                 if (_memory == NULL && initialize(nameNumberHigh, nameNumberLow, size) == false) {\r
47                         return;\r
48                 }\r
49                 _memory[id] |= value;\r
50         }\r
51 \r
52 public:\r
53         static int read(int nameNumberHigh, int nameNumberLow, int size, int id) {\r
54                 if (_memory == NULL && initialize(nameNumberHigh, nameNumberLow, size) == false) {\r
55                         return -1;\r
56                 }\r
57                 return _memory[id];\r
58         }\r
59         \r
60         static bool branch(int nameNumberHigh, int nameNumberLow, int size, int id, bool value) {\r
61                 write(nameNumberHigh, nameNumberLow, size, id, value ? 1 : 2);\r
62                 return value;\r
63         }\r
64         \r
65         static void statement(int nameNumberHigh, int nameNumberLow, int size, int id) {\r
66                 write(nameNumberHigh, nameNumberLow, size, id, 3);\r
67         }\r
68 };\r
69 \r
70 extern int read(int nameNumberHigh, int nameNumberLow, int size, int id);\r
71 extern bool branch(int nameNumberHigh, int nameNumberLow, int size, int id, bool value);\r
72 extern void statement(int nameNumberHigh, int nameNumberLow, int size, int id);\r
73 \r
74 #endif //COVERAGE_MANAGER_H_\r