Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "solver.h"
00018
00019 #include <cstring>
00020 #include <algorithm>
00021
00022 namespace g2o {
00023
00024 Solver::Solver(SparseOptimizer* optimizer) :
00025 _optimizer(optimizer), _x(0), _b(0), _xSize(0), _maxXSize(0),
00026 _isLevenberg(false), _additionalVectorSpace(0)
00027 {
00028 }
00029
00030 Solver::~Solver()
00031 {
00032 delete[] _x;
00033 delete[] _b;
00034 }
00035
00036 void Solver::resizeVector(size_t sx)
00037 {
00038 size_t oldSize = _xSize;
00039 _xSize = sx;
00040 sx += _additionalVectorSpace;
00041 if (_maxXSize < sx) {
00042 _maxXSize = 2*sx;
00043 delete[] _x;
00044 _x = new double[_maxXSize];
00045 #ifndef NDEBUG
00046 memset(_x, 0, _maxXSize * sizeof(double));
00047 #endif
00048 if (_b) {
00049 memcpy(_x, _b, oldSize * sizeof(double));
00050 delete[] _b;
00051 _b = new double[_maxXSize];
00052 std::swap(_b, _x);
00053 } else {
00054 _b = new double[_maxXSize];
00055 #ifndef NDEBUG
00056 memset(_b, 0, _maxXSize * sizeof(double));
00057 #endif
00058 }
00059 }
00060 }
00061
00062 void Solver::setOptimizer(SparseOptimizer* optimizer)
00063 {
00064 _optimizer = optimizer;
00065 }
00066
00067 void Solver::setLevenberg(bool levenberg)
00068 {
00069 _isLevenberg = levenberg;
00070 }
00071
00072 void Solver::setAdditionalVectorSpace(size_t s)
00073 {
00074 _additionalVectorSpace = s;
00075 }
00076
00077 }