David B. Held wrote:

[...]

>> Maybe it would be better to use 'shifted_address<size_t,
>> size_t>::get()' instead of 'static_cast<void*>(p)) -
>> sizeof(shifted_header)' because pointer_type does not necessarily
>> point to the beginning of the object.
>
> Sure.  That was just filler until you put in the more appropriate
> code. ;)

When I think about it, maybe I should rework offset.hpp so that arithmetics
to members is even cleaner.

>         friend inline pointer_type get_impl(shifted_storage const& sp)
>         { return &sp.pointee_->m_object; }
>
>         friend inline stored_type& get_impl_ref(shifted_storage& sp)
>         { return sp.pointee_; }

[...]

>         stored_type pointee_;

I'll change pointee_ to a pointer_type but I'll keep stored_type of type
shifted_object<T> *.  The get_impl_* functions seem to be the main interface
between *_storage and *_ptr.  I'm starting to understand now.

>> [...]
>> It's interesting to know that some checking_policy is provided.  It
>> kind
>> of open doors to test the validity of the address at run-time.
>> Conversions will be interesting also.
>
> You might have to pull some tricks with the Ownership policy, I'm not
> sure.  For conversions, the pointer casts should work, unless you need
> to do some tricks.
>
> Dave

Euh, I think casts from shifted_ptr<T> will only work when applied to a
shared_ptr<T, shifted_storage> or something like that?



Philippe

P.S.:  I'm working on it in my spare time, so please excuse me if I do not
reply fast enough.




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to