60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
|
|
/*
|
||
|
|
* Copyright 2017 Google Inc.
|
||
|
|
*
|
||
|
|
* Use of this source code is governed by a BSD-style license that can be
|
||
|
|
* found in the LICENSE file.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef SKSL_STRING
|
||
|
|
#define SKSL_STRING
|
||
|
|
|
||
|
|
#include "include/core/SkTypes.h"
|
||
|
|
#include "include/private/SkSLDefines.h"
|
||
|
|
|
||
|
|
#include <stdarg.h>
|
||
|
|
#include <string>
|
||
|
|
#include <string_view>
|
||
|
|
|
||
|
|
namespace SkSL {
|
||
|
|
|
||
|
|
bool stod(std::string_view s, SKSL_FLOAT* value);
|
||
|
|
bool stoi(std::string_view s, SKSL_INT* value);
|
||
|
|
|
||
|
|
namespace String {
|
||
|
|
|
||
|
|
std::string printf(const char* fmt, ...) SK_PRINTF_LIKE(1, 2);
|
||
|
|
void appendf(std::string* str, const char* fmt, ...) SK_PRINTF_LIKE(2, 3);
|
||
|
|
void vappendf(std::string* str, const char* fmt, va_list va) SK_PRINTF_LIKE(2, 0);
|
||
|
|
|
||
|
|
inline auto Separator() {
|
||
|
|
// This returns a lambda which emits "" the first time it is called, and ", " every subsequent
|
||
|
|
// time it is called.
|
||
|
|
struct Output {
|
||
|
|
const std::string fSpace, fComma;
|
||
|
|
};
|
||
|
|
static const Output* kOutput = new Output{{}, {", "}};
|
||
|
|
|
||
|
|
return [firstSeparator = true]() mutable -> const std::string& {
|
||
|
|
if (firstSeparator) {
|
||
|
|
firstSeparator = false;
|
||
|
|
return kOutput->fSpace;
|
||
|
|
} else {
|
||
|
|
return kOutput->fComma;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace String
|
||
|
|
} // namespace SkSL
|
||
|
|
|
||
|
|
namespace skstd {
|
||
|
|
|
||
|
|
// We use a custom to_string(float|double) which ignores locale settings and writes `1.0` instead
|
||
|
|
// of `1.00000`.
|
||
|
|
std::string to_string(float value);
|
||
|
|
std::string to_string(double value);
|
||
|
|
|
||
|
|
} // namespace skstd
|
||
|
|
|
||
|
|
#endif
|