]> granicus.if.org Git - taglib/commitdiff
Make use of List iterators and setAutoDelete().
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Wed, 18 Nov 2015 06:29:04 +0000 (15:29 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Wed, 18 Nov 2015 06:29:04 +0000 (15:29 +0900)
taglib/mp4/mp4atom.cpp
taglib/mp4/mp4atom.h

index 5e94690f5f82cbbdf6c2f8fef2d0fb97af1c7fca..681589d89a50b76d44a78f21b4bd7eff3268fa16 100644 (file)
@@ -43,6 +43,8 @@ const char *MP4::Atom::containers[11] = {
 
 MP4::Atom::Atom(File *file)
 {
+  children.setAutoDelete(true);
+
   offset = file->tell();
   ByteVector header = file->readBlock(8);
   if (header.size() != 8) {
@@ -106,10 +108,6 @@ MP4::Atom::Atom(File *file)
 
 MP4::Atom::~Atom()
 {
-  for(unsigned int i = 0; i < children.size(); i++) {
-    delete children[i];
-  }
-  children.clear();
 }
 
 MP4::Atom *
@@ -118,9 +116,9 @@ MP4::Atom::find(const char *name1, const char *name2, const char *name3, const c
   if(name1 == 0) {
     return this;
   }
-  for(unsigned int i = 0; i < children.size(); i++) {
-    if(children[i]->name == name1) {
-      return children[i]->find(name2, name3, name4);
+  for(AtomList::ConstIterator it = children.begin(); it != children.end(); ++it) {
+    if((*it)->name == name1) {
+      return (*it)->find(name2, name3, name4);
     }
   }
   return 0;
@@ -130,12 +128,12 @@ MP4::AtomList
 MP4::Atom::findall(const char *name, bool recursive)
 {
   MP4::AtomList result;
-  for(unsigned int i = 0; i < children.size(); i++) {
-    if(children[i]->name == name) {
-      result.append(children[i]);
+  for(AtomList::ConstIterator it = children.begin(); it != children.end(); ++it) {
+    if((*it)->name == name) {
+      result.append(*it);
     }
     if(recursive) {
-      result.append(children[i]->findall(name, recursive));
+      result.append((*it)->findall(name, recursive));
     }
   }
   return result;
@@ -148,9 +146,9 @@ MP4::Atom::path(MP4::AtomList &path, const char *name1, const char *name2, const
   if(name1 == 0) {
     return true;
   }
-  for(unsigned int i = 0; i < children.size(); i++) {
-    if(children[i]->name == name1) {
-      return children[i]->path(path, name2, name3);
+  for(AtomList::ConstIterator it = children.begin(); it != children.end(); ++it) {
+    if((*it)->name == name1) {
+      return (*it)->path(path, name2, name3);
     }
   }
   return false;
@@ -158,6 +156,8 @@ MP4::Atom::path(MP4::AtomList &path, const char *name1, const char *name2, const
 
 MP4::Atoms::Atoms(File *file)
 {
+  atoms.setAutoDelete(true);
+
   file->seek(0, File::End);
   long end = file->tell();
   file->seek(0);
@@ -171,18 +171,14 @@ MP4::Atoms::Atoms(File *file)
 
 MP4::Atoms::~Atoms()
 {
-  for(unsigned int i = 0; i < atoms.size(); i++) {
-    delete atoms[i];
-  }
-  atoms.clear();
 }
 
 MP4::Atom *
 MP4::Atoms::find(const char *name1, const char *name2, const char *name3, const char *name4)
 {
-  for(unsigned int i = 0; i < atoms.size(); i++) {
-    if(atoms[i]->name == name1) {
-      return atoms[i]->find(name2, name3, name4);
+  for(AtomList::ConstIterator it = atoms.begin(); it != atoms.end(); ++it) {
+    if((*it)->name == name1) {
+      return (*it)->find(name2, name3, name4);
     }
   }
   return 0;
@@ -192,9 +188,9 @@ MP4::AtomList
 MP4::Atoms::path(const char *name1, const char *name2, const char *name3, const char *name4)
 {
   MP4::AtomList path;
-  for(unsigned int i = 0; i < atoms.size(); i++) {
-    if(atoms[i]->name == name1) {
-      if(!atoms[i]->path(path, name2, name3, name4)) {
+  for(AtomList::ConstIterator it = atoms.begin(); it != atoms.end(); ++it) {
+    if((*it)->name == name1) {
+      if(!(*it)->path(path, name2, name3, name4)) {
         path.clear();
       }
       return path;
@@ -202,4 +198,3 @@ MP4::Atoms::path(const char *name1, const char *name2, const char *name3, const
   }
   return path;
 }
-
index 6cdb1d42b5c9b935845c95222363ac2f01239f56..cbb0d10ad32a3330fd74f68b6d504930e11343da 100644 (file)
@@ -77,29 +77,29 @@ namespace TagLib {
     class Atom
     {
     public:
-        Atom(File *file);
-        ~Atom();
-        Atom *find(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0);
-        bool path(AtomList &path, const char *name1, const char *name2 = 0, const char *name3 = 0);
-        AtomList findall(const char *name, bool recursive = false);
-        long offset;
-        long length;
-        TagLib::ByteVector name;
-        AtomList children;
+      Atom(File *file);
+      ~Atom();
+      Atom *find(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0);
+      bool path(AtomList &path, const char *name1, const char *name2 = 0, const char *name3 = 0);
+      AtomList findall(const char *name, bool recursive = false);
+      long offset;
+      long length;
+      TagLib::ByteVector name;
+      AtomList children;
     private:
-        static const int numContainers = 11;
-        static const char *containers[11];
+      static const int numContainers = 11;
+      static const char *containers[11];
     };
 
     //! Root-level atoms
     class Atoms
     {
     public:
-        Atoms(File *file);
-        ~Atoms();
-        Atom *find(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0);
-        AtomList path(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0);
-        AtomList atoms;
+      Atoms(File *file);
+      ~Atoms();
+      Atom *find(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0);
+      AtomList path(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0);
+      AtomList atoms;
     };
 
   }