// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "impeller/base/strings.h" #include namespace impeller { IMPELLER_PRINTF_FORMAT(1, 2) std::string SPrintF(const char* format, ...) { std::string ret_val; va_list list; va_list list2; va_start(list, format); va_copy(list2, list); if (auto string_length = ::vsnprintf(nullptr, 0, format, list); string_length >= 0) { auto buffer = reinterpret_cast(::malloc(string_length + 1)); ::vsnprintf(buffer, string_length + 1, format, list2); ret_val = std::string{buffer, static_cast(string_length)}; ::free(buffer); } va_end(list2); va_end(list); return ret_val; } bool HasPrefix(const std::string& string, const std::string& prefix) { return string.find(prefix) == 0u; } bool HasSuffix(const std::string& string, const std::string& suffix) { auto position = string.rfind(suffix); if (position == std::string::npos) { return false; } return position == string.size() - suffix.size(); } std::string StripPrefix(const std::string& string, const std::string& to_strip) { if (!HasPrefix(string, to_strip)) { return string; } return string.substr(to_strip.length()); } } // namespace impeller