1515#include <stdlib.h>
1616#include <string.h>
1717#include <assert.h>
18+ #include <time.h>
19+
20+ #ifdef _WIN32
21+ #include <windows.h>
22+ #elif defined(__APPLE__ ) || defined(__linux__ )
1823#include <sys/time.h>
1924#include <sys/resource.h>
25+ #else
26+ #error "Unsupported platform"
27+ #endif
2028
2129#define WORD_LENGTH 100
2230#define TRUE 1
@@ -200,10 +208,27 @@ struct Result {
200208};
201209
202210static 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
207232}
208233
209234static int cmp_branching_vertex_score (const void * a , const void * b ){
@@ -230,7 +255,8 @@ static void parse_parmerters(int argc, char *argv[]) {
230255}
231256
232257static 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 ;
234260 Init_Adj_List = (int * ) malloc ((2 * nb_edge + nb_node ) * sizeof (int ));
235261 if (Init_Adj_List == NULL ) {
236262 for (i = 1 ; i <= NB_NODE ; i ++ ) {
@@ -317,7 +343,7 @@ static int _read_graph_from_adjacency_matrix(int** adj_matrix, int num_nodes) {
317343 return TRUE;
318344}
319345
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 ) {
321347 int i , j , l_node , r_node , nb_edge = 0 , max_node = n , offset = 0 ;
322348 int node = 1 ;
323349
@@ -740,10 +766,10 @@ extern int select_branching_node();
740766extern void search_domset ();
741767extern int fast_search_initial_solution ();
742768extern 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 );
747773extern void free_results (struct Result * result );
748774
749775// Declare global variables as extern
0 commit comments