<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19523351</id><updated>2011-04-21T17:26:40.762-07:00</updated><title type='text'>Coding Cubicle</title><subtitle type='html'>&lt;img src="http://img238.imageshack.us/img238/839/codingcubicleuc5.png" alt="Coding Cubicle" /&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19523351.post-8908266407264828048</id><published>2007-01-15T17:19:00.000-08:00</published><updated>2008-11-12T09:19:51.845-08:00</updated><title type='text'>Making Java Strings Simple</title><content type='html'>Your professor may tell you that using the String concatenation operator "+" can be inefficient. This is not entirely true.&lt;br /&gt;&lt;div class="code"&gt;&lt;span class="normal"&gt;String str &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;"foo"&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="symbol"&gt;+&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;"bar"&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="symbol"&gt;+&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;"Oh my, there must be a more efficient way to concatenate a String"&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The above code is optimized by the compiler into something like this&lt;br /&gt;&lt;div class="code"&gt;&lt;span class="normal"&gt;StringBuffer/Builder* _temp &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span class="normal"&gt; StringBuffer/Builder&lt;/span&gt;&lt;span class="symbol"&gt;().&lt;/span&gt;&lt;span class="function"&gt;append&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"foo"&lt;/span&gt;&lt;span class="symbol"&gt;).&lt;/span&gt;&lt;span class="function"&gt;append&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"bar"&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;br&gt;.&lt;/span&gt;&lt;span class="function"&gt;append&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"Oh my, there must be a more efficient way to concatenate a String"&lt;/span&gt;&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;String str &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; _temp&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;toString&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;So which is more efficient for you, typing 97 characters or 191 characters? More than 100% more typing for the same byte code.&lt;br /&gt;&lt;br /&gt;There are exceptions though. The most important one being loops.&lt;br /&gt;&lt;div class="code"&gt;&lt;span class="normal"&gt;StringBuffer/Builder _temp &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span class="normal"&gt; StringBuffer/Builder&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;while&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="function"&gt;moreDataToAppend&lt;/span&gt;&lt;span class="symbol"&gt;())&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;    _temp&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;append&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;someString&lt;/span&gt;&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;String str &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; _temp&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;toString&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The above is preferred to this&lt;br /&gt;&lt;div class="code"&gt;&lt;span class="normal"&gt;String str &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;""&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;while&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="function"&gt;moreDataToAppend&lt;/span&gt;&lt;span class="symbol"&gt;())&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;    str &lt;/span&gt;&lt;span class="symbol"&gt;+&lt;/span&gt;&lt;span class="normal"&gt; someString&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;because the second example creates a new StringBuffer/Builder for each iteration (read "more resources are used"). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is some bytecode to back these claims. First the &lt;b&gt;slower&lt;/b&gt; way:&lt;br /&gt;&lt;div class="code"&gt;7:   getstatic       #3; //Field i:I  &lt;b&gt;&lt;----Here is the beginning of the loop&lt;/b&gt;&lt;br /&gt;10:  bipush  36&lt;br /&gt;12:  if_icmpge       51&lt;br /&gt;15:  new     #4; //class java/lang/StringBuilder&lt;br /&gt;18:  dup&lt;br /&gt;19:  invokespecial   #5; //Method java/lang/StringBuilder."&lt;init&gt;":()V &lt;b&gt;&lt;----Here is&lt;br /&gt;       the allocation of the StringBuilder (this is invoked in every iteration of the loop)&lt;/b&gt;&lt;br /&gt;22:  aload_1&lt;br /&gt;23:  invokevirtual   #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)&lt;br /&gt;       Ljava/lang/StringBuilder;&lt;br /&gt;26:  getstatic       #7; //Field data:[Ljava/lang/String;&lt;br /&gt;29:  getstatic       #3; //Field i:I&lt;br /&gt;32:  aaload&lt;br /&gt;33:  invokevirtual   #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)&lt;br /&gt;       Ljava/lang/StringBuilder;&lt;br /&gt;36:  invokevirtual   #8; //Method java/lang/StringBuilder.toString:()&lt;br /&gt;       Ljava/lang/String;  &lt;b&gt;&lt;----This can also be move outside of the loop&lt;/b&gt;&lt;br /&gt;39:  astore_1&lt;br /&gt;40:  getstatic       #3; //Field i:I&lt;br /&gt;43:  iconst_1&lt;br /&gt;44:  iadd&lt;br /&gt;45:  putstatic       #3; //Field i:I&lt;br /&gt;48:  goto    7  &lt;b&gt;&lt;----Here is the end of the loop&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And now the &lt;b&gt;quicker&lt;/b&gt; way:&lt;br /&gt;&lt;div class="code"&gt;51:  new     #4; //class java/lang/StringBuilder &lt;br /&gt;54:  dup&lt;br /&gt;55:  invokespecial   #5; //Method java/lang/StringBuilder."&lt;init&gt;":()V  &lt;b&gt;&lt;----Here is&lt;br /&gt;       the allocation of the StringBuilder&lt;/b&gt;&lt;br /&gt;58:  astore_2&lt;br /&gt;59:  iconst_0&lt;br /&gt;60:  putstatic       #3; //Field i:I&lt;br /&gt;63:  getstatic       #3; //Field i:I  &lt;b&gt;&lt;----Here is the beginning of the loop&lt;/b&gt;&lt;br /&gt;66:  bipush  36&lt;br /&gt;68:  if_icmpge       94&lt;br /&gt;71:  aload_2&lt;br /&gt;72:  getstatic       #7; //Field data:[Ljava/lang/String;&lt;br /&gt;75:  getstatic       #3; //Field i:I&lt;br /&gt;78:  aaload&lt;br /&gt;79:  invokevirtual   #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)&lt;br /&gt;       Ljava/lang/StringBuilder;&lt;br /&gt;82:  pop&lt;br /&gt;83:  getstatic       #3; //Field i:I&lt;br /&gt;86:  iconst_1&lt;br /&gt;87:  iadd&lt;br /&gt;88:  putstatic       #3; //Field i:I&lt;br /&gt;91:  goto    63  &lt;b&gt;&lt;----Here is the end of the loop&lt;/b&gt;&lt;br /&gt;94:  aload_2&lt;br /&gt;95:  invokevirtual   #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As you can see in this example only the append() method is called inside the loop, whereas in the slower example&lt;br /&gt;&lt;br /&gt;*Prior to Java 5 StringBuffer was used, now the preferred class is StringBuilder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-8908266407264828048?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/8908266407264828048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=8908266407264828048' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/8908266407264828048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/8908266407264828048'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2007/01/making-java-strings-simple.html' title='Making Java Strings Simple'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19523351.post-114166497970947413</id><published>2006-03-06T08:54:00.000-08:00</published><updated>2008-11-12T09:04:44.027-08:00</updated><title type='text'>c++ Function Returns</title><content type='html'>Alas, after using Java compilers for so long now I made another ignorant assumption about c++. If you place your return value for your function inside any type of branching or looping structure make sure that at least one of the return statements can always be reached. If not you will have some major run-time errors that are hard to track down.&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span class="normal"&gt;string SomeClass&lt;/span&gt;&lt;span class="symbol"&gt;::&lt;/span&gt;&lt;span class="function"&gt;getName&lt;/span&gt;&lt;span class="symbol"&gt;()&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;    &lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="symbol"&gt;-&gt;&lt;/span&gt;&lt;span class="function"&gt;hasName&lt;/span&gt;&lt;span class="symbol"&gt;())&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;        &lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span class="normal"&gt; className&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In this example when the 'hasName()' function returns false nothing is returned.&lt;br /&gt;But in the case below, even if 'hasName()' is false, something is returned from the function.&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span class="normal"&gt;string SomeClass&lt;/span&gt;&lt;span class="symbol"&gt;::&lt;/span&gt;&lt;span class="function"&gt;getName&lt;/span&gt;&lt;span class="symbol"&gt;()&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;    &lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="symbol"&gt;-&gt;&lt;/span&gt;&lt;span class="function"&gt;hasName&lt;/span&gt;&lt;span class="symbol"&gt;())&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;        &lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span class="normal"&gt; className&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;    &lt;/span&gt;&lt;span class="keyword"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;        &lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;""&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Or as I've now learned to do. Turn On The Damn Compiler Warnings!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-114166497970947413?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/114166497970947413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=114166497970947413' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/114166497970947413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/114166497970947413'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2006/03/c-function-returns.html' title='c++ Function Returns'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19523351.post-113501369789929901</id><published>2005-12-19T09:23:00.000-08:00</published><updated>2008-11-12T09:21:02.162-08:00</updated><title type='text'>Java Visible Screen</title><content type='html'>For Mac OS X you can use Toolkit.getScreenInsets() to setup a full size GUI without rendering into the menubar or the Dock.&lt;br /&gt;&lt;br /&gt;An update with more detail:&lt;br /&gt;&lt;div class="code"&gt;&lt;span class="normal"&gt;GraphicsEnvironment ge &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; GraphicsEnvironment&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;getLocalGraphicsEnvironment&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;GraphicsDevice&lt;/span&gt;&lt;span class="symbol"&gt;[]&lt;/span&gt;&lt;span class="normal"&gt; gs &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; ge&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;getScreenDevices&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// this only works for one screen, if you need to access more than one&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// you will need to loop through every GraphicsDevice&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;Insets in &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; Toolkit&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;getDefaultToolkit&lt;/span&gt;&lt;span class="symbol"&gt;().&lt;/span&gt;&lt;span class="function"&gt;getScreenInsets&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;gs&lt;/span&gt;&lt;span class="symbol"&gt;[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="symbol"&gt;].&lt;/span&gt;&lt;span class="function"&gt;getConfigurations&lt;/span&gt;&lt;span class="symbol"&gt;()[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="symbol"&gt;]);&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;Dimension size &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; Toolkit&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;getDefaultToolkit&lt;/span&gt;&lt;span class="symbol"&gt;().&lt;/span&gt;&lt;span class="function"&gt;getScreenSize&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="normal"&gt;left &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; in&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;left&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;right &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; size&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;width &lt;/span&gt;&lt;span class="symbol"&gt;-&lt;/span&gt;&lt;span class="normal"&gt; in&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;left &lt;/span&gt;&lt;span class="symbol"&gt;-&lt;/span&gt;&lt;span class="normal"&gt; in&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;right&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;top &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; in&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;top&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;bottom &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; size&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;height &lt;/span&gt;&lt;span class="symbol"&gt;-&lt;/span&gt;&lt;span class="normal"&gt; in&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;top &lt;/span&gt;&lt;span class="symbol"&gt;-&lt;/span&gt;&lt;span class="normal"&gt; in&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="normal"&gt;bottom&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="function"&gt;setBounds&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;left&lt;/span&gt;&lt;span class="symbol"&gt;,&lt;/span&gt;&lt;span class="normal"&gt; top&lt;/span&gt;&lt;span class="symbol"&gt;,&lt;/span&gt;&lt;span class="normal"&gt; right&lt;/span&gt;&lt;span class="symbol"&gt;,&lt;/span&gt;&lt;span class="normal"&gt; bottom&lt;/span&gt;&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-113501369789929901?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/113501369789929901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=113501369789929901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113501369789929901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113501369789929901'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2005/12/java-visible-screen.html' title='Java Visible Screen'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19523351.post-113426538771064943</id><published>2005-12-10T17:34:00.000-08:00</published><updated>2006-02-20T20:21:57.546-08:00</updated><title type='text'>c++ Copy Constructor Conventions</title><content type='html'>A couple of very simple to follow rules for copy constructors.&lt;br /&gt;Case A: An object has no dynamically allocated pointers. Let the default copy constructor do the work and don't bother writing one.&lt;br /&gt;&lt;br /&gt;Case B: If said object does contain dynamic pointers, then you'll need to write your own copy constructor as follows.&lt;br /&gt;&lt;pre class="code"&gt;&lt;span class="function"&gt;MyObject&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;const&lt;/span&gt;&lt;span class="normal"&gt; MyObject&lt;/span&gt;&lt;span class="symbol"&gt;&amp;amp;&lt;/span&gt;&lt;span class="normal"&gt; o&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="comment"&gt;// Do some stuff for a true deep copy&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="comment"&gt;// Make new pointers and stuff :)&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-113426538771064943?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/113426538771064943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=113426538771064943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113426538771064943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113426538771064943'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2005/12/c-copy-constructor-conventions.html' title='c++ Copy Constructor Conventions'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19523351.post-113398200166009149</id><published>2005-12-07T10:55:00.000-08:00</published><updated>2006-02-20T20:19:49.483-08:00</updated><title type='text'>c++ Type Conversions Rehash</title><content type='html'>Another popular way to write this function is by using templates.&lt;br /&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;template&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt;&lt;span class="normal"&gt; T&lt;/span&gt;&lt;span class="symbol"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;string &lt;/span&gt;&lt;span class="function"&gt;toString&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;T&lt;/span&gt;&lt;span class="symbol"&gt;&amp;amp;&lt;/span&gt;&lt;span class="normal"&gt; i&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   ostringstream oss&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   oss &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; fixed &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; i&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span class="normal"&gt; oss&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;str&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/pre&gt;This should be put in a header file and needs the following:&lt;br /&gt;sstream&lt;br /&gt;iomanip&lt;br /&gt;string&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-113398200166009149?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/113398200166009149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=113398200166009149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113398200166009149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113398200166009149'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2005/12/c-type-conversions-rehash.html' title='c++ Type Conversions Rehash'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19523351.post-113388742673072625</id><published>2005-12-06T08:28:00.000-08:00</published><updated>2006-02-24T17:51:17.756-08:00</updated><title type='text'>c++ Type Conversions</title><content type='html'>This will eventually come up in your programming days, so I thought I'd post it.&lt;br /&gt;&lt;br /&gt;You need to convert a string input by the user to another data type (I'll use double here to demonstrate.)&lt;br /&gt;&lt;div&gt;&lt;pre class="code"&gt;&lt;span class="comment"&gt;//you'll need these includes&lt;/span&gt;&lt;br /&gt;&lt;span class="preproc"&gt;#include&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="preproc"&gt;#include&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;&amp;lt;sstream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="normal"&gt;string s &lt;/span&gt;&lt;span class="symbol"&gt;=&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="string"&gt;"23.5"&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="comment"&gt;// we need a string to work with&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;istringstream &lt;/span&gt;&lt;span class="function"&gt;istr&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;s&lt;/span&gt;&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="comment"&gt;// this is the stream we pump the string into (done by constructor)&lt;/span&gt;&lt;br /&gt;&lt;span class="type"&gt;double&lt;/span&gt;&lt;span class="normal"&gt; d&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="comment"&gt;// a place to store the double we are asking for&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;istr &lt;/span&gt;&lt;span class="symbol"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="normal"&gt; d&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="comment"&gt;// here we tell the sstream to pump our string out as a double&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This can be easily formed into a function.&lt;br /&gt;&lt;div&gt;&lt;pre class="code"&gt;&lt;span class="type"&gt;double&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="function"&gt;toDouble&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;string&lt;/span&gt;&lt;span class="symbol"&gt;&amp;amp;&lt;/span&gt;&lt;span class="normal"&gt; s&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="comment"&gt;// we only need a reference to the string since we are not going to modify it&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   istringstream &lt;/span&gt;&lt;span class="function"&gt;istr&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="normal"&gt;s&lt;/span&gt;&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="type"&gt;double&lt;/span&gt;&lt;span class="normal"&gt; d&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   istr &lt;/span&gt;&lt;span class="symbol"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="normal"&gt; d&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span class="normal"&gt; d&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;We can also reverse the process.&lt;br /&gt;&lt;div&gt;&lt;pre class="code"&gt;&lt;span class="normal"&gt;string &lt;/span&gt;&lt;span class="function"&gt;toString&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="symbol"&gt;&amp;amp;&lt;/span&gt;&lt;span class="normal"&gt; i&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="cbracket"&gt;{&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="comment"&gt;// we only need a reference to the int since we are not going to modify it&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   ostringstream ostr&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   ostr &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; fixed &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; i&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   ostr &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; fixed &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="function"&gt;setw&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="number"&gt;8&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="function"&gt;setprecision&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="symbol"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="normal"&gt; i&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="comment"&gt;// this second version adds some handy formatting&lt;/span&gt;&lt;br /&gt;&lt;span class="normal"&gt;   &lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span class="normal"&gt; ostr&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;span class="function"&gt;str&lt;/span&gt;&lt;span class="symbol"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span class="cbracket"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-113388742673072625?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/113388742673072625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=113388742673072625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113388742673072625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113388742673072625'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2005/12/c-type-conversions.html' title='c++ Type Conversions'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19523351.post-113355668814152247</id><published>2005-12-02T12:46:00.000-08:00</published><updated>2005-12-02T12:52:53.610-08:00</updated><title type='text'>Math4J Library</title><content type='html'>&lt;a src="http://www.sourceforge.net/projects/math4j"&gt;Math4J: A Mathematics Library&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is new approach for math coding, at least for me. I plan to complete the function design and introduce a statistics design.&lt;br /&gt;&lt;br /&gt;Math4J is a java library with an object-oriented design of some mathematical ideas: functions, primality, complex numbers, etc. It also consists of some utility methods and classes for mathematical constructions. This library is open source and currently only in alpha development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19523351-113355668814152247?l=macawm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macawm.blogspot.com/feeds/113355668814152247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19523351&amp;postID=113355668814152247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113355668814152247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19523351/posts/default/113355668814152247'/><link rel='alternate' type='text/html' href='http://macawm.blogspot.com/2005/12/math4j-library.html' title='Math4J Library'/><author><name>Anthony</name><uri>http://www.blogger.com/profile/16555280144649517775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://img458.imageshack.us/img458/892/snarl1kg.jpg'/></author><thr:total>0</thr:total></entry></feed>
