1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_STRINGS_STRINGPRINTF_H_
6#define BASE_STRINGS_STRINGPRINTF_H_
7
8#include <stdarg.h>   // va_list
9
10#include <string>
11
12#include "base/base_export.h"
13#include "base/compiler_specific.h"
14
15namespace base {
16
17// Return a C++ string given printf-like input.
18BASE_EXPORT std::string StringPrintf(const char* format, ...)
19    PRINTF_FORMAT(1, 2) WARN_UNUSED_RESULT;
20// OS_ANDROID's libc does not support wchar_t, so several overloads are omitted.
21#if !defined(OS_ANDROID)
22BASE_EXPORT std::wstring StringPrintf(const wchar_t* format, ...)
23    WPRINTF_FORMAT(1, 2) WARN_UNUSED_RESULT;
24#endif
25
26// Return a C++ string given vprintf-like input.
27BASE_EXPORT std::string StringPrintV(const char* format, va_list ap)
28    PRINTF_FORMAT(1, 0) WARN_UNUSED_RESULT;
29
30// Store result into a supplied string and return it.
31BASE_EXPORT const std::string& SStringPrintf(std::string* dst,
32                                             const char* format, ...)
33    PRINTF_FORMAT(2, 3);
34#if !defined(OS_ANDROID)
35BASE_EXPORT const std::wstring& SStringPrintf(std::wstring* dst,
36                                              const wchar_t* format, ...)
37    WPRINTF_FORMAT(2, 3);
38#endif
39
40// Append result to a supplied string.
41BASE_EXPORT void StringAppendF(std::string* dst, const char* format, ...)
42    PRINTF_FORMAT(2, 3);
43#if !defined(OS_ANDROID)
44// TODO(evanm): this is only used in a few places in the code;
45// replace with string16 version.
46BASE_EXPORT void StringAppendF(std::wstring* dst, const wchar_t* format, ...)
47    WPRINTF_FORMAT(2, 3);
48#endif
49
50// Lower-level routine that takes a va_list and appends to a specified
51// string.  All other routines are just convenience wrappers around it.
52BASE_EXPORT void StringAppendV(std::string* dst, const char* format, va_list ap)
53    PRINTF_FORMAT(2, 0);
54#if !defined(OS_ANDROID)
55BASE_EXPORT void StringAppendV(std::wstring* dst,
56                               const wchar_t* format, va_list ap)
57    WPRINTF_FORMAT(2, 0);
58#endif
59
60}  // namespace base
61
62#endif  // BASE_STRINGS_STRINGPRINTF_H_
63