{"id":65,"date":"2007-06-04T12:58:37","date_gmt":"2007-06-04T17:58:37","guid":{"rendered":"http:\/\/www.pixelwit.com\/blog\/2007\/06\/04\/improving-the-limit-function\/"},"modified":"2009-08-13T21:25:13","modified_gmt":"2009-08-14T02:25:13","slug":"improving-the-limit-function","status":"publish","type":"post","link":"https:\/\/www.pixelwit.com\/blog\/2007\/06\/04\/improving-the-limit-function\/","title":{"rendered":"Improving the Limit Function"},"content":{"rendered":"<p>As a continuation of a previous post &#8220;<a href=\"https:\/\/www.pixelwit.com\/blog\/2007\/05\/how-to-limit-a-number-between-2-values\/\">How to Limit a Number Between Two Values<\/a>&#8221; I thought I&#8217;d make my &#8220;limiting&#8221; code a little more versatile.<\/p>\n<p>The previous post used the following code to &#8216;limit&#8217; or &#8216;constrain&#8217; a number between a low and high value:<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Limit a number between two values.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limit <span class=\"br0\">&#40;<\/span>num, lo, hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&lt;<\/span> lo<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> lo;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&gt;<\/span> hi<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> hi;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>But what if you don&#8217;t want to, or can&#8217;t, control the order of the &#8220;lo&#8221; and &#8220;hi&#8221; arguments?<!--more-->  Currently, if you try something like &#8220;limit(10, 60, 50)&#8221; the above limit function incorrectly returns &#8220;60&#8221;.  Wouldn&#8217;t it be easier if the function properly limited the first argument regardless of the order of the second and third arguments?  In other words, &#8220;limit(10, 50, 60)&#8221; and &#8220;limit(10, 60, 50)&#8221; would both produce &#8220;50&#8221;.<\/p>\n<p>Implementing this improvement is a simple matter of adding a conditional statement to the beginning of the &#8220;limit&#8221; function to determine whether the second or third argument is larger and then proceeding accordingly.  The new version looks like this:<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Limit a number between two values.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limit <span class=\"br0\">&#40;<\/span>num, limA, limB<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>limA <span class=\"sy0\">&lt;<\/span>= limB<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&lt;<\/span> limA<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limA;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&gt;<\/span> limB<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limB;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&gt;<\/span> limA<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limA;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&lt;<\/span> limB<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limB;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>And when we add this new version to the previous code sample we get this:<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;height:700px;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Limit a number between two values.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limit <span class=\"br0\">&#40;<\/span>num, limA, limB<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>limA <span class=\"sy0\">&lt;<\/span>= limB<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&lt;<\/span> limA<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limA;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&gt;<\/span> limB<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limB;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&gt;<\/span> limA<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limA;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num <span class=\"sy0\">&lt;<\/span> limB<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> limB;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Build Description textfields.<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LoDescTF&quot;<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">50<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLoDescTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Limit A&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LimitedDescTF&quot;<\/span>, <span class=\"nu0\">20<\/span>, <span class=\"nu0\">200<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLimitedDescTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Limited Value&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;HiDescTF&quot;<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">350<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nHiDescTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Limit B&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Build User-input textfields.<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;ALimitTF&quot;<\/span>, <span class=\"nu0\">11<\/span>, <span class=\"nu0\">50<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nALimitTF.<span class=\"kw3\">type<\/span> = <span class=\"st0\">&quot;input&quot;<\/span>;<br \/>\nALimitTF.<span class=\"kw3\">border<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nALimitTF.<span class=\"kw3\">restrict<\/span> = <span class=\"st0\">&quot;0-9&quot;<\/span>;<br \/>\nALimitTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;0&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LimitedTF&quot;<\/span>, <span class=\"nu0\">21<\/span>, <span class=\"nu0\">200<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">type<\/span> = <span class=\"st0\">&quot;input&quot;<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">border<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">restrict<\/span> = <span class=\"st0\">&quot;0-9&quot;<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;50&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;BLimitTF&quot;<\/span>, <span class=\"nu0\">31<\/span>, <span class=\"nu0\">350<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nBLimitTF.<span class=\"kw3\">type<\/span> = <span class=\"st0\">&quot;input&quot;<\/span>;<br \/>\nBLimitTF.<span class=\"kw3\">border<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nBLimitTF.<span class=\"kw3\">restrict<\/span> = <span class=\"st0\">&quot;0-9&quot;<\/span>;<br \/>\nBLimitTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;100&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Build Instructions textfield.<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Instructions&quot;<\/span>, <span class=\"nu0\">40<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">60<\/span>, <span class=\"nu0\">480<\/span>, <span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nInstructions.<span class=\"kw3\">wordWrap<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nInstructions.<span class=\"kw3\">multiline<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nInstructions.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Type a number in the middle box and press the enter key to constrain the number between the the two limiting values&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Limit the value in the middle box when the Enter key is pressed.<\/span><br \/>\nLimitedTF.<span class=\"kw3\">onKeyDown<\/span> = <span class=\"kw2\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Key<\/span>.<span class=\"kw3\">isDown<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Key<\/span>.<span class=\"kw3\">ENTER<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> aa = ALimitTF.<span class=\"kw3\">text<\/span> - <span class=\"nu0\">0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> bb = BLimitTF.<span class=\"kw3\">text<\/span> - <span class=\"nu0\">0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> lim = <span class=\"kw3\">this<\/span>.<span class=\"kw3\">text<\/span> - <span class=\"nu0\">0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">this<\/span>.<span class=\"kw3\">text<\/span> = limit<span class=\"br0\">&#40;<\/span>lim, aa, bb<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">Key<\/span>.<span class=\"kw3\">addListener<\/span><span class=\"br0\">&#40;<\/span>LimitedTF<span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>And the code above produces the following SWF:<\/p>\n\n<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t\t\tid=\"fm_limitbetweenvalues_04_914832783\"\n\t\t\tclass=\"flashmovie\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"100\">\n\t<param name=\"movie\" value=\"\/blog\/wp-content\/uploads\/2007\/06\/limitbetweenvalues_04.swf\" \/>\n\t<!--[if !IE]>-->\n\t<object\ttype=\"application\/x-shockwave-flash\"\n\t\t\tdata=\"\/blog\/wp-content\/uploads\/2007\/06\/limitbetweenvalues_04.swf\"\n\t\t\tname=\"fm_limitbetweenvalues_04_914832783\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"100\">\n\t<!--<![endif]-->\n\t\t\n\t<!--[if !IE]>-->\n\t<\/object>\n\t<!--<![endif]-->\n<\/object>\n<p>As you can see, the middle number will now be limited (restricted or constrained) between the two outer numbers regardless of their order.<\/p>\n<p>I hope you find it useful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An ActionScript tutorial examining various techniques used to limit a number between two unknown values.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[8],"tags":[23,36],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-flash","tag-actionscript","tag-swfs"],"_links":{"self":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":0,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}