WIP: Use sun.misc.Unsafe in pointers and not in indexers#408
Conversation
|
This is merely duplicating what we already have in Indexer. If this is all the functionality you need, please use Indexer instead. |
|
I'm using Indexer as you suggested, but maybe I'm missing something: isn't it the Indexers just a layer on top of array/buffer/pointer? Why are they accessing internal pointer structures using Unsafe, shouldn't the Indexers just call pointer.get()/pointer.put()? |
|
Another example: I'm using the HDF5 JavaCPP preset and it takes and returns pointers objects, why I should wrap the pointer in an Indexer to access its data? I would like just to consider the pointer as a basic data storage (just like array or buffers), not a Indexer with a shape and indexing. |
|
Yes, Indexer is basically a wrapper for arrays, buffers, and pointers, and we need to use |
|
I cannot find where Unsafe is used to access arrays or buffers: I'm looking at |
That's what If you can do everything you need with
https://github.com/bytedeco/javacpp/blob/master/src/main/java/org/bytedeco/javacpp/indexer/ByteArrayIndexer.java and we would also need it for |
4abc7de to
0d92845
Compare
|
OK, I see: for primitive pointers (whose element is a primitive in Java) we can actually use Unsafe for get() and put(), but for more complicated pointers (for any struct for example |
|
Right, the definition of classes like If you're just worried about creating an instance of |
|
I was actually more concerned from an architecture point of view: I see now Pointers in general have been created for the JavaCPP bridge purposes, so to account for structs/classes/unions in C++. And have Indexers just a layer on top of arrays/Buffers/Pointers/MemoryHandles/etc. for shaping and indexing purposes. |
|
I'm repeating myself, but we need |
|
Also, don't forget to consider what to do when |
sun.misc.Unsafeis used in raw indexer, but it should be really used in Pointers: the indexers are just a layer on top of array/buffer/pointers.Still unfinished as it is not clear how to handle bool, clong, size_t pointers.