<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,4 @@
+#!/usr/bin/hobbes
 class Board {
   def init(values) {
     @values = values</diff>
      <filename>examples/sudoku.hb</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>hobbes.jar</filename>
    </modified>
    <modified>
      <filename>hobbes.sh</filename>
    </modified>
    <modified>
      <diff>@@ -54,10 +54,18 @@ public class HbObject extends Throwable {
 		return call(&quot;&gt;&quot;,new HbObject[]{other}) == getObjSpace().getTrue();
 	}
 	
+	public boolean gte(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
+		return gt(other) || eq(other);
+	}
+	
 	public boolean lt(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
 		return call(&quot;&lt;&quot;,new HbObject[]{other}) == getObjSpace().getTrue();
 	}
 	
+	public boolean lte(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
+		return lt(other) || eq(other);
+	}
+	
 	public boolean eq(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
 		return call(&quot;==&quot;,new HbObject[]{other}) == getObjSpace().getTrue();
 	}</diff>
      <filename>src/hobbes/values/HbObject.java</filename>
    </modified>
    <modified>
      <diff>@@ -56,6 +56,38 @@ public class HbRange extends HbObject {
 		return end;
 	}
 	
+	@HobbesMethod(name=&quot;overlaps?&quot;,numArgs=1)
+	public HbObject hbOverlaps(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
+		if(other instanceof HbRange) {
+			return getObjSpace().getBool(overlaps((HbRange)other));
+		} else {
+			throw new HbArgumentError(getInterp(),&quot;overlaps?&quot;,other,&quot;Range&quot;);
+		}
+	}
+	
+	public boolean overlaps(HbRange other) throws ErrorWrapper, HbError, Continue, Break {
+		return this.getEnd().gte(((HbRange)other).getStart());
+	}
+	
+	@HobbesMethod(name=&quot;overlap&quot;,numArgs=1)
+	public HbObject overlap(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
+		if(other instanceof HbRange) {
+			if(overlaps((HbRange)other)) {
+				return new HbRange(getInterp(),((HbRange)other).getStart(),this.getEnd());
+			} else
+				return getObjSpace().getNil();
+		} else
+			throw new HbArgumentError(getInterp(),&quot;overlap&quot;,other,&quot;Range&quot;);
+	}
+	
+	@HobbesMethod(name=&quot;contains?&quot;,numArgs=1)
+	public HbObject contains(HbObject obj) throws ErrorWrapper, HbError, Continue, Break {
+		if(obj.getHbClass().getName().equals(getStart().getHbClass().getName())) {
+			return getObjSpace().getBool(obj.gte(getStart()) &amp;&amp; obj.lte(getEnd()));
+		} else
+			throw new HbArgumentError(getInterp(),&quot;contains?&quot;,obj,getStart().getHbClass().getName());
+	}
+	
 	@HobbesMethod(name=&quot;==&quot;,numArgs=1)
 	public HbObject equalTo(HbObject other) throws ErrorWrapper, HbError, Continue, Break {
 		if(other instanceof HbRange)
@@ -119,6 +151,16 @@ public class HbRange extends HbObject {
 		return toReturn;
 	}
 	
+	@HobbesMethod(name=&quot;map&quot;,numArgs=1)
+	public HbSet map(HbObject func) throws ErrorWrapper, HbError, Continue, Break {
+		return toSet().map(func);
+	}
+	
+	@HobbesMethod(name=&quot;filter&quot;,numArgs=1)
+	public HbSet filter(HbObject func) throws ErrorWrapper, HbError, Continue, Break {
+		return toSet().filter(func);
+	}
+	
 	public IterImp iterator() {
 		return new IterImp(start,end);
 	}</diff>
      <filename>src/hobbes/values/HbRange.java</filename>
    </modified>
    <modified>
      <diff>@@ -105,6 +105,35 @@ public class HbSet extends HbObject implements Iterable&lt;HbObject&gt; {
 		return list;
 	}
 	
+	@HobbesMethod(name=&quot;map&quot;,numArgs=1)
+	public HbSet map(HbObject func) throws ErrorWrapper, HbError, Continue, Break {
+		if(func instanceof HbFunction) {
+			HbSet newSet = new HbSet(getInterp());
+			for(HbObject elem: this) {
+				HbObject result = getInterp().callFunc((HbFunction)func,
+															new HbObject[]{elem},null);
+				newSet.add(result);
+			}
+			return newSet;
+		} else
+			throw new HbArgumentError(getInterp(),&quot;map&quot;,func,&quot;AnonymousFunction&quot;);
+	}
+	
+	@HobbesMethod(name=&quot;filter&quot;,numArgs=1)
+	public HbSet filter(HbObject func) throws ErrorWrapper, HbError, Continue, Break {
+		if(func instanceof HbFunction) {
+			HbSet newSet = new HbSet(getInterp());
+			for(HbObject elem: this) {
+				HbObject result = getInterp().callFunc((HbFunction)func,
+															new HbObject[]{elem},null);
+				if(result == getObjSpace().getTrue())
+					newSet.add(result);
+			}
+			return newSet;
+		} else
+			throw new HbArgumentError(getInterp(),&quot;filter&quot;,func,&quot;AnonymousFunction&quot;);
+	}
+	
 	@HobbesMethod(name=&quot;each&quot;,numArgs=1)
 	public void each(HbObject func) throws ErrorWrapper, HbError, Continue, Break {
 		if(func instanceof HbFunction) {</diff>
      <filename>src/hobbes/values/HbSet.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4799b621bc797e6f98523398a4f4a96e865a533f</id>
    </parent>
  </parents>
  <author>
    <name>Pete Vilter</name>
    <email>bonasaurus1@gmail.com</email>
  </author>
  <url>http://github.com/bonasaurus1/hobbes/commit/34cdd6032a41e1bcfd439c5bb4e23c51390a50bd</url>
  <id>34cdd6032a41e1bcfd439c5bb4e23c51390a50bd</id>
  <committed-date>2009-06-26T15:29:01-07:00</committed-date>
  <authored-date>2009-06-26T15:29:01-07:00</authored-date>
  <message>Range bread and butter, Set#map, filter. Closes #96</message>
  <tree>1904331132bcc64aba21ac36daa6d02fa196bd8b</tree>
  <committer>
    <name>Pete Vilter</name>
    <email>bonasaurus1@gmail.com</email>
  </committer>
</commit>
