1 /* 2 * Copyright 2007, Haiku Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan Aßmus <superstippi@gmx.de> 7 */ 8 #include "PolygonQueue.h" 9 10 #include <stdio.h> 11 #include <string.h> 12 13 #include "Polygon.h" 14 15 // constructor 16 PolygonQueue::PolygonQueue(Polygon* start, int32 depth) 17 : fPolygons(new Polygon*[depth]), 18 fDepth(depth) 19 { 20 for (int32 i = 0; i < fDepth; i++) 21 fPolygons[i] = NULL; 22 fPolygons[fDepth - 1] = start; 23 } 24 25 // destructor 26 PolygonQueue::~PolygonQueue() 27 { 28 for (int32 i = 0; i < fDepth; i++) 29 delete fPolygons[i]; 30 delete[] fPolygons; 31 } 32 33 // Head 34 Polygon* 35 PolygonQueue::Head() const 36 { 37 return fPolygons[fDepth - 1]; 38 } 39 40 // Tail 41 Polygon* 42 PolygonQueue::Tail() const 43 { 44 return fPolygons[0]; 45 } 46 47 // Step 48 void 49 PolygonQueue::Step() 50 { 51 if (Polygon* p = Head()) { 52 Polygon *np = p->Step(); 53 // drop tail 54 delete Tail(); 55 // shift 56 for (int32 i = 0; i < fDepth - 1; i++) 57 fPolygons[i] = fPolygons[i + 1]; 58 // and put new head at top 59 fPolygons[fDepth - 1] = np; 60 } 61 } 62