1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
//------------------------------------------------------------------------------
// Mongoose/MATLAB/edgecut.cpp
//------------------------------------------------------------------------------
// Mongoose Graph Partitioning Library, Copyright (C) 2017-2018,
// Scott P. Kolodziej, Nuri S. Yeralan, Timothy A. Davis, William W. Hager
// Mongoose is licensed under Version 3 of the GNU General Public License.
// Mongoose is also available under other licenses; contact authors for details.
// SPDX-License-Identifier: GPL-3.0-only
//------------------------------------------------------------------------------
#include "mongoose_mex.hpp"
using namespace Mongoose;
void mexFunction
(
int nargout,
mxArray *pargout [ ],
int nargin,
const mxArray *pargin [ ]
)
{
cs Amatrix;
int i, gtype, values;
const char* usage = "Usage: partition = edgecut(G, (O, A))";
if(nargout > 1 || nargin < 1 || nargin > 3) mexErrMsgTxt(usage);
const mxArray *matGraph = pargin[0];
const mxArray *matOptions = (nargin >= 2 ? pargin[1] : NULL);
const mxArray *matNodeWeights = (nargin >= 3 ? pargin[2] : NULL);
// Get the graph from the MATLAB inputs.
EdgeCutProblem *G = mex_get_graph(matGraph, matNodeWeights);
if(!G)
mexErrMsgTxt("Unable to get Graph struct");
// Get the options from the MATLAB inputs.
EdgeCut_Options *O = mex_get_options(matOptions);
if(!O)
mexErrMsgTxt("Unable to get Options struct");
EdgeCut *result = edge_cut(G, O);
// Copy the partition choices back to MATLAB.
pargout[0] = gp_mex_put_logical(result->partition, result->n);
// Cleanup
O->~EdgeCut_Options();
G->~EdgeCutProblem();
result->~EdgeCut();
}
|