Bv2.1 7.2.3: Check that subtitle <StartTime> exists and is 0.
[libdcp.git] / src / data.cc
index 87c4c16004f0433d3cad92b8a435925f38c00b81..23e62573084cbdf4c5d0d8cd3567ce6015b5e5b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2015-2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
 
     You should have received a copy of the GNU General Public License
     along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
 */
 
+
 #include "data.h"
 #include "util.h"
 #include "exceptions.h"
 #include <cstdio>
 #include <cerrno>
 
-using boost::shared_array;
-using namespace dcp;
-
-Data::Data ()
-       : _size (0)
-{
-
-}
-
-Data::Data (int size)
-       : _data (new uint8_t[size])
-       , _size (size)
-{
-
-}
-
-Data::Data (uint8_t const * data, int size)
-       : _data (new uint8_t[size])
-       , _size (size)
-{
-       memcpy (_data.get(), data, size);
-}
-
-Data::Data (shared_array<uint8_t> data, int size)
-       : _data (data)
-       , _size (size)
-{
-
-}
-
-Data::Data (boost::filesystem::path file)
-{
-       _size = boost::filesystem::file_size (file);
-       _data.reset (new uint8_t[_size]);
 
-       FILE* f = fopen_boost (file, "rb");
-       if (!f) {
-               throw FileError ("could not open file for reading", file, errno);
-       }
-
-       size_t const r = fread (_data.get(), 1, _size, f);
-       if (r != size_t (_size)) {
-               fclose (f);
-               throw FileError ("could not read from file", file, errno);
-       }
+using namespace dcp;
 
-       fclose (f);
-}
 
 void
 Data::write (boost::filesystem::path file) const
@@ -79,17 +49,33 @@ Data::write (boost::filesystem::path file) const
        if (!f) {
                throw FileError ("could not write to file", file, errno);
        }
-       size_t const r = fwrite (_data.get(), 1, _size, f);
-       if (r != size_t (_size)) {
+       size_t const r = fwrite (data(), 1, size(), f);
+       if (r != size_t(size())) {
                fclose (f);
                throw FileError ("could not write to file", file, errno);
        }
        fclose (f);
 }
 
+
 void
 Data::write_via_temp (boost::filesystem::path temp, boost::filesystem::path final) const
 {
        write (temp);
        boost::filesystem::rename (temp, final);
 }
+
+
+bool
+dcp::operator== (Data const & a, Data const & b)
+{
+       return (a.size() == b.size() && memcmp(a.data(), b.data(), a.size()) == 0);
+}
+
+
+bool
+dcp::operator!= (Data const & a, Data const & b)
+{
+       return (a.size() != b.size() || memcmp(a.data(), b.data(), a.size()) != 0);
+}
+