Exemplo n.º 1
0
// find all matching chunks in tree and fill them
static void fillChunks(const char *source, const IntervalTree<ElemChunk> &tree, dav_off_t offset, dav_size_t size) {
    std::vector<Interval<ElemChunk> > matches;
    tree.findOverlapping(offset, offset+size-1, matches);

    for(std::vector<Interval<ElemChunk> >::iterator it = matches.begin(); it != matches.end(); it++) {
        copyBytes(source, offset, size, it->value);
    }

    if(matches.size() == 0) {
        DAVIX_SLOG(DAVIX_LOG_DEBUG, DAVIX_LOG_CHAIN, "WARNING: Received byte-range from server does not match any in the interval tree");
    }
}
Exemplo n.º 2
0
void algorithm2(vector<Square> & squares){
	
	priority_queue<Event, vector<Event>, CompareEvent> events; 
	//vector<SQINTERVAL> intervals; // vector containg all vertical intervals and their rectangles
	IntervalTree<Square, float> activeTree; // tree containing the vertical intervals
	vector<SQINTERVAL> results; // contains the intersecting vertical intervals and their rectangles

	ofstream output;
	output.open("uitvoerrechthoeken.txt");

	// start timer
	auto start = std::chrono::steady_clock::now();
	
	for (int i = 0; i < squares.size(); i++){
		Event e1 = Event(true, squares[i], squares[i].getLB().getX());
		Event e2 = Event(false, squares[i], squares[i].getRA().getX());
		events.push( e1 ); //left side event of rectangle
		events.push( e2 ); //right side event of rectangle
	}
	
	while (!events.empty()) {
		Event current = events.top();
		if (current.isLeftEdge()){
			
			if (activeTree.getIntervals().size() > 0){
				
				activeTree.findOverlapping(current.getSquare().getLB().getY(), current.getSquare().getRA().getY(), results);
				vector<Coordinate> pos;
				for (int i = 0; i < results.size(); i++){
					
					results[i].value.getIntersection(current.getSquare(), pos);
					for (int w = 0; w < pos.size(); w++){
						output << pos[w].getX() << " " << pos[w].getY() << "\n";
					}
					
					pos.clear();
				}
			}
			activeTree.addInterval(SQINTERVAL(current.getSquare().getInterval()));
      activeTree.sort();
			results.clear();
		}
		else {

      for (vector<SQINTERVAL>::iterator i = activeTree.getIntervals().begin(); i != activeTree.getIntervals().end(); ++i){
				if (current.getSquare().getId() == i->value.getId()){
          activeTree.getIntervals().erase(i);
          break;
				}
			}
			results.clear();
		}
		events.pop();
	}

	// stop timer
	auto end = std::chrono::steady_clock::now();
	auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
	output << elapsed.count() << "\n"; 
	output.close();
	cout << "Ready. \n";
	cout << elapsed.count();
}