[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:45:03 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=5ccb535

The following commit has been merged in the master branch:
commit 5ccb535bdc6f4d14ba97f9d552c75df8e695d971
Author: Robin Mills <robin at clanmills.com>
Date:   Fri Apr 10 21:56:17 2015 +0000

    #1054.  More polishing.  Adding clarification to the recursion.  Other code simplification/elimination.
---
 samples/exiv2json.cpp | 83 ++++++++++++++++++++-------------------------------
 1 file changed, 33 insertions(+), 50 deletions(-)

diff --git a/samples/exiv2json.cpp b/samples/exiv2json.cpp
index f27223f..3dbb732 100644
--- a/samples/exiv2json.cpp
+++ b/samples/exiv2json.cpp
@@ -69,94 +69,87 @@ bool getToken(std::string& in,Token& token)
 
 Jzon::Node& addToTree(Jzon::Node& r1,Token token)
 {
-	std::string  key    = token.n  ;
-	size_t       index  = token.i-1; // array Eg: "History[1]" indexed from 1.  Jzon expects 0 based index.
-	bool         bArray = token.a  ;
-
 	Jzon::Object object ;
 	Jzon::Array  array  ;
 
+	std::string  key    = token.n  ;
+	size_t       index  = token.i-1; // array Eg: "History[1]" indexed from 1.  Jzon expects 0 based index.
+	Jzon::Node&  empty  = token.a ? (Jzon::Node&) array : (Jzon::Node&) object ;
+
 	if (  r1.IsObject() ) {
 		Jzon::Object& o1 = r1.AsObject();
-		if ( !o1.Has(key) ) {
-			if ( bArray ) o1.Add(key,array); else o1.Add(key,object);
-		}
+		if (  !o1.Has(key) ) o1.Add(key,empty);
 		return o1.Get(key);
 	} else if ( r1.IsArray() ) {
 		Jzon::Array& a1 = r1.AsArray();
-		while ( a1.GetCount() <= index ) {
-			if ( bArray ) a1.Add(array); else a1.Add(object);
-		}
-		return a1.Get(index);
+		while ( a1.GetCount() <= index ) a1.Add(empty);
+		return  a1.Get(index);
 	}
 	return r1;
 }
 
-Jzon::Node& recursivelyBuildTree(Jzon::Node& rt,Tokens& tokens,size_t k)
+Jzon::Node& recursivelyBuildTree(Jzon::Node& root,Tokens& tokens,size_t k)
 {
-	return --k == 0 ? addToTree(rt,tokens[0]) :  addToTree(   recursivelyBuildTree(rt,tokens,k)     ,tokens[k]);
+	return addToTree( k==0 ? root : recursivelyBuildTree(root,tokens,k-1), tokens[k] );
 }
 
 // build the json tree for this key.  return location and discover the name
-Jzon::Node& objectForKey(const std::string Key,Jzon::Object& rt,std::string& name)
+Jzon::Node& objectForKey(const std::string Key,Jzon::Object& root,std::string& name)
 {
     // Parse the key
     Tokens      tokens ;
     Token       token  ;
     std::string input  = Key ; // Example: "XMP.xmp.MP.RegionInfo/MPRI:Regions[1]/MPReg:Rectangle"
-    while ( getToken(input,token) ) {
-		tokens.push_back(token);
-		name = token.n ;
-    }
-	size_t  l  = tokens.size()-1; // leave leaf name to push()
-	return recursivelyBuildTree(rt,tokens,l);
+    while ( getToken(input,token) ) tokens.push_back(token);
+	size_t      l      = tokens.size()-1; // leave leaf name to push()
+	name               = tokens[l].n ;
+	return recursivelyBuildTree(root,tokens,l-1);
 
 #if 0
 	// recursivelyBuildTree:
 	// Go to the root.  Climb out adding objects or arrays to create the tree
 	// The leaf is pushed on the top by the caller of objectForKey()
 	// The recursion could be expressed by these if statements:
-	if ( l == 1 ) return                                  addToTree(rt,tokens[0]);
-	if ( l == 2 ) return                        addToTree(addToTree(rt,tokens[0]),tokens[1]);
-	if ( l == 3 ) return              addToTree(addToTree(addToTree(rt,tokens[0]),tokens[1]),tokens[2]);
-	if ( l == 4 ) return    addToTree(addToTree(addToTree(addToTree(rt,tokens[0]),tokens[1]),tokens[2]),tokens[3]);
+	if ( l == 1 ) return                               addToTree(root,tokens[0]);
+	if ( l == 2 ) return                     addToTree(addToTree(root,tokens[0]),tokens[1]);
+	if ( l == 3 ) return           addToTree(addToTree(addToTree(root,tokens[0]),tokens[1]),tokens[2]);
+	if ( l == 4 ) return addToTree(addToTree(addToTree(addToTree(root,tokens[0]),tokens[1]),tokens[2]),tokens[3]);
 	...
 #endif
 }
 
 bool isObject(std::string& value)
 {
-	return value.compare(std::string("type=\"Struct\""))==0;
+	return !value.compare(std::string("type=\"Struct\""));
 }
 
 bool isArray(std::string& value)
 {
-	return value.compare(std::string("type=\"Seq\""))==0
-	||     value.compare(std::string("type=\"Bag\""))==0
-	||     value.compare(std::string("type=\"Alt\""))==0
+	return !value.compare(std::string("type=\"Seq\""))
+	||     !value.compare(std::string("type=\"Bag\""))
+	||     !value.compare(std::string("type=\"Alt\""))
 	;
 }
 
-#define STORE(son,key,value) \
- 	if  (json.IsObject()) json.AsObject().Add(key,value);\
- 	else                  json.AsArray() .Add(    value)
+#define STORE(node,key,value) \
+ 	if  (node.IsObject()) node.AsObject().Add(key,value);\
+ 	else                  node.AsArray() .Add(    value)
 
 template <class T>
-void push(Jzon::Node& json,const std::string& key,T i)
+void push(Jzon::Node& node,const std::string& key,T i)
 {
     std::string value = i->value().toString();
-	if ( !json.IsArray() && !json.IsObject() ) return ;
 
     switch ( i->typeId() ) {
         case Exiv2::xmpText:
 			 if (        ::isObject(value) ) {
 				 Jzon::Object   v;
-				 STORE(json,key,v);
+				 STORE(node,key,v);
 			 } else if ( ::isArray(value) ) {
 				 Jzon::Array    v;
-				 STORE(json,key,v);
+				 STORE(node,key,v);
 			 } else {
-				 STORE(json,key,value);
+				 STORE(node,key,value);
 			 }
     	break;
 
@@ -166,12 +159,12 @@ void push(Jzon::Node& json,const std::string& key,T i)
         case Exiv2::signedByte:
         case Exiv2::signedShort:
         case Exiv2::signedLong:
-			 STORE(json,key,(int)i->value().toLong());
+			 STORE(node,key,(int)i->value().toLong());
 	    break;
 
         case Exiv2::tiffFloat:
         case Exiv2::tiffDouble:
-			 STORE(json,key,i->value().toFloat());
+			 STORE(node,key,i->value().toFloat());
         break;
 
         case Exiv2::unsignedRational:
@@ -180,7 +173,7 @@ void push(Jzon::Node& json,const std::string& key,T i)
              Exiv2::Rational rat = i->value().toRational();
              arr.Add(rat.first );
              arr.Add(rat.second);
-			 STORE(json,key,arr);
+			 STORE(node,key,arr);
         } break;
 
         default:
@@ -203,7 +196,7 @@ void push(Jzon::Node& json,const std::string& key,T i)
              	    value = value.substr(0,pos);
              }
              if ( key == "MakerNote") return;
-       	     STORE(json,key,value);
+       	     STORE(node,key,value);
         break;
     }
 }
@@ -242,16 +235,6 @@ void fileSystemPush(const char* path,Jzon::Node& nfs)
     fs.Add("st_blocks" ,(int) blocks        ); /* number of 512B blocks allocated */
 }
 
-std::string escape(Exiv2::XmpData::const_iterator it,bool bValue)
-{
-	std::string   result ;
-
-	std::ostringstream os;
-	if ( bValue ) os << it->value() ; else os << it->key() ;
-
-	return os.str();
-}
-
 int main(int argc, char* const argv[])
 try {
     if (argc < 2 || argc > 3) {

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list