Debloatify some stuff

This commit is contained in:
Thomas Goyne 2014-12-26 11:00:23 -08:00
parent 76afcdafa1
commit 010f6c4f79
8 changed files with 72 additions and 43 deletions

View File

@ -21,9 +21,7 @@
#include <libaegisub/util.h> #include <libaegisub/util.h>
#include <algorithm> #include <algorithm>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp> #include <boost/algorithm/string/split.hpp>
#include <boost/range/adaptor/filtered.hpp>
namespace agi { namespace agi {
Time::Time(int time) : time(util::mid(0, time, 10 * 60 * 60 * 1000 - 1)) { } Time::Time(int time) : time(util::mid(0, time, 10 * 60 * 60 * 1000 - 1)) { }
@ -31,7 +29,7 @@ Time::Time(int time) : time(util::mid(0, time, 10 * 60 * 60 * 1000 - 1)) { }
Time::Time(std::string const& text) { Time::Time(std::string const& text) {
int after_decimal = -1; int after_decimal = -1;
int current = 0; int current = 0;
for (char c : text | boost::adaptors::filtered(boost::is_any_of(",.0123456789:"))) { for (char c : text) {
if (c == ':') { if (c == ':') {
time = time * 60 + current; time = time * 60 + current;
current = 0; current = 0;
@ -41,6 +39,8 @@ Time::Time(std::string const& text) {
current = 0; current = 0;
after_decimal = 100; after_decimal = 100;
} }
else if (c < '0' || c > '9')
continue;
else if (after_decimal < 0) { else if (after_decimal < 0) {
current *= 10; current *= 10;
current += c - '0'; current += c - '0';
@ -80,21 +80,21 @@ int Time::GetTimeSeconds() const { return (time % 60000) / 1000; }
int Time::GetTimeMiliseconds() const { return (time % 1000); } int Time::GetTimeMiliseconds() const { return (time % 1000); }
int Time::GetTimeCentiseconds() const { return (time % 1000) / 10; } int Time::GetTimeCentiseconds() const { return (time % 1000) / 10; }
SmpteFormatter::SmpteFormatter(vfr::Framerate fps, std::string sep) SmpteFormatter::SmpteFormatter(vfr::Framerate fps, char sep)
: fps(std::move(fps)) : fps(std::move(fps))
, sep(std::move(sep)) , sep(sep)
{ {
} }
std::string SmpteFormatter::ToSMPTE(Time time) const { std::string SmpteFormatter::ToSMPTE(Time time) const {
int h=0, m=0, s=0, f=0; int h=0, m=0, s=0, f=0;
fps.SmpteAtTime(time, &h, &m, &s, &f); fps.SmpteAtTime(time, &h, &m, &s, &f);
return format("%02d%s%02d%s%02d%s%02d", h, sep, m, sep, s, sep, f); return format("%02d%c%02d%c%02d%c%02d", h, sep, m, sep, s, sep, f);
} }
Time SmpteFormatter::FromSMPTE(std::string const& str) const { Time SmpteFormatter::FromSMPTE(std::string const& str) const {
std::vector<std::string> toks; std::vector<std::string> toks;
boost::split(toks, str, boost::is_any_of(sep)); boost::split(toks, str, [=](char c) { return c == sep; });
if (toks.size() != 4) return 0; if (toks.size() != 4) return 0;
int h, m, s, f; int h, m, s, f;

View File

@ -228,6 +228,63 @@ bool formatter<Char>::parse_next() {
return true; return true;
} }
template<typename Char>
Char formatter<Char>::next_format() {
this->pending = false;
if (this->width < 0) {
this->out.fill(' ');
this->out.setf(std::ios::left, std::ios::adjustfield);
this->width = -this->width;
}
this->out.width(this->width);
this->out.precision(this->precision < 0 ? 6 : this->precision);
Char c = *this->fmt_cur ? this->fmt_cur[0] : 's';
if (c >= 'A' && c <= 'Z') {
this->out.setf(std::ios::uppercase);
c += 'a' - 'A';
}
switch (c) {
case 'c':
this->out.setf(std::ios::dec, std::ios::basefield);
break;
case 'd': case 'i':
this->out.setf(std::ios::dec, std::ios::basefield);
break;
case 'o':
this->out.setf(std::ios::oct, std::ios::basefield);
break;
case 'x':
this->out.setf(std::ios::hex, std::ios::basefield);
break;
case 'u':
this->out.setf(std::ios::dec, std::ios::basefield);
break;
case 'e':
this->out.setf(std::ios::scientific, std::ios::floatfield);
this->out.setf(std::ios::dec, std::ios::basefield);
break;
case 'f':
this->out.setf(std::ios::fixed, std::ios::floatfield);
break;
case 'g':
this->out.setf(std::ios::dec, std::ios::basefield);
this->out.flags(this->out.flags() & ~std::ios::floatfield);
break;
case 'p':
this->out.setf(std::ios::hex, std::ios::basefield);
break;
default: // s and other
this->out.setf(std::ios::boolalpha);
break;
}
this->fmt = *this->fmt_cur ? this->fmt_cur + 1 : this->fmt_cur;
return c;
}
template<typename Char> template<typename Char>
formatter<Char>::~formatter() { formatter<Char>::~formatter() {
// Write remaining formatting string // Write remaining formatting string

View File

@ -27,10 +27,10 @@ class SmpteFormatter {
/// Frame rate to use /// Frame rate to use
vfr::Framerate fps; vfr::Framerate fps;
/// Separator character /// Separator character
std::string sep; char sep;
public: public:
SmpteFormatter(vfr::Framerate fps, std::string sep=":"); SmpteFormatter(vfr::Framerate fps, char sep=':');
/// Convert an Time to a SMPTE timecode /// Convert an Time to a SMPTE timecode
std::string ToSMPTE(Time time) const; std::string ToSMPTE(Time time) const;

View File

@ -94,6 +94,7 @@ class formatter : formatter_state<Char> {
boost::io::basic_ios_all_saver<Char> saver; boost::io::basic_ios_all_saver<Char> saver;
bool parse_next(); bool parse_next();
Char next_format();
public: public:
formatter(std::basic_ostream<Char>& out, const Char *fmt) formatter(std::basic_ostream<Char>& out, const Char *fmt)
@ -115,68 +116,41 @@ public:
this->read_precision = false; this->read_precision = false;
return; return;
} }
this->pending = false;
if (this->width < 0) { Char c = next_format();
this->out.fill(' ');
this->out.setf(std::ios::left, std::ios::adjustfield);
this->width = -this->width;
}
this->out.width(this->width);
this->out.precision(this->precision < 0 ? 6 : this->precision);
Char c = *this->fmt_cur ? this->fmt_cur[0] : 's';
if (c >= 'A' && c <= 'Z') {
this->out.setf(std::ios::uppercase);
c += 'a' - 'A';
}
switch (c) { switch (c) {
case 'c': case 'c':
this->out.setf(std::ios::dec, std::ios::basefield);
this->out << runtime_cast<Char>(value); this->out << runtime_cast<Char>(value);
break; break;
case 'd': case 'i': case 'd': case 'i':
this->out.setf(std::ios::dec, std::ios::basefield);
this->out << runtime_cast<intmax_t>(value); this->out << runtime_cast<intmax_t>(value);
break; break;
case 'o': case 'o':
this->out.setf(std::ios::oct, std::ios::basefield);
this->out << runtime_cast<intmax_t>(value); this->out << runtime_cast<intmax_t>(value);
break; break;
case 'x': case 'x':
this->out.setf(std::ios::hex, std::ios::basefield);
this->out << runtime_cast<intmax_t>(value); this->out << runtime_cast<intmax_t>(value);
break; break;
case 'u': case 'u':
this->out.setf(std::ios::dec, std::ios::basefield);
this->out << runtime_cast<uintmax_t>(value); this->out << runtime_cast<uintmax_t>(value);
break; break;
case 'e': case 'e':
this->out.setf(std::ios::scientific, std::ios::floatfield);
this->out.setf(std::ios::dec, std::ios::basefield);
this->out << runtime_cast<double>(value); this->out << runtime_cast<double>(value);
break; break;
case 'f': case 'f':
this->out.setf(std::ios::fixed, std::ios::floatfield);
this->out << runtime_cast<double>(value); this->out << runtime_cast<double>(value);
break; break;
case 'g': case 'g':
this->out.setf(std::ios::dec, std::ios::basefield);
this->out.flags(this->out.flags() & ~std::ios::floatfield);
this->out << runtime_cast<double>(value); this->out << runtime_cast<double>(value);
break; break;
case 'p': case 'p':
this->out.setf(std::ios::hex, std::ios::basefield);
this->out << runtime_cast<const void *>(value); this->out << runtime_cast<const void *>(value);
break; break;
default: // s and other default: // s and other
this->out.setf(std::ios::boolalpha);
writer<Char, typename std::decay<T>::type>::write(this->out, this->precision, value); writer<Char, typename std::decay<T>::type>::write(this->out, this->precision, value);
break; break;
} }
this->fmt = *this->fmt_cur ? this->fmt_cur + 1 : this->fmt_cur;
} }
}; };

View File

@ -129,7 +129,7 @@ void AssKaraoke::ParseSyllables(AssDialogue *line, Syllable &syl) {
else { else {
std::string& otext = syl.ovr_tags[syl.text.size()]; std::string& otext = syl.ovr_tags[syl.text.size()];
// Merge adjacent override tags // Merge adjacent override tags
boost::trim_right_if(text, boost::is_any_of("}")); boost::trim_right_if(text, [](char c) { return c == '}'; });
if (!in_tag) if (!in_tag)
otext += "{"; otext += "{";

View File

@ -45,7 +45,6 @@
#include <libaegisub/scoped_ptr.h> #include <libaegisub/scoped_ptr.h>
#include <ctime> #include <ctime>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp> #include <boost/algorithm/string/split.hpp>
#include <boost/asio/ip/tcp.hpp> #include <boost/asio/ip/tcp.hpp>
#include <functional> #include <functional>
@ -322,7 +321,7 @@ void DoCheck(bool interactive) {
if (line.empty()) continue; if (line.empty()) continue;
std::vector<std::string> parsed; std::vector<std::string> parsed;
boost::split(parsed, line, boost::is_any_of("|")); boost::split(parsed, line, [](char c) { return c == '|'; });
if (parsed.size() != 6) continue; if (parsed.size() != 6) continue;
if (atoi(parsed[1].c_str()) <= GetSVNRevision()) if (atoi(parsed[1].c_str()) <= GetSVNRevision())

View File

@ -65,7 +65,7 @@ void EncoreSubtitleFormat::WriteFile(const AssFile *src, agi::fs::path const& fi
// Encore wants ; for NTSC and : for PAL // Encore wants ; for NTSC and : for PAL
// The manual suggests no other frame rates are supported // The manual suggests no other frame rates are supported
agi::SmpteFormatter ft(fps, fps.NeedsDropFrames() ? ";" : ":"); agi::SmpteFormatter ft(fps, fps.NeedsDropFrames() ? ';' : ':');
// Write lines // Write lines
int i = 0; int i = 0;

View File

@ -41,7 +41,6 @@
#include <libaegisub/make_unique.h> #include <libaegisub/make_unique.h>
#include <libaegisub/util.h> #include <libaegisub/util.h>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/predicate.hpp> #include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/split.hpp> #include <boost/algorithm/string/split.hpp>
#include <boost/filesystem/path.hpp> #include <boost/filesystem/path.hpp>
@ -107,7 +106,7 @@ std::unique_ptr<VideoProvider> CreateDummyVideoProvider(agi::fs::path const& fil
std::vector<std::string> toks; std::vector<std::string> toks;
auto const& fields = filename.string().substr(7); auto const& fields = filename.string().substr(7);
boost::split(toks, fields, boost::is_any_of(":")); boost::split(toks, fields, [](char c) { return c == ':'; });
if (toks.size() != 8) if (toks.size() != 8)
throw VideoOpenError("Too few fields in dummy video parameter list"); throw VideoOpenError("Too few fields in dummy video parameter list");