Listing 5

void draw(SWFSprite *movieclip,float ox,float oy,float xr,
  float yr,double rot){
double total=std::accumulate(data.begin(),data.end(),0.0, get_value);
if(total<=0.0)return;
for(const_iterator i=data.begin();i!=data.end();++i){
    double arc=(i->value/total)*M_PI*2;
    i->appearance.draw_pie_slice(movieclip,ox,oy,rot,rot+arc,xr,yr);
    rot+=arc;
    }
}