Implement time formatting
This commit is contained in:
parent
4cddbfa7cf
commit
fa5ebd27d4
@ -1,6 +1,6 @@
|
|||||||
# Define the fmt library, its includes and the needed defines.
|
# Define the fmt library, its includes and the needed defines.
|
||||||
# format.cc is added to FMT_HEADERS for the header-only configuration.
|
# format.cc is added to FMT_HEADERS for the header-only configuration.
|
||||||
set(FMT_HEADERS format.h format.cc)
|
set(FMT_HEADERS format.h format.cc time.h)
|
||||||
if (HAVE_OPEN)
|
if (HAVE_OPEN)
|
||||||
set(FMT_HEADERS ${FMT_HEADERS} posix.h)
|
set(FMT_HEADERS ${FMT_HEADERS} posix.h)
|
||||||
set(FMT_SOURCES ${FMT_SOURCES} posix.cc)
|
set(FMT_SOURCES ${FMT_SOURCES} posix.cc)
|
||||||
|
@ -2626,6 +2626,8 @@ class BasicWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clear() FMT_NOEXCEPT { buffer_.clear(); }
|
void clear() FMT_NOEXCEPT { buffer_.clear(); }
|
||||||
|
|
||||||
|
Buffer<Char> &buffer() FMT_NOEXCEPT { return buffer_; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
|
57
fmt/time.h
Normal file
57
fmt/time.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
Formatting library for C++ - time formatting
|
||||||
|
|
||||||
|
Copyright (c) 2012 - 2016, Victor Zverovich
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. 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.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FMT_TIME_H_
|
||||||
|
#define FMT_TIME_H_
|
||||||
|
|
||||||
|
#include "fmt/format.h"
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
namespace fmt {
|
||||||
|
template <typename ArgFormatter>
|
||||||
|
void format(BasicFormatter<char, ArgFormatter> &f,
|
||||||
|
const char *&format_str, const std::tm &tm) {
|
||||||
|
if (*format_str == ':')
|
||||||
|
++format_str;
|
||||||
|
const char *end = format_str;
|
||||||
|
while (*end && *end != '}')
|
||||||
|
++end;
|
||||||
|
if (*end != '}')
|
||||||
|
FMT_THROW(FormatError("missing '}' in format string"));
|
||||||
|
Buffer<char> &buffer = f.writer().buffer();
|
||||||
|
std::size_t start = buffer.size();
|
||||||
|
internal::MemoryBuffer<char, internal::INLINE_BUFFER_SIZE> format;
|
||||||
|
format.append(format_str, end + 1);
|
||||||
|
format[format.size() - 1] = '\0';
|
||||||
|
std::size_t size = std::strftime(&buffer[start], buffer.capacity() - start,
|
||||||
|
&format[0], &tm);
|
||||||
|
buffer.resize(start + size);
|
||||||
|
format_str = end + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // FMT_TIME_H_
|
@ -47,6 +47,8 @@
|
|||||||
#define None 0
|
#define None 0
|
||||||
|
|
||||||
#include "fmt/format.h"
|
#include "fmt/format.h"
|
||||||
|
#include "fmt/time.h"
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "mock-allocator.h"
|
#include "mock-allocator.h"
|
||||||
#include "gtest-extra.h"
|
#include "gtest-extra.h"
|
||||||
@ -1578,6 +1580,15 @@ TEST(FormatTest, Variadic) {
|
|||||||
EXPECT_EQ(L"abc1", format(L"{}c{}", L"ab", 1));
|
EXPECT_EQ(L"abc1", format(L"{}c{}", L"ab", 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(FormatTest, Time) {
|
||||||
|
std::tm tm = std::tm();
|
||||||
|
tm.tm_year = 116;
|
||||||
|
tm.tm_mon = 3;
|
||||||
|
tm.tm_mday = 25;
|
||||||
|
EXPECT_EQ("The date is 2016-04-25.",
|
||||||
|
fmt::format("The date is {:%Y-%m-%d}.", tm));
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::string str(const T &value) {
|
std::string str(const T &value) {
|
||||||
return fmt::format("{}", value);
|
return fmt::format("{}", value);
|
||||||
|
Loading…
Reference in New Issue
Block a user