mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 17:40:23 +08:00
moved rtabmap-ros-pkg project in this project
git-svn-id: http://rtabmap.googlecode.com/svn/branches/0.3/rtabmap@52 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
78
corelib/src/VisualWord.cpp
Normal file
78
corelib/src/VisualWord.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (C) 2010-2011, Mathieu Labbe and IntRoLab - Universite de Sherbrooke
|
||||
*
|
||||
* This file is part of RTAB-Map.
|
||||
*
|
||||
* RTAB-Map is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* RTAB-Map is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with RTAB-Map. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "VisualWord.h"
|
||||
#include "utilite/ULogger.h"
|
||||
#include "utilite/UStl.h"
|
||||
|
||||
namespace rtabmap
|
||||
{
|
||||
|
||||
VisualWord::VisualWord(int id, const float * descriptor, unsigned int dim, int signatureId) :
|
||||
_id(id),
|
||||
_saved(false),
|
||||
_totalReferences(0)
|
||||
{
|
||||
_descriptor = new float[dim];
|
||||
if(_descriptor && descriptor)
|
||||
{
|
||||
memcpy(_descriptor, descriptor, dim*sizeof(float));
|
||||
}
|
||||
else
|
||||
{
|
||||
ULOGGER_ERROR("not enough memory to create the descriptor...");
|
||||
}
|
||||
_dim = dim;
|
||||
|
||||
if(signatureId)
|
||||
{
|
||||
addRef(signatureId);
|
||||
}
|
||||
}
|
||||
|
||||
VisualWord::~VisualWord()
|
||||
{
|
||||
if(_descriptor)
|
||||
{
|
||||
delete [] _descriptor;
|
||||
}
|
||||
}
|
||||
|
||||
void VisualWord::addRef(int signatureId)
|
||||
{
|
||||
std::map<int, int>::iterator iter = _references.find(signatureId);
|
||||
if(iter != _references.end())
|
||||
{
|
||||
(*iter).second += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
_references.insert(std::pair<int, int>(signatureId, 1));
|
||||
}
|
||||
++_totalReferences;
|
||||
}
|
||||
|
||||
int VisualWord::removeAllRef(int signatureId)
|
||||
{
|
||||
int removed = uTake(_references, signatureId, 0);
|
||||
_totalReferences -= removed;
|
||||
return removed;
|
||||
}
|
||||
|
||||
} // namespace rtabmap
|
||||
Reference in New Issue
Block a user