def create_occurrence_for_each_time_in_time_map(occ_base, dindex, &block)
      if !@sorted_time_map[dindex].empty?
        @sorted_time_map[dindex].each do |tindex|   # tindex may be time index or time span index
          occ = occ_base.dup
          occ.start_time = start_time_from_tindex(tindex)
          if index_references_time(tindex)
            occ.start_time = @constructs[tindex].time
          elsif index_references_timespan(tindex)
            occ.start_time = @constructs[tindex].start_time
            occ.end_time = @constructs[tindex].end_time
          end
          yield(occ)
        end
      else
        yield(occ_base)
      end
    end
def create_occurrence_for_each_time_in_time_map(occ_base, dindex, &block)
      if !@sorted_time_map[dindex].empty?
        @sorted_time_map[dindex].each do |tindex|   # tindex may be time index or time span index
          occ = occ_base.dup
          occ.start_time = start_time_from_tindex(tindex)
          if index_references_time(tindex)
            occ.start_time = @constructs[tindex].time
          elsif index_references_timespan(tindex)
            occ.start_time = @constructs[tindex].start_time
            occ.end_time = @constructs[tindex].end_time
          end
          yield(occ)
        end
      else
        yield(occ_base)
      end
    end
The @sorted_time_map hash has keys of date/datespans/recurrence indices (in this case date),
 and an array of time and time span indices as values.  This checks to make sure that array of
 times is not empty, and if it is there are no times associated with this date construct.
 Huh? That does not explain this method... at all.