Lazy digest building.
authorCarl Hetherington <cth@carlh.net>
Tue, 31 Jul 2012 11:54:03 +0000 (12:54 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 31 Jul 2012 11:54:03 +0000 (12:54 +0100)
src/asset.cc
src/asset.h
src/picture_asset.cc
src/sound_asset.cc

index 8063603a293a820bfd1b23416309095896548ab9..de299d34a93b914bfd487a12a3fb9e88c1b11d10 100644 (file)
@@ -51,7 +51,7 @@ Asset::write_to_pkl (ostream& s) const
        s << "    <Asset>\n"
          << "      <Id>urn:uuid:" << _uuid << "</Id>\n"
          << "      <AnnotationText>" << _mxf_name << "</AnnotationText>\n"
-         << "      <Hash>" << _digest << "</Hash>\n"
+         << "      <Hash>" << digest() << "</Hash>\n"
          << "      <Size>" << filesystem::file_size(mxf_path()) << "</Size>\n"
          << "      <Type>application/mxf</Type>\n"
          << "    </Asset>\n";
@@ -114,7 +114,7 @@ Asset::equals (shared_ptr<const Asset> other, EqualityFlags flags) const
        
        if (flags & MXF_BITWISE) {
 
-               if (_digest != other->_digest) {
+               if (digest() != other->digest()) {
                        notes.push_back ("MXF digests differ");
                }
                
@@ -148,3 +148,17 @@ Asset::equals (shared_ptr<const Asset> other, EqualityFlags flags) const
 
        return notes;
 }
+
+string
+Asset::digest () const
+{
+       if (_digest.empty ()) {
+               _digest = make_digest (mxf_path().string(), 0);
+       }
+
+       return _digest;
+}
+
+               
+               
+       
index f6d1725650d512fe1f181c2679a4a2d3a4fb0237..cf161104be681706970bbeb06232a517a5179b32 100644 (file)
@@ -78,6 +78,7 @@ protected:
        void fill_writer_info (ASDCP::WriterInfo* w) const;
 
        boost::filesystem::path mxf_path () const;
+       std::string digest () const;
 
        /** Directory that our MXF file is in */
        std::string _directory;
@@ -91,8 +92,10 @@ protected:
        int _length;
        /** Our UUID */
        std::string _uuid;
+
+private:       
        /** Digest of our MXF */
-       std::string _digest;
+       mutable std::string _digest;
 };
 
 }
index c3bf39e8c7a6d223e7ea8eb69a0a2c686badaa43..abf9fcd97e3103ad75cf27c0f517f71845c2e00e 100644 (file)
@@ -74,7 +74,7 @@ PictureAsset::PictureAsset (string directory, string mxf_name, int fps, int leng
        , _width (width)
        , _height (height)
 {
-       _digest = make_digest (mxf_path().string(), 0);
+
 }
 
 string
@@ -123,8 +123,6 @@ PictureAsset::construct (sigc::slot<string, int> get_path)
        if (ASDCP_FAILURE (mxf_writer.Finalize())) {
                throw MiscError ("error in finalising video MXF");
        }
-
-       _digest = make_digest (mxf_path().string(), _progress);
 }
 
 void
index dae66f900659ff17346e2b7f90fe06920272767d..9a738a08f89d8e4a7e45444e694c9de37dc017e8 100644 (file)
@@ -57,7 +57,7 @@ SoundAsset::SoundAsset (string directory, string mxf_name, int fps, int length)
        : Asset (directory, mxf_name, 0, fps, length)
        , _channels (0)
 {
-       _digest = make_digest (mxf_path().string(), 0);
+
 }
 
 string
@@ -161,8 +161,6 @@ SoundAsset::construct (sigc::slot<string, Channel> get_path)
        if (ASDCP_FAILURE (mxf_writer.Finalize())) {
                throw MiscError ("could not finalise audio MXF");
        }
-
-       _digest = make_digest (mxf_path().string(), _progress);
 }
 
 void