1// Ceres Solver - A fast non-linear least squares minimizer 2// Copyright 2010, 2011, 2012 Google Inc. All rights reserved. 3// http://code.google.com/p/ceres-solver/ 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions are met: 7// 8// * Redistributions of source code must retain the above copyright notice, 9// this list of conditions and the following disclaimer. 10// * Redistributions in binary form must reproduce the above copyright notice, 11// this list of conditions and the following disclaimer in the documentation 12// and/or other materials provided with the distribution. 13// * Neither the name of Google Inc. nor the names of its contributors may be 14// used to endorse or promote products derived from this software without 15// specific prior written permission. 16// 17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27// POSSIBILITY OF SUCH DAMAGE. 28// 29// Author: keir@google.com (Keir Mierle) 30 31#ifndef CERES_PUBLIC_INTERNAL_PORT_H_ 32#define CERES_PUBLIC_INTERNAL_PORT_H_ 33 34// This file needs to compile as c code. 35#ifdef __cplusplus 36 37#include <string> 38 39#include "ceres/internal/config.h" 40 41#if defined(CERES_TR1_MEMORY_HEADER) 42#include <tr1/memory> 43#else 44#include <memory> 45#endif 46 47namespace ceres { 48 49// It is unfortunate that this import of the entire standard namespace is 50// necessary. The reasons are historical and won't be explained here, but 51// suffice to say it is not a mistake and can't be removed without breaking 52// things outside of the Ceres optimization package. 53using namespace std; 54 55// This is necessary to properly handle the case that there is a different 56// "string" implementation in the global namespace. 57using std::string; 58 59#if defined(CERES_TR1_SHARED_PTR) 60using std::tr1::shared_ptr; 61#else 62using std::shared_ptr; 63#endif 64 65} // namespace ceres 66 67#endif // __cplusplus 68 69// A macro to signal which functions and classes are exported when 70// building a DLL with MSVC. 71// 72// Note that the ordering here is important, CERES_BUILDING_SHARED_LIBRARY 73// is only defined locally when Ceres is compiled, it is never exported to 74// users. However, in order that we do not have to configure config.h 75// separately for building vs installing, if we are using MSVC and building 76// a shared library, then both CERES_BUILDING_SHARED_LIBRARY and 77// CERES_USING_SHARED_LIBRARY will be defined when Ceres is compiled. 78// Hence it is important that the check for CERES_BUILDING_SHARED_LIBRARY 79// happens first. 80#if defined(_MSC_VER) && defined(CERES_BUILDING_SHARED_LIBRARY) 81# define CERES_EXPORT __declspec(dllexport) 82#elif defined(_MSC_VER) && defined(CERES_USING_SHARED_LIBRARY) 83# define CERES_EXPORT __declspec(dllimport) 84#else 85# define CERES_EXPORT 86#endif 87 88#endif // CERES_PUBLIC_INTERNAL_PORT_H_ 89