std::string to_string(double value, const FormatSpec& fmt) { std::ostringstream ss; PrintfSpec spec; if (! fmt.empty()) { if (fmt.specifierIs("f")) { ss.setf(std::ios::fixed, std::ios::floatfield); } else if (fmt.specifierIs("g")) { } else if (fmt.specifierIs("G")) { ss.setf(std::ios::uppercase); } else if (fmt.specifierIs("e")) { ss.setf(std::ios::scientific, std::ios::floatfield); } else if (fmt.specifierIs("E")) { ss.setf(std::ios::scientific, std::ios::floatfield); ss.setf(std::ios::uppercase); } else return std::string("%(err: bad format)"); const char *fmtbegin, *fmtend; fmt.paramPtr(0, fmtbegin, fmtend); if (fmtend != fmtbegin) parse_printfspec(spec, fmtbegin, fmtend); } // sign padding is not supported if (spec.flags & PrintfSpec::PadSign) return std::string("%(err: bad format)"); init_iosflags(ss, spec); ss << value; return ss.str(); }
std::string to_string(int64_t value, const FormatSpec& fmt) { std::ostringstream ss; PrintfSpec spec; if (! fmt.empty()) { if (fmt.specifierIs("d") || fmt.specifierIs("i")) { ss.setf(std::ios::dec, std::ios::basefield); } else return std::string("%(err: bad format)"); const char *fmtbegin, *fmtend; fmt.paramPtr(0, fmtbegin, fmtend); if (fmtend != fmtbegin) parse_printfspec(spec, fmtbegin, fmtend); } // sign padding is not supported if (spec.flags & PrintfSpec::PadSign) return std::string("%(err: bad format)"); // precision is ignore for integer arguments if (spec.precision != -1) return std::string("%(err: bad format)"); init_iosflags(ss, spec); ss << value; return ss.str(); }