summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-08-11 12:49:23 +0100
committerCarl Hetherington <cth@carlh.net>2016-08-12 09:14:06 +0100
commit94056bf7f8fdef32da3cd78eff68d58560b4e6be (patch)
tree937fad363dc94d65ec20fa2ff7aa3b303310d80f /src/lib
parent73654117144c6de0ec4efe39ddc88485df546cc9 (diff)
Replace incorrect uses of raw_convert with a new locale_convert.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_content.cc1
-rw-r--r--src/lib/cinema.cc5
-rw-r--r--src/lib/content.cc5
-rw-r--r--src/lib/dcp_content.cc1
-rw-r--r--src/lib/ffmpeg_content.cc3
-rw-r--r--src/lib/locale_convert.cc122
-rw-r--r--src/lib/locale_convert.h81
-rw-r--r--src/lib/user_property.h4
-rw-r--r--src/lib/util.cc12
-rw-r--r--src/lib/video_content.cc5
-rw-r--r--src/lib/wscript1
11 files changed, 226 insertions, 14 deletions
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc
index e66b8b998..25a7ef8a5 100644
--- a/src/lib/audio_content.cc
+++ b/src/lib/audio_content.cc
@@ -24,6 +24,7 @@
#include "config.h"
#include "frame_rate_change.h"
#include "compose.hpp"
+#include "locale_convert.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
diff --git a/src/lib/cinema.cc b/src/lib/cinema.cc
index 469cf2e6b..61862fa6d 100644
--- a/src/lib/cinema.cc
+++ b/src/lib/cinema.cc
@@ -30,6 +30,7 @@
using std::list;
using std::string;
using boost::shared_ptr;
+using dcp::raw_convert;
Cinema::Cinema (cxml::ConstNodePtr node)
: name (node->string_child ("Name"))
@@ -71,8 +72,8 @@ Cinema::as_xml (xmlpp::Element* parent) const
parent->add_child("Notes")->add_child_text (notes);
- parent->add_child("UTCOffsetHour")->add_child_text (dcp::raw_convert<string> (_utc_offset_hour));
- parent->add_child("UTCOffsetMinute")->add_child_text (dcp::raw_convert<string> (_utc_offset_minute));
+ parent->add_child("UTCOffsetHour")->add_child_text (raw_convert<string> (_utc_offset_hour));
+ parent->add_child("UTCOffsetMinute")->add_child_text (raw_convert<string> (_utc_offset_minute));
BOOST_FOREACH (shared_ptr<Screen> i, _screens) {
i->as_xml (parent->add_child ("Screen"));
diff --git a/src/lib/content.cc b/src/lib/content.cc
index 0fd503edd..536036ff7 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -27,6 +27,7 @@
#include "content_factory.h"
#include "exceptions.h"
#include "film.h"
+#include "locale_convert.h"
#include "job.h"
#include "compose.hpp"
#include <dcp/raw_convert.h>
@@ -365,7 +366,7 @@ Content::add_properties (list<UserProperty>& p) const
UserProperty (
UserProperty::VIDEO,
_("Frame rate"),
- raw_convert<string> (_video_frame_rate.get(), 5),
+ locale_convert<string> (_video_frame_rate.get(), 5),
_("frames per second")
)
);
@@ -374,7 +375,7 @@ Content::add_properties (list<UserProperty>& p) const
UserProperty (
UserProperty::GENERAL,
_("Prepared for video frame rate"),
- raw_convert<string> (_video_frame_rate.get(), 5),
+ locale_convert<string> (_video_frame_rate.get(), 5),
_("frames per second")
)
);
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index 9e767596c..44c7ce578 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -30,6 +30,7 @@
#include "dcp_decoder.h"
#include "subtitle_content.h"
#include <dcp/dcp.h>
+#include <dcp/raw_convert.h>
#include <dcp/exceptions.h>
#include <dcp/reel_picture_asset.h>
#include <dcp/reel.h>
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index d64c82971..71cda084c 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -33,6 +33,7 @@
#include "exceptions.h"
#include "frame_rate_change.h"
#include "subtitle_content.h"
+#include "locale_convert.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
extern "C" {
@@ -566,7 +567,7 @@ FFmpegContent::add_properties (list<UserProperty>& p) const
p.push_back (UserProperty (UserProperty::VIDEO, _("Colourspace"), spaces[_colorspace]));
if (_bits_per_pixel) {
- p.push_back (UserProperty (UserProperty::VIDEO, _("Bits per pixel"), raw_convert<string> (_bits_per_pixel.get ())));
+ p.push_back (UserProperty (UserProperty::VIDEO, _("Bits per pixel"), _bits_per_pixel.get ()));
}
}
diff --git a/src/lib/locale_convert.cc b/src/lib/locale_convert.cc
new file mode 100644
index 000000000..6358c0f8c
--- /dev/null
+++ b/src/lib/locale_convert.cc
@@ -0,0 +1,122 @@
+/*
+ Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "locale_convert.h"
+#include <string>
+#include <inttypes.h>
+
+using std::string;
+
+template<>
+string
+locale_convert (int x, int)
+{
+ char buffer[64];
+ snprintf (buffer, sizeof(buffer), "%d", x);
+ return buffer;
+}
+
+template<>
+string
+locale_convert (int64_t x, int)
+{
+ char buffer[64];
+ snprintf (buffer, sizeof(buffer), "%" PRId64, x);
+ return buffer;
+}
+
+template<>
+string
+locale_convert (float x, int precision)
+{
+ char format[64];
+ snprintf (format, sizeof(format), "%%.%df", precision);
+ char buffer[64];
+ snprintf (buffer, sizeof(buffer), format, x);
+ return buffer;
+}
+
+template<>
+string
+locale_convert (double x, int precision)
+{
+ char format[64];
+ snprintf (format, sizeof(format), "%%.%df", precision);
+ char buffer[64];
+ snprintf (buffer, sizeof(buffer), format, x);
+ return buffer;
+}
+
+template<>
+string
+locale_convert (string x, int)
+{
+ return x;
+}
+
+template<>
+string
+locale_convert (char* x, int)
+{
+ return x;
+}
+
+template<>
+string
+locale_convert (char const * x, int)
+{
+ return x;
+}
+
+template<>
+int
+locale_convert (string x, int)
+{
+ int y = 0;
+ sscanf (x.c_str(), "%d", &y);
+ return y;
+}
+
+template<>
+int64_t
+locale_convert (string x, int)
+{
+ int64_t y = 0;
+ sscanf (x.c_str(), "%" PRId64, &y);
+ return y;
+}
+
+template<>
+float
+locale_convert (string x, int)
+{
+ float y = 0;
+ sscanf (x.c_str(), "%f", &y);
+ return y;
+}
+
+template<>
+double
+locale_convert (string x, int)
+{
+ double y = 0;
+ sscanf (x.c_str(), "%lf", &y);
+ return y;
+}
diff --git a/src/lib/locale_convert.h b/src/lib/locale_convert.h
new file mode 100644
index 000000000..b5c38caae
--- /dev/null
+++ b/src/lib/locale_convert.h
@@ -0,0 +1,81 @@
+/*
+ Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef DCPOMATIC_LOCALE_CONVERT_H
+#define DCPOMATIC_LOCALE_CONVERT_H
+
+#include <boost/static_assert.hpp>
+#include <string>
+
+template <typename P, typename Q>
+P
+locale_convert (Q x, int precision = 16)
+{
+ /* We can't write a generic version of locale_convert; all required
+ versions must be specialised.
+ */
+ BOOST_STATIC_ASSERT (sizeof (Q) == 0);
+}
+
+template <>
+std::string
+locale_convert (int x, int);
+
+template <>
+std::string
+locale_convert (int64_t x, int);
+
+template <>
+std::string
+locale_convert (float x, int precision);
+
+template <>
+std::string
+locale_convert (double x, int precision);
+
+template <>
+std::string
+locale_convert (std::string x, int);
+
+template <>
+std::string
+locale_convert (char* x, int);
+
+template <>
+std::string
+locale_convert (char const * x, int);
+
+template <>
+int
+locale_convert (std::string x, int);
+
+template <>
+int64_t
+locale_convert (std::string x, int);
+
+template <>
+float
+locale_convert (std::string x, int);
+
+template <>
+double
+locale_convert (std::string x, int);
+
+#endif
diff --git a/src/lib/user_property.h b/src/lib/user_property.h
index 6e147fd76..8b69b7687 100644
--- a/src/lib/user_property.h
+++ b/src/lib/user_property.h
@@ -21,7 +21,7 @@
#ifndef DCPOMATIC_USER_PROPERTY_H
#define DCPOMATIC_USER_PROPERTY_H
-#include <dcp/raw_convert.h>
+#include "locale_convert.h"
class UserProperty
{
@@ -37,7 +37,7 @@ public:
UserProperty (Category category_, std::string key_, T value_, std::string unit_ = "")
: category (category_)
, key (key_)
- , value (dcp::raw_convert<std::string> (value_))
+ , value (locale_convert<std::string> (value_))
, unit (unit_)
{}
diff --git a/src/lib/util.cc b/src/lib/util.cc
index da45919b4..eedc7ddb5 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -36,7 +36,9 @@
#include "digester.h"
#include "audio_processor.h"
#include "compose.hpp"
+#include "locale_convert.h"
#include <dcp/util.h>
+#include <dcp/raw_convert.h>
#include <dcp/picture_asset.h>
#include <dcp/sound_asset.h>
#include <dcp/subtitle_asset.h>
@@ -140,10 +142,10 @@ seconds_to_approximate_hms (int s)
if (hours) {
if (m > 30 && !minutes) {
/// TRANSLATORS: h here is an abbreviation for hours
- ap += raw_convert<string>(h + 1) + _("h");
+ ap += locale_convert<string>(h + 1) + _("h");
} else {
/// TRANSLATORS: h here is an abbreviation for hours
- ap += raw_convert<string>(h) + _("h");
+ ap += locale_convert<string>(h) + _("h");
}
if (minutes || seconds) {
@@ -155,10 +157,10 @@ seconds_to_approximate_hms (int s)
/* Minutes */
if (s > 30 && !seconds) {
/// TRANSLATORS: m here is an abbreviation for minutes
- ap += raw_convert<string>(m + 1) + _("m");
+ ap += locale_convert<string>(m + 1) + _("m");
} else {
/// TRANSLATORS: m here is an abbreviation for minutes
- ap += raw_convert<string>(m) + _("m");
+ ap += locale_convert<string>(m) + _("m");
}
if (seconds) {
@@ -169,7 +171,7 @@ seconds_to_approximate_hms (int s)
if (seconds) {
/* Seconds */
/// TRANSLATORS: s here is an abbreviation for seconds
- ap += raw_convert<string>(s) + _("s");
+ ap += locale_convert<string>(s) + _("s");
}
return ap;
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index 20e0866a1..ac038678c 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -30,6 +30,7 @@
#include "exceptions.h"
#include "frame_rate_change.h"
#include "log.h"
+#include "locale_convert.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <dcp/colour_matrix.h>
@@ -456,8 +457,8 @@ VideoContent::processing_description () const
void
VideoContent::add_properties (list<UserProperty>& p) const
{
- p.push_back (UserProperty (UserProperty::VIDEO, _("Length"), raw_convert<string> (length ()), _("video frames")));
- p.push_back (UserProperty (UserProperty::VIDEO, _("Size"), raw_convert<string> (size().width) + "x" + raw_convert<string> (size().height)));
+ p.push_back (UserProperty (UserProperty::VIDEO, _("Length"), length (), _("video frames")));
+ p.push_back (UserProperty (UserProperty::VIDEO, _("Size"), size().width + "x" + size().height));
}
void
diff --git a/src/lib/wscript b/src/lib/wscript
index 911ee0af4..074c12ad4 100644
--- a/src/lib/wscript
+++ b/src/lib/wscript
@@ -94,6 +94,7 @@ sources = """
job.cc
job_manager.cc
json_server.cc
+ locale_convert.cc
log.cc
log_entry.cc
magick_image_proxy.cc