mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-07-28 15:07:46 +00:00
* Travis OpenCV4 update, testing Ubuntu with new OpenCV * Fix to Ubuntu travis * Another attempt at OpenCV 4.0 for Ubuntu * And another OpenCV attempt. * Simplifying the travis script * Ubuntu OpenCV 4 support. * Updating to OpenCV 4, for x64 windows. * Fixes to move to OpenCV 4 on windows. * Travis fix for OpenCV 4 on OSX * Renaming a lib. * Travis opencv4 fix. * Building OpenCV4 versions using appveyor. * Attempt mac travis fix. * Small travis fix. * Travis fix attempt. * First iteration in boost removal and upgrade to C++17 * Test with ocv 4.0 * Moving filesystem out of stdafx * Some more boost testing with cmake. * More CMAKE options * More compiler flag changes * Another attempt at compiler options. * Another attempt. * More filesystem stuff. * Linking to filesystem. * Cmake fix with target linking. * Attempting travis with g++-8 * Attempting to setup g++8 on travis linux. * Another travis change. * Adding OpenBLAS to travis and removing g++-8 * Fixing typo * More travis experiments. * More travis debugging. * A small directory change. * Adding some more travis changes. * travis typo fix. * Some reordering of travis, for cleaner yml * Removing `using namespace std` in order to avoid clash with byte and to make the code more consistent. * Working towards removing std::filesystem requirement, allow boost::filesystem as well. * Making boost an optional dependency * Fixing std issue. * Fixing cmake issue. * Fixing the precompiled header issue. * Another cmake boost fix. * Including missing files. * Removing unnecessary includes. * Removing more includes. * Changes to appveyor build, proper removal of VS2015 * If boost is present, do not need to link to filesystem. * Removing un-needed link library. * oops * Mac attempt at opencv4 travis. * Upgrading OCV to 4.1 on VS2018 * Downloading OpenCV binaries through a script * Triger an appveyor build. * Upgrading VS version. * Attempting VS2017 build * Adding win-32 libraries for OpenCV 4.1 * Adding OpenCV 32 bit libraries.
193 lines
6.1 KiB
C++
193 lines
6.1 KiB
C++
/***********************************************************************
|
|
* Software License Agreement (BSD License)
|
|
*
|
|
* Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved.
|
|
* Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved.
|
|
*
|
|
* THE BSD LICENSE
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*************************************************************************/
|
|
|
|
#ifndef OPENCV_FLANN_ALLOCATOR_H_
|
|
#define OPENCV_FLANN_ALLOCATOR_H_
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
|
|
namespace cvflann
|
|
{
|
|
|
|
/**
|
|
* Allocates (using C's malloc) a generic type T.
|
|
*
|
|
* Params:
|
|
* count = number of instances to allocate.
|
|
* Returns: pointer (of type T*) to memory buffer
|
|
*/
|
|
template <typename T>
|
|
T* allocate(size_t count = 1)
|
|
{
|
|
T* mem = (T*) ::malloc(sizeof(T)*count);
|
|
return mem;
|
|
}
|
|
|
|
|
|
/**
|
|
* Pooled storage allocator
|
|
*
|
|
* The following routines allow for the efficient allocation of storage in
|
|
* small chunks from a specified pool. Rather than allowing each structure
|
|
* to be freed individually, an entire pool of storage is freed at once.
|
|
* This method has two advantages over just using malloc() and free(). First,
|
|
* it is far more efficient for allocating small objects, as there is
|
|
* no overhead for remembering all the information needed to free each
|
|
* object or consolidating fragmented memory. Second, the decision about
|
|
* how long to keep an object is made at the time of allocation, and there
|
|
* is no need to track down all the objects to free them.
|
|
*
|
|
*/
|
|
|
|
const size_t WORDSIZE=16;
|
|
const size_t BLOCKSIZE=8192;
|
|
|
|
class PooledAllocator
|
|
{
|
|
/* We maintain memory alignment to word boundaries by requiring that all
|
|
allocations be in multiples of the machine wordsize. */
|
|
/* Size of machine word in bytes. Must be power of 2. */
|
|
/* Minimum number of bytes requested at a time from the system. Must be multiple of WORDSIZE. */
|
|
|
|
|
|
int remaining; /* Number of bytes left in current block of storage. */
|
|
void* base; /* Pointer to base of current block of storage. */
|
|
void* loc; /* Current location in block to next allocate memory. */
|
|
int blocksize;
|
|
|
|
|
|
public:
|
|
int usedMemory;
|
|
int wastedMemory;
|
|
|
|
/**
|
|
Default constructor. Initializes a new pool.
|
|
*/
|
|
PooledAllocator(int blockSize = BLOCKSIZE)
|
|
{
|
|
blocksize = blockSize;
|
|
remaining = 0;
|
|
base = NULL;
|
|
loc = NULL;
|
|
|
|
usedMemory = 0;
|
|
wastedMemory = 0;
|
|
}
|
|
|
|
/**
|
|
* Destructor. Frees all the memory allocated in this pool.
|
|
*/
|
|
~PooledAllocator()
|
|
{
|
|
void* prev;
|
|
|
|
while (base != NULL) {
|
|
prev = *((void**) base); /* Get pointer to prev block. */
|
|
::free(base);
|
|
base = prev;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a pointer to a piece of new memory of the given size in bytes
|
|
* allocated from the pool.
|
|
*/
|
|
void* allocateMemory(int size)
|
|
{
|
|
int blockSize;
|
|
|
|
/* Round size up to a multiple of wordsize. The following expression
|
|
only works for WORDSIZE that is a power of 2, by masking last bits of
|
|
incremented size to zero.
|
|
*/
|
|
size = (size + (WORDSIZE - 1)) & ~(WORDSIZE - 1);
|
|
|
|
/* Check whether a new block must be allocated. Note that the first word
|
|
of a block is reserved for a pointer to the previous block.
|
|
*/
|
|
if (size > remaining) {
|
|
|
|
wastedMemory += remaining;
|
|
|
|
/* Allocate new storage. */
|
|
blockSize = (size + sizeof(void*) + (WORDSIZE-1) > BLOCKSIZE) ?
|
|
size + sizeof(void*) + (WORDSIZE-1) : BLOCKSIZE;
|
|
|
|
// use the standard C malloc to allocate memory
|
|
void* m = ::malloc(blockSize);
|
|
if (!m) {
|
|
fprintf(stderr,"Failed to allocate memory.\n");
|
|
return NULL;
|
|
}
|
|
|
|
/* Fill first word of new block with pointer to previous block. */
|
|
((void**) m)[0] = base;
|
|
base = m;
|
|
|
|
int shift = 0;
|
|
//int shift = (WORDSIZE - ( (((size_t)m) + sizeof(void*)) & (WORDSIZE-1))) & (WORDSIZE-1);
|
|
|
|
remaining = blockSize - sizeof(void*) - shift;
|
|
loc = ((char*)m + sizeof(void*) + shift);
|
|
}
|
|
void* rloc = loc;
|
|
loc = (char*)loc + size;
|
|
remaining -= size;
|
|
|
|
usedMemory += size;
|
|
|
|
return rloc;
|
|
}
|
|
|
|
/**
|
|
* Allocates (using this pool) a generic type T.
|
|
*
|
|
* Params:
|
|
* count = number of instances to allocate.
|
|
* Returns: pointer (of type T*) to memory buffer
|
|
*/
|
|
template <typename T>
|
|
T* allocate(size_t count = 1)
|
|
{
|
|
T* mem = (T*) this->allocateMemory((int)(sizeof(T)*count));
|
|
return mem;
|
|
}
|
|
|
|
private:
|
|
PooledAllocator(const PooledAllocator &); // copy disabled
|
|
PooledAllocator& operator=(const PooledAllocator &); // assign disabled
|
|
};
|
|
|
|
}
|
|
|
|
#endif //OPENCV_FLANN_ALLOCATOR_H_
|