On Thu, Feb 28, 2013 at 12:50 AM, Brian Paul <bri...@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<mar...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev