From: Eric B. <er...@go...> - 2006-01-22 18:09:12
|
Eric Bezault wrote: > I know that BASIC_ROUTINES does not belong to the core of > the kernel classes, but since it is here, I had a look at > it. I was wondering if it would be possible to get rid of > the 3 external routines of this classe and write it in > pure Eiffel. For `charconv' I think that we can write: > > charconv (i: INTEGER): CHARACTER is > -- Character associated with integer value `i' > do > if i.is_valid_character_code then > Result := i.to_character > end > end > > The difference I see is that it returns a null character > if the integer value is out of bound, instead of some > other value. Do we care? In fact the following implementation gives the same behavior as the external routine, even for out-of-bound values: charconv (i: INTEGER): CHARACTER is -- Character associated with integer value `i' do Result := (i & 0x000000FF).to_character end > For `bottom_int_div' and `up_int_div', I must say that not > having the C code of 'bointdiv' and 'upintdiv' I don't > know exactly what they are supposed to do. Could they be > written in pure Eiffel as well? I made some tests and the following implementation seems to give the same results as the external routines: bottom_int_div (n1, n2: INTEGER): INTEGER is -- Greatest lower bound of the integer division of `n1' by `n2' local r: INTEGER do Result := n1 // n2 r := n1 \\ n2 if n2 > 0 then if r < 0 then Result := Result - 1 end elseif r > 0 then Result := Result - 1 end end up_int_div (n1, n2: INTEGER): INTEGER is -- Least upper bound of the integer division -- of `n1' by `n2' local r: INTEGER do Result := n1 // n2 r := n1 \\ n2 if n2 > 0 then if r > 0 then Result := Result + 1 end elseif r < 0 then Result := Result + 1 end end -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |