[cairo] [PATCH 10/51] core: fixed code duplication

Enrico Weigelt, metux IT consult enrico.weigelt at gr13.net
Mon Dec 21 09:01:52 PST 2015


On 21.12.2015 13:07, Chris Wilson wrote:

Hi,

>> +/**
>> + * copy a box set to an clip
>> + *
>> + * @param  box   the box set to copy from
>> + * @param  clip  the clip to copy to (return buffer)
>> + * @result       zero if the allocation failed - the clip will be set to all-clipped
>> + *               otherwise non-zero
>> + */
>> +static int
>> +_cairo_boxes_copy_to_clip(const cairo_boxes_t *boxes, cairo_clip_t *clip)
>> +{
>> +    /* XXX cow-boxes? */
>> +    if(boxes->num_boxes == 1) {
> 
> Please read CODING_STYLE (specificy on whitespace and indentation).

hmm, where exactly is the violation ? the documentation header ?

>> +	clip->boxes = &clip->embedded_box;
>> +	clip->boxes[0] = boxes->chunks.base[0];
>> +	clip->num_boxes = 1;
>> +    } else {
>> +	clip->boxes = _cairo_boxes_to_array(boxes, &clip->num_boxes);
>> +	if (unlikely(clip->boxes == NULL))
> 
> unlikely? Hmm. needs an assert(boxes->num_boxes != 0) then.

we could also check for both:

     ((clip->boxes == NULL) || (clip->num_boxes == 0))

I'd guess the compiler could generate a vector op for that, if the
fields are direct neighbors and properly aligned.

>> +	    _cairo_clip_set_all_clipped (clip);
>> +	    return 0;
>> +	}
>> +    }
>> +    return 1;
>> +}
>> +
>>  cairo_clip_t *
>>  _cairo_clip_intersect_boxes (cairo_clip_t *clip,
>>  			     const cairo_boxes_t *boxes)
>> @@ -301,13 +328,10 @@ _cairo_clip_intersect_boxes (cairo_clip_t *clip,
>>      if (boxes->num_boxes == 0) {
>>  	clip = _cairo_clip_set_all_clipped (clip);
>>  	goto out;
>> -    } else if (boxes->num_boxes == 1) {
>> -	clip->boxes = &clip->embedded_box;
>> -	clip->boxes[0] = boxes->chunks.base[0];
>> -	clip->num_boxes = 1;
>> -    } else {
>> -	clip->boxes = _cairo_boxes_to_array (boxes, &clip->num_boxes);
>>      }
>> +
>> +    _cairo_boxes_copy_to_clip(boxes, clip);
>> +
>>      _cairo_boxes_extents (boxes, &limits);
>>  
>>      _cairo_box_round_to_rectangle (&limits, &extents);
>> @@ -574,16 +598,8 @@ _cairo_clip_from_boxes (const cairo_boxes_t *boxes)
>>      if (clip == NULL)
>>  	return _cairo_clip_set_all_clipped (clip);
>>  
>> -    /* XXX cow-boxes? */
>> -    if(boxes->num_boxes == 1) {
>> -	clip->boxes = &clip->embedded_box;
>> -	clip->boxes[0] = boxes->chunks.base[0];
>> -	clip->num_boxes = 1;
>> -    } else {
>> -	clip->boxes = _cairo_boxes_to_array (boxes, &clip->num_boxes);
>> -	if (clip->boxes == NULL)
>> -	    return _cairo_clip_set_all_clipped (clip);
>> -    }
>> +    if (unlikely(!_cairo_boxes_copy_to_clip(boxes, clip)))
>> +	return 0;
>
> Changed the return value!

Ah, needs to be 'clip' instead of '0'.


--mtx

--
Enrico Weigelt,
metux IT consulting
+49-151-27565287


More information about the cairo mailing list