Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
With R20 I had no problem using a HashMap with a BaseArray<Int32> as value. All compiling fine, and working as expected. Porting that implementation to R19 (for users having not upgraded to R20), I encounter a compiler error, mentioning that the operator= cannot be accessed, since private. Obviously, I had to replace the R20 HashMap::Insert for an R19 HashMap::Put and there seems to lie the problem
HashMap
BaseArray<Int32>
HashMap::Insert
HashMap::Put
// key is an integer and value an array of integers maxon::HashMap<Int32, maxon::BaseArray<Int32>> dataKeyValue; const Int32 key = 1; maxon::HashMap<Int32, maxon::BaseArray<Int32>>::Entry* e = dataKeyValue.FindEntry(key); if (e) { maxon::BaseArray<Int32>& values = e->GetValue(); // ... } else { maxon::BaseArray<Int32> newValues; // ... dataKeyValue.Put(key, newValues); }
The compiler error:
error C2248: 'maxon::BaseArray<Bool,16,maxon::BASEARRAYFLAGS_0,maxon::DefaultAllocator>::operator =': cannot access private member declared in class 'maxon::BaseArray<Bool,16,maxon::BASEARRAYFLAGS_0,maxon::DefaultAllocator>'
Any hint what I could do in order to have the same functionality compiled in R19? Thanks in advance.
Hi Daniel, thanks for reaching out us.
With regard to your question, the old HashMap::Put implementation does only support types which have a copy-assignment operator. But there’s the FindOrCreateEntry function which inserts an entry and default-initializes the value, then the value can be set later.
FindOrCreateEntry
maxon::Bool created = false; maxon::HashMap<Int32, maxon::BaseArray<Int32>>::Entry* e = dataKeyValue.FindOrCreateEntry(key, created); if (!e) // error handling if (created) { maxon::BaseArray<Int32> newValues; // ... e->SetValue(std::move(newValues)); }
Let me know if it does work as expected.
Cheers, Riccardo
@r_gigante Thanks for the headsup about FindOrCreateEntry. Since Put does use that method internally, I didn't even consider about trying to use it, as I simply assumed it would have the same issue. Guess I was wrong about not trying it.
Put
Problem solved.