bool Query:: RunQuery( QueryProcessor &qp, KeySet &result ) { switch( op ) { case IDENT: { return( qp.DoQuery( *rectangles, result ) ); } case AND: { KeySet tmp; if( !left->RunQuery( qp, result ) || !right->RunQuery( qp, tmp ) ) { return( false ); } result.Intersect( tmp ); return( true ); } case OR: return( left->RunQuery(qp,result) && right->RunQuery(qp,result) ); default: return( false ); } }