1 #include "mongoose_mex.hpp"
2 
3 namespace Mongoose
4 {
5 
6 #define MEX_STRUCT_READINT(F)    returner->F = (Int) readField(matOptions, #F);
7 #define MEX_STRUCT_READDOUBLE(F) returner->F = readField(matOptions, #F);
8 #define MEX_STRUCT_READBOOL(F)   returner->F = static_cast<bool>((readField(matOptions, #F) != 0.0));
9 #define MEX_STRUCT_READENUM(F,T) returner->F = (T) (readField(matOptions, #F));
10 
mex_get_options(const mxArray * matOptions)11 EdgeCut_Options *mex_get_options
12 (
13     const mxArray *matOptions
14 )
15 {
16     EdgeCut_Options *returner = EdgeCut_Options::create();
17 
18     if(!returner)
19         return NULL;
20     if(matOptions == NULL)
21         return returner;
22 
23     MEX_STRUCT_READINT(random_seed);
24     MEX_STRUCT_READINT(coarsen_limit);
25     MEX_STRUCT_READENUM(matching_strategy, MatchingStrategy);
26     MEX_STRUCT_READBOOL(do_community_matching);
27     MEX_STRUCT_READDOUBLE(high_degree_threshold);
28 
29     /** Guess Partitioning Options *******************************************/
30     MEX_STRUCT_READENUM(initial_cut_type, InitialEdgeCutType);
31 
32     /** Waterdance Options ***************************************************/
33     MEX_STRUCT_READINT(num_dances);
34 
35     /**** Fidducia-Mattheyes Options *****************************************/
36     MEX_STRUCT_READBOOL(use_FM);
37     MEX_STRUCT_READINT(FM_search_depth);
38     MEX_STRUCT_READINT(FM_consider_count);
39     MEX_STRUCT_READINT(FM_max_num_refinements);
40 
41     /**** Quadratic Programming Options **************************************/
42     MEX_STRUCT_READBOOL(use_QP_gradproj);
43     MEX_STRUCT_READDOUBLE(gradproj_tolerance);
44     MEX_STRUCT_READINT(gradproj_iteration_limit);
45 
46     /** Final Partition Target Metrics ***************************************/
47     MEX_STRUCT_READDOUBLE(target_split);
48     MEX_STRUCT_READDOUBLE(soft_split_tolerance);
49 
50     return returner;
51 }
52 
53 }