[sword-svn] r3112 - trunk/utilities/diatheke

DM Smith dmsmith at crosswire.org
Wed Mar 12 05:18:49 MST 2014


Chris,

If you want a better optimization (than pre-increment):
const char* arg = argv[i]; // I think it can be const as it won't be changing after assignment.
then use
arg where you were using argv[i];

argv[i] is equivalent to *(argv+i);

This involves temporaries, increment and dereferencing.

Using arg just involves dereferencing.

But command line argument processing, especially for an interactive program, is within a blink-of-an-eye. Optimization there is typically, just for fun, not real value.

-- DM

On Mar 12, 2014, at 8:15 AM, chrislit at crosswire.org wrote:

> Author: chrislit
> Date: 2014-03-12 05:15:24 -0700 (Wed, 12 Mar 2014)
> New Revision: 3112
> 
> Modified:
>   trunk/utilities/diatheke/diatheke.cpp
> Log:
> post- to pre-increment, because temporary variables & arithmetic operations have non-zero cost
> 
> 
> Modified: trunk/utilities/diatheke/diatheke.cpp
> ===================================================================
> --- trunk/utilities/diatheke/diatheke.cpp	2014-03-12 11:13:59 UTC (rev 3111)
> +++ trunk/utilities/diatheke/diatheke.cpp	2014-03-12 12:15:24 UTC (rev 3112)
> @@ -89,17 +89,17 @@
> 	char runquery = 0; // used to check that we have enough arguments to perform a legal query
> 	// (a querytype & text = 1 and a ref = 2)
> 	
> -	for (int i = 1; i < argc; i++) {
> +	for (int i = 1; i < argc; ++i) {
> 		if (!::stricmp("-b", argv[i])) {
> 			if (i+1 <= argc) {
> -				text = argv[i+1];
> -				i++;
> +				++i;
> +				text = argv[i];
> 				runquery |= RQ_BOOK;
> 			}
> 		}
> 		else if (!::stricmp("-s", argv[i])) {
> 			if (i+1 <= argc) {
> -				i++;
> +				++i;
> 				if (!::stricmp("phrase", argv[i])) {
> 					searchtype = ST_PHRASE;
> 				}
> @@ -127,128 +127,128 @@
> 		}
>  		else if (!::stricmp("-r", argv[i])) {
>  			if (i+1 <= argc) {
> - 				range = argv[i+1];
> - 				i++;
> +				++i;
> + 				range = argv[i];
>  			}	
>  		}
> 		else if (!::stricmp("-l", argv[i])) {
> 			if (i+1 <= argc) {
> -				locale = argv[i+1];
> -				i++;
> +				++i;
> +				locale = argv[i];
> 			}
> 		}
> 		else if (!::stricmp("-m", argv[i])) {
> 			if (i+1 <= argc) {
> -				maxverses = atoi(argv[i+1]);
> -				i++;
> +				++i;
> +				maxverses = atoi(argv[i]);
> 			}
> 		}
> 		else if (!::stricmp("-o", argv[i])) {
> 			if (i+1 <= argc) {
> -				if (strchr(argv[i+1], 'f'))
> +				++i;
> +				if (strchr(argv[i], 'f'))
> 					optionfilters |= OP_FOOTNOTES;
> -				if (strchr(argv[i+1], 'n'))
> +				if (strchr(argv[i], 'n'))
> 					optionfilters |= OP_STRONGS;
> -				if (strchr(argv[i+1], 'h'))
> +				if (strchr(argv[i], 'h'))
> 					optionfilters |= OP_HEADINGS;
> -				if (strchr(argv[i+1], 'm'))
> +				if (strchr(argv[i], 'm'))
> 					optionfilters |= OP_MORPH;
> -				if (strchr(argv[i+1], 'c'))
> +				if (strchr(argv[i], 'c'))
> 					optionfilters |= OP_CANTILLATION;
> -				if (strchr(argv[i+1], 'v'))
> +				if (strchr(argv[i], 'v'))
> 					optionfilters |= OP_HEBREWPOINTS;
> -				if (strchr(argv[i+1], 'a'))
> +				if (strchr(argv[i], 'a'))
> 					optionfilters |= OP_GREEKACCENTS;
> -				if (strchr(argv[i+1], 'l'))
> +				if (strchr(argv[i], 'l'))
> 					optionfilters |= OP_LEMMAS;
> -				if (strchr(argv[i+1], 's'))
> +				if (strchr(argv[i], 's'))
> 					optionfilters |= OP_SCRIPREF;
> -				if (strchr(argv[i+1], 'r'))
> +				if (strchr(argv[i], 'r'))
> 					optionfilters |= OP_ARSHAPE;
> -				if (strchr(argv[i+1], 'b'))
> +				if (strchr(argv[i], 'b'))
> 					optionfilters |= OP_BIDI;
> -				if (strchr(argv[i+1], 'w'))
> +				if (strchr(argv[i], 'w'))
> 					optionfilters |= OP_REDLETTERWORDS;
> -				if (strchr(argv[i+1], 'p'))
> +				if (strchr(argv[i], 'p'))
> 					optionfilters |= OP_ARABICPOINTS;
> -				if (strchr(argv[i+1], 'g'))
> +				if (strchr(argv[i], 'g'))
> 					optionfilters |= OP_GLOSSES;
> -				if (strchr(argv[i+1], 'x'))
> +				if (strchr(argv[i], 'x'))
> 					optionfilters |= OP_XLIT;
> -				if (strchr(argv[i+1], 'e'))
> +				if (strchr(argv[i], 'e'))
> 					optionfilters |= OP_ENUM;
> -				if (strchr(argv[i+1], 't'))
> +				if (strchr(argv[i], 't'))
> 					optionfilters |= OP_TRANSLITERATOR;
> -				i++;
> 			}
> 		}
> 		else if (!::stricmp("-f", argv[i])) {
> 			if (i+1 <= argc) {
> -				if (!::stricmp("thml", argv[i+1])) {
> +				++i;
> +				if (!::stricmp("thml", argv[i])) {
> 					outputformat = FMT_THML;
> 				}
> -				else if (!::stricmp("cgi", argv[i+1])) {
> +				else if (!::stricmp("cgi", argv[i])) {
> 					outputformat = FMT_CGI;
> 				}
> -				else if (!::stricmp("gbf", argv[i+1])) {
> +				else if (!::stricmp("gbf", argv[i])) {
> 					outputformat = FMT_GBF;
> 				}
> -				else if (!::stricmp("htmlhref", argv[i+1])) {
> +				else if (!::stricmp("htmlhref", argv[i])) {
> 					outputformat = FMT_HTMLHREF;
> 				}
> -				else if (!::stricmp("html", argv[i+1])) {
> +				else if (!::stricmp("html", argv[i])) {
> 					outputformat = FMT_HTML;
> 				}
> -				else if (!::stricmp("xhtml", argv[i+1])) {
> +				else if (!::stricmp("xhtml", argv[i])) {
> 					outputformat = FMT_XHTML;
> 				}
> -				else if (!::stricmp("rtf", argv[i+1])) {
> +				else if (!::stricmp("rtf", argv[i])) {
> 					outputformat = FMT_RTF;
> 				}
> -				else if (!::stricmp("osis", argv[i+1])) {
> +				else if (!::stricmp("osis", argv[i])) {
> 					outputformat = FMT_OSIS;
> 				}
> -				else if (!::stricmp("latex", argv[i+1])) {
> +				else if (!::stricmp("latex", argv[i])) {
> 					outputformat = FMT_LATEX;
> 				}
> -				else if (!::stricmp("plain", argv[i+1])) {
> +				else if (!::stricmp("plain", argv[i])) {
> 					outputformat = FMT_PLAIN;
> 				}
> -				else if (!::stricmp("webif", argv[i+1])) {
> +				else if (!::stricmp("webif", argv[i])) {
> 					outputformat = FMT_WEBIF;
> 				}
> -				i++;
> 			}
> 		}
> 		else if (!::stricmp("-e", argv[i])) {
> 			if (i+1 <= argc) {
> -				if (!::stricmp("utf8", argv[i+1])) {
> +				++i;
> +				if (!::stricmp("utf8", argv[i])) {
> 					outputencoding = ENC_UTF8;
> 				}
> -				else if (!::stricmp("rtf", argv[i+1])) {
> +				else if (!::stricmp("rtf", argv[i])) {
> 					outputencoding = ENC_RTF;
> 				}
> -				else if (!::stricmp("html", argv[i+1])) {
> +				else if (!::stricmp("html", argv[i])) {
> 					outputencoding = ENC_HTML;
> 				}
> -				else if (!::stricmp("latin1", argv[i+1])) {
> +				else if (!::stricmp("latin1", argv[i])) {
> 					outputencoding = ENC_LATIN1;
> 				}
> -				else if (!::stricmp("utf16", argv[i+1])) {
> +				else if (!::stricmp("utf16", argv[i])) {
> 					outputencoding = ENC_UTF16;
> 				}
> -				else if (!::stricmp("scsu", argv[i+1])) {
> +				else if (!::stricmp("scsu", argv[i])) {
> 					outputencoding = ENC_SCSU;
> 				}
> -				i++;
> 			}
> 		}
> 		else if (!::stricmp("-k", argv[i])) {
> -			i++;	
> +			++i;	
> 			if (i < argc) {
> 				SWBuf key = argv[i];
> -				i++;
> -				for (; i < argc; i++) {
> +				++i;
> +				for (; i < argc; ++i) {
> 					if (!::stricmp("-h", argv[i]) || !::stricmp("--help", argv[i]))
> 						printsyntax();
> 					key = key + " " + argv[i];
> @@ -261,17 +261,17 @@
> 		}
> 		else if (!::stricmp("-v", argv[i])) {
> 			if (i+1 <= argc) {
> -				variants = atoi(argv[i+1]);
> +				++i;
> +				variants = atoi(argv[i]);
> 				optionfilters |= OP_VARIANTS;
> -				i++;
> 			}
> 		}
> 		/*
> 		else if (!::stricmp("-t", argv[i])) {
> 			if (i+1 <= argc) {
> -				script = argv[i+1];
> +				++i;
> +				script = argv[i];
> 				optionfilters |= OP_TRANSLITERATOR;
> -				i++;
> 			}
> 		}
> 		*/
> 
> 
> _______________________________________________
> sword-cvs mailing list
> sword-cvs at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-cvs

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4145 bytes
Desc: not available
URL: <http://www.crosswire.org/pipermail/sword-cvs/attachments/20140312/3d751c2b/attachment.p7s>


More information about the sword-cvs mailing list