| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 
							- // Ceres Solver - A fast non-linear least squares minimizer
 
- // Copyright 2015 Google Inc. All rights reserved.
 
- // http://ceres-solver.org/
 
- //
 
- // Redistribution and use in source and binary forms, with or without
 
- // modification, are permitted provided that the following conditions are met:
 
- //
 
- // * Redistributions of source code must retain the above copyright notice,
 
- //   this list of conditions and the following disclaimer.
 
- // * 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.
 
- // * Neither the name of Google Inc. nor the names of its contributors may be
 
- //   used to endorse or promote products derived from this software without
 
- //   specific prior written permission.
 
- //
 
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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.
 
- //
 
- // Author: Sanjay Ghemawat
 
- //
 
- // Printf variants that place their output in a C++ string.
 
- //
 
- // Usage:
 
- //      string result = StringPrintf("%d %s\n", 10, "hello");
 
- //      SStringPrintf(&result, "%d %s\n", 10, "hello");
 
- //      StringAppendF(&result, "%d %s\n", 20, "there");
 
- #ifndef CERES_INTERNAL_STRINGPRINTF_H_
 
- #define CERES_INTERNAL_STRINGPRINTF_H_
 
- #include <cstdarg>
 
- #include <string>
 
- #include "ceres/internal/port.h"
 
- namespace ceres {
 
- namespace internal {
 
- #if (defined(__GNUC__) || defined(__clang__))
 
- // Tell the compiler to do printf format string checking if the compiler
 
- // supports it; see the 'format' attribute in
 
- // <http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Function-Attributes.html>.
 
- //
 
- // N.B.: As the GCC manual states, "[s]ince non-static C++ methods
 
- // have an implicit 'this' argument, the arguments of such methods
 
- // should be counted from two, not one."
 
- #define CERES_PRINTF_ATTRIBUTE(string_index, first_to_check) \
 
-   __attribute__((__format__(__printf__, string_index, first_to_check)))
 
- #define CERES_SCANF_ATTRIBUTE(string_index, first_to_check) \
 
-   __attribute__((__format__(__scanf__, string_index, first_to_check)))
 
- #else
 
- #define CERES_PRINTF_ATTRIBUTE(string_index, first_to_check)
 
- #endif
 
- // Return a C++ string.
 
- CERES_EXPORT_INTERNAL extern std::string StringPrintf(const char* format, ...)
 
-     // Tell the compiler to do printf format string checking.
 
-     CERES_PRINTF_ATTRIBUTE(1, 2);
 
- // Store result into a supplied string and return it.
 
- CERES_EXPORT_INTERNAL extern const std::string& SStringPrintf(
 
-     std::string* dst, const char* format, ...)
 
-     // Tell the compiler to do printf format string checking.
 
-     CERES_PRINTF_ATTRIBUTE(2, 3);
 
- // Append result to a supplied string.
 
- CERES_EXPORT_INTERNAL extern void StringAppendF(std::string* dst,
 
-                                                 const char* format,
 
-                                                 ...)
 
-     // Tell the compiler to do printf format string checking.
 
-     CERES_PRINTF_ATTRIBUTE(2, 3);
 
- // Lower-level routine that takes a va_list and appends to a specified string.
 
- // All other routines are just convenience wrappers around it.
 
- CERES_EXPORT_INTERNAL extern void StringAppendV(std::string* dst,
 
-                                                 const char* format,
 
-                                                 va_list ap);
 
- #undef CERES_PRINTF_ATTRIBUTE
 
- }  // namespace internal
 
- }  // namespace ceres
 
- #endif  // CERES_INTERNAL_STRINGPRINTF_H_
 
 
  |