Hi Shinsuke,

Renamed positive_mod() -> mod_i() and it now works with negative
numbers (like Pythons modulo which is `correct` from math POV).

On Thu, Sep 5, 2013 at 11:32 PM, IRIE Shinsuke <[email protected]> wrote:
> Hi Campbell,
>
> Did you assume the 2nd argument in positive_mod() is a positive number?
> This function returns a strange value if the devisor is negative.
>
> Anyway, I think the function name "positive_mod" is inappropriate,
> because the mathematically proper modulo operation always yields a
> positive number if the deviser is a positive number.  The binary %
> operator in C language is not an actual modulo operator.
>
> IRIE Shinsuke
>
> 13/09/05, Campbell Barton wrote:
>> Revision: 59821
>>            
>> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59821
>> Author:   campbellbarton
>> Date:     2013-09-05 10:12:00 +0000 (Thu, 05 Sep 2013)
>> Log Message:
>> -----------
>> add positive_mod() utility function.
>>
>> Modified Paths:
>> --------------
>>      trunk/blender/source/blender/blenlib/BLI_math_base.h
>>      trunk/blender/source/blender/blenlib/intern/math_base_inline.c
>>      trunk/blender/source/blender/bmesh/operators/bmo_bridge.c
>>
>> Modified: trunk/blender/source/blender/blenlib/BLI_math_base.h
>> ===================================================================
>> --- trunk/blender/source/blender/blenlib/BLI_math_base.h      2013-09-05 
>> 09:39:38 UTC (rev 59820)
>> +++ trunk/blender/source/blender/blenlib/BLI_math_base.h      2013-09-05 
>> 10:12:00 UTC (rev 59821)
>> @@ -222,6 +222,7 @@
>>   MINLINE int power_of_2_min_i(int n);
>>
>>   MINLINE int divide_round_i(int a, int b);
>> +MINLINE int positive_mod(int i, int n);
>>
>>   MINLINE float shell_angle_to_dist(const float angle);
>>
>>
>> Modified: trunk/blender/source/blender/blenlib/intern/math_base_inline.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenlib/intern/math_base_inline.c    
>> 2013-09-05 09:39:38 UTC (rev 59820)
>> +++ trunk/blender/source/blender/blenlib/intern/math_base_inline.c    
>> 2013-09-05 10:12:00 UTC (rev 59821)
>> @@ -153,6 +153,11 @@
>>       return (2 * a + b) / (2 * b);
>>   }
>>
>> +MINLINE int positive_mod(int i, int n)
>> +{
>> +     return ((i = i % n) < 0) ? i + n : i;
>> +}
>> +
>>   MINLINE unsigned int highest_order_bit_i(unsigned int n)
>>   {
>>       n |= (n >>  1);
>>
>> Modified: trunk/blender/source/blender/bmesh/operators/bmo_bridge.c
>> ===================================================================
>> --- trunk/blender/source/blender/bmesh/operators/bmo_bridge.c 2013-09-05 
>> 09:39:38 UTC (rev 59820)
>> +++ trunk/blender/source/blender/bmesh/operators/bmo_bridge.c 2013-09-05 
>> 10:12:00 UTC (rev 59821)
>> @@ -273,8 +273,7 @@
>>               if (twist_offset != 0) {
>>                       const int len_b = BM_edgeloop_length_get(el_store_b);
>>                       ListBase *lb_b = BM_edgeloop_verts_get(el_store_b);
>> -                     const int offset = twist_offset % len_b;
>> -                     LinkData *el_b = BLI_rfindlink(lb_b, (offset < 0) ? 
>> (offset + len_b) : offset);
>> +                     LinkData *el_b = BLI_rfindlink(lb_b, 
>> positive_mod(twist_offset, len_b));
>>                       BLI_rotatelist(lb_b, el_b);
>>               }
>>       }
>>
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> [email protected]
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>
> _______________________________________________
> Bf-committers mailing list
> [email protected]
> http://lists.blender.org/mailman/listinfo/bf-committers



-- 
- Campbell
_______________________________________________
Bf-committers mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to