geotrellis/geotrellis — pull request #639 by lossyrob (2013-11-17 00:45:33+00:00)
Title: isNoData and isData macros

Created macros that inline the appropriate boolean function when comparing against NODATA values across each of the types. Using isNoData and isData is now the preferred way to check if a value has data; it promotes consistency across the code and data types, and has no performance cost due to the use of macros.

This PR also introduces the geotrellis-macros project, which uses the macro paradise plugin.

So the code:

```scala
val r:Raster = getRaster(...) // Gets a raster somehow
val i:Int = r.get(0,0)
val d:Double = r.getDouble(0,0)

if(i == NODATA) { println("Is a NoData value." }
if(i != NODATA) { println("Is a data value." }
if(java.lang.Double.isNaN(d)) { println("Is a NoData value." } // or the slower, d.isNaN
if(!java.lang.Double.isNaN(d)) { println("Is a data value.") }
```

should now be written as:

```scala
val r:Raster = getRaster(...) // Gets a raster somehow
val i:Int = r.get(0,0)
val d:Double = r.getDouble(0,0)

if(isNoData(i)) { println("Is a NoData value." }
if(isData(i)) { println("Is a data value." }
if(isNoData(d)) { println("Is a NoData value." }
if(isData(d)) { println("Is a data value.") }
```

Fixes #624