[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