From ecab6dfa0658c9e1cf6ffc176e75dfef3403bcd5 Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Sat, 29 Mar 2014 06:59:27 +0100 Subject: [PATCH] Remove requirement for std::unique_ptr (fix OSX 10.8.x builds) --- xbob/learn/libsvm/include/xbob.learn.libsvm/trainer.h | 7 ++++--- xbob/learn/libsvm/pytrainer.cpp | 8 ++++---- xbob/learn/libsvm/trainer.cpp | 7 +++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/xbob/learn/libsvm/include/xbob.learn.libsvm/trainer.h b/xbob/learn/libsvm/include/xbob.learn.libsvm/trainer.h index bbb1c91..ea6ea45 100644 --- a/xbob/learn/libsvm/include/xbob.learn.libsvm/trainer.h +++ b/xbob/learn/libsvm/include/xbob.learn.libsvm/trainer.h @@ -11,7 +11,6 @@ #define BOB_LEARN_LIBSVM_TRAINER_H #include <vector> -#include <memory> #include "machine.h" namespace bob { namespace learn { namespace libsvm { @@ -55,15 +54,17 @@ namespace bob { namespace learn { namespace libsvm { * the number of classes is greater than 2, labels are picked starting * from 1 (i.e., 1, 2, 3, 4, etc.). If what you want is regression, the * size of the input data array should be 1. + * + * Returns a new object you must deallocate yourself. */ - std::unique_ptr<bob::learn::libsvm::Machine> train + bob::learn::libsvm::Machine* train (const std::vector<blitz::Array<double,2> >& data) const; /** * This version accepts scaling parameters that will be applied * column-wise to the input data. */ - std::unique_ptr<bob::learn::libsvm::Machine> train + bob::learn::libsvm::Machine* train (const std::vector<blitz::Array<double,2> >& data, const blitz::Array<double,1>& input_subtract, const blitz::Array<double,1>& input_division) const; diff --git a/xbob/learn/libsvm/pytrainer.cpp b/xbob/learn/libsvm/pytrainer.cpp index fb897de..e89910d 100644 --- a/xbob/learn/libsvm/pytrainer.cpp +++ b/xbob/learn/libsvm/pytrainer.cpp @@ -649,17 +649,17 @@ static PyObject* PyBobLearnLibsvmTrainer_train /** all basic checks are done, can call the machine now **/ try { + bob::learn::libsvm::Machine* machine; if (subtract && divide) { - auto machine = self->cxx->train(Xseq, + machine = self->cxx->train(Xseq, *PyBlitzArrayCxx_AsBlitz<double,1>(subtract), *PyBlitzArrayCxx_AsBlitz<double,1>(divide) ); - return PyBobLearnLibsvmMachine_NewFromMachine(machine.release()); } else { - auto machine = self->cxx->train(Xseq); - return PyBobLearnLibsvmMachine_NewFromMachine(machine.release()); + machine = self->cxx->train(Xseq); } + return PyBobLearnLibsvmMachine_NewFromMachine(machine); } catch (std::exception& e) { PyErr_SetString(PyExc_RuntimeError, e.what()); diff --git a/xbob/learn/libsvm/trainer.cpp b/xbob/learn/libsvm/trainer.cpp index 9c592e4..f870395 100644 --- a/xbob/learn/libsvm/trainer.cpp +++ b/xbob/learn/libsvm/trainer.cpp @@ -202,7 +202,7 @@ static void svm_model_free(svm_model*& m) { #endif } -std::unique_ptr<bob::learn::libsvm::Machine> bob::learn::libsvm::Trainer::train +bob::learn::libsvm::Machine* bob::learn::libsvm::Trainer::train (const std::vector<blitz::Array<double, 2> >& data, const blitz::Array<double,1>& input_subtraction, const blitz::Array<double,1>& input_division) const { @@ -253,8 +253,7 @@ std::unique_ptr<bob::learn::libsvm::Machine> bob::learn::libsvm::Trainer::train boost::shared_ptr<svm_model> new_model = bob::learn::libsvm::svm_unpickle(bob::learn::libsvm::svm_pickle(model)); - std::unique_ptr<bob::learn::libsvm::Machine> retval - (new bob::learn::libsvm::Machine(new_model)); + auto retval = new bob::learn::libsvm::Machine(new_model); //sets up the scaling parameters given as input retval->setInputSubtraction(input_subtraction); @@ -263,7 +262,7 @@ std::unique_ptr<bob::learn::libsvm::Machine> bob::learn::libsvm::Trainer::train return retval; } -std::unique_ptr<bob::learn::libsvm::Machine> bob::learn::libsvm::Trainer::train +bob::learn::libsvm::Machine* bob::learn::libsvm::Trainer::train (const std::vector<blitz::Array<double,2> >& data) const { int n_features = data[0].extent(blitz::secondDim); blitz::Array<double,1> sub(n_features); -- GitLab