[Mesa-dev] [PATCH 4/5] gallium/util: add helper code for 1D integer range

Marek Olšák maraeo at gmail.com
Thu Feb 28 01:14:07 PST 2013


On Thu, Feb 28, 2013 at 12:50 AM, Brian Paul <brianp at vmware.com> wrote:
> On 02/27/2013 04:11 PM, Marek Olšák wrote:
>>
>> ---
>>   src/gallium/auxiliary/util/u_range.h |   91
>> ++++++++++++++++++++++++++++++++++
>>   1 file changed, 91 insertions(+)
>>   create mode 100644 src/gallium/auxiliary/util/u_range.h
>>
>> diff --git a/src/gallium/auxiliary/util/u_range.h
>> b/src/gallium/auxiliary/util/u_range.h
>> new file mode 100644
>> index 0000000..ae9cc37
>> --- /dev/null
>> +++ b/src/gallium/auxiliary/util/u_range.h
>> @@ -0,0 +1,91 @@
>> +/*
>> + * Copyright 2013 Marek Olšák<maraeo at gmail.com>
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining
>> a
>> + * copy of this software and associated documentation files (the
>> "Software"),
>> + * to deal in the Software without restriction, including without
>> limitation
>> + * on the rights to use, copy, modify, merge, publish, distribute, sub
>> + * license, and/or sell copies of the Software, and to permit persons to
>> whom
>> + * the Software is furnished to do so, subject to the following
>> conditions:
>> + *
>> + * The above copyright notice and this permission notice (including the
>> next
>> + * paragraph) shall be included in all copies or substantial portions of
>> the
>> + * Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT
>> SHALL
>> + * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
>> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
>> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
>> THE
>> + * USE OR OTHER DEALINGS IN THE SOFTWARE. */
>> +
>> +/**
>> + * @file
>> + * 1D integer range, capable of the union and intersection operations.
>> + *
>> + * It only maintains a single interval which is extended when the union
>> is
>> + * done. This implementation is partially thread-safe (readers are not
>> + * protected by a lock).
>> + *
>> + * @author Marek Olšák
>> + */
>> +
>> +#ifndef U_RANGE_H
>> +#define U_RANGE_H
>> +
>> +#include "os/os_thread.h"
>
>
> #include "pipe/p_compiler.h" for completeness?

That's included by os_thread.h already.

>
>
>
>> +
>> +struct util_range {
>> +       unsigned start; /* inclusive */
>> +       unsigned end; /* exclusive */
>> +
>> +       /* for the range to be consistent with multiple contexts: */
>> +       pipe_mutex write_mutex;
>> +};
>
>
> 3-space indentation?

Ah yes. I originally developed the code in r600g, which uses tabs.

>
>
>
>> +
>> +
>> +static INLINE void
>> +util_range_set_empty(struct util_range *range)
>> +{
>> +       range->start = ~0;
>> +       range->end = 0;
>> +}
>
>
> Would a util_range_is_empty() function be useful?

I don't need it at the moment. It can be added once someone needs it.

>
>
>
>> +
>> +/* This is like a union of two sets. */
>> +static INLINE void
>> +util_range_add(struct util_range *range, unsigned start, unsigned end)
>> +{
>> +       if (start<  range->start || end>  range->end) {
>> +               pipe_mutex_lock(range->write_mutex);
>> +               if (start<  range->start)
>> +                       range->start = start;
>> +               if (end>  range->end)
>> +                       range->end = end;
>
>
> How about:
>    range->start = MIN2(range->start, start);
>    range->end = MAX2(range->end, end);

Looks nicer, alright.

Marek


More information about the mesa-dev mailing list