       return @_timeCalculate(filter, splitOp)
     else
       hash = generateHash(filter, splitOp, combineOp)
-      console.log 'GET', hash
       return @hashmap[hash]
 
   put: (condensedQuery, root) -> # Recursively deconstruct root and add to cache

    splitOp = condensedQuery[level + 1].split
    combineOp = condensedQuery[level + 1].combine
    splitOpName = splitOp.name
    splitValues = node.splits.map((node) -> return node.prop[splitOpName])
    hash = generateHash(filter, splitOp, combineOp)
    console.log 'PUT', hash
    @hashmap[hash] = splitValues

    if condensedQuery[level + 2]?
      for split in node.splits
        newFilter = addToFilter(filter, @timeAttribute, createFilter(split.prop[splitOpName], splitOp))
        @_splitPutHelper(condensedQuery, split, newFilter, level + 1)
    return


    when 'match'     then "F:#{filter.attribute}:#{filter.expression}"
    when 'within'    then "W:#{filter.attribute}:#{filter.range[0].valueOf()}:#{filter.range[1].valueOf()}"
    when 'not'       then "N(#{filterToHashHelper(filter.filter)})"
    when 'and'       then "A(#{filter.filters.map(filterToHashHelper).join(')(')})"
    when 'or'        then "O(#{filter.filters.map(filterToHashHelper).join(')(')})"
    else throw new Error("unsupported filter type")

filterToHash = (filter) ->
