15
15
#include <stdlib.h>
16
16
#include <string.h>
17
17
#include <assert.h>
18
+ #include <time.h>
19
+
20
+ #ifdef _WIN32
21
+ #include <windows.h>
22
+ #elif defined(__APPLE__ ) || defined(__linux__ )
18
23
#include <sys/time.h>
19
24
#include <sys/resource.h>
25
+ #else
26
+ #error "Unsupported platform"
27
+ #endif
20
28
21
29
#define WORD_LENGTH 100
22
30
#define TRUE 1
@@ -200,10 +208,27 @@ struct Result {
200
208
};
201
209
202
210
static double get_utime () {
203
- struct rusage utime ;
204
- getrusage (RUSAGE_SELF , & utime );
205
- return (double ) (utime .ru_utime .tv_sec
206
- + (double ) utime .ru_utime .tv_usec / 1000000 );
211
+ #ifdef _WIN32
212
+ FILETIME createTime ;
213
+ FILETIME exitTime ;
214
+ FILETIME kernelTime ;
215
+ FILETIME userTime ;
216
+ if (GetProcessTimes (GetCurrentProcess (),
217
+ & createTime , & exitTime ,
218
+ & kernelTime , & userTime ) != 0 ) {
219
+ ULARGE_INTEGER li = {{userTime .dwLowDateTime , userTime .dwHighDateTime }};
220
+ return li .QuadPart * 1e-7 ;
221
+ }
222
+ return 0.0 ;
223
+ #elif defined(__APPLE__ ) || defined(__linux__ )
224
+ struct rusage utime ;
225
+ if (getrusage (RUSAGE_SELF , & utime ) == 0 ) {
226
+ return (double )utime .ru_utime .tv_sec + (double )utime .ru_utime .tv_usec * 1e-6 ;
227
+ }
228
+ return 0.0 ;
229
+ #else
230
+ return (double )clock () / CLOCKS_PER_SEC ;
231
+ #endif
207
232
}
208
233
209
234
static int cmp_branching_vertex_score (const void * a , const void * b ){
@@ -230,7 +255,8 @@ static void parse_parmerters(int argc, char *argv[]) {
230
255
}
231
256
232
257
static void allcoate_memory_for_adjacency_list (int nb_node , int nb_edge ,int offset ) {
233
- int i , block_size = 40960000 , free_size = 0 ;
258
+ int i , block_size = 40960000 ;
259
+ unsigned int free_size = 0 ;
234
260
Init_Adj_List = (int * ) malloc ((2 * nb_edge + nb_node ) * sizeof (int ));
235
261
if (Init_Adj_List == NULL ) {
236
262
for (i = 1 ; i <= NB_NODE ; i ++ ) {
@@ -317,7 +343,7 @@ static int _read_graph_from_adjacency_matrix(int** adj_matrix, int num_nodes) {
317
343
return TRUE;
318
344
}
319
345
320
- static int _read_graph_from_edge_list (int * edges , int n , int nb_edges ) {
346
+ static int _read_graph_from_edge_list (unsigned int * edges , int n , int nb_edges ) {
321
347
int i , j , l_node , r_node , nb_edge = 0 , max_node = n , offset = 0 ;
322
348
int node = 1 ;
323
349
@@ -740,10 +766,10 @@ extern int select_branching_node();
740
766
extern void search_domset ();
741
767
extern int fast_search_initial_solution ();
742
768
extern void solve_subproblems ();
743
- extern struct Result * emos_main (int * edges , int n , int nb_edge );
744
- extern int * get_dominating_set ();
745
- extern int get_set_size ();
746
- extern double get_exec_time ();
769
+ extern struct Result * emos_main (unsigned int * edges , int n , int nb_edge );
770
+ extern int * get_dominating_set (struct Result * result );
771
+ extern int get_set_size (struct Result * result );
772
+ extern double get_exec_time (struct Result * result );
747
773
extern void free_results (struct Result * result );
748
774
749
775
// Declare global variables as extern
0 commit comments