Browse Source

Trade: SceneFieldData::size() should be a std::size_t, not UnsignedLong.

Not sure what was I thinking here -- if a field size wouldn't fit into a
32bit number, it won't fit into memory of a 32bit system anyway, so
there's no real use for the size to be returned as 64bit always.
Internally it *is* stored as a 64bit number, yes, to have compatible
binary layout on 32bit and 64bit systems, but that doesn't mean the
public API should return that too. And SceneData::fieldSize() is
std::size_t, so this feels really like an accidental brainfart.

The changed return type also means a lot of existing code doesn't need
to do any explicit casting to std::size_t anymore. Yay.
pull/620/head
Vladimír Vondruš 3 years ago
parent
commit
b34468146d
  1. 10
      src/Magnum/SceneTools/Implementation/combine.h
  2. 6
      src/Magnum/SceneTools/Implementation/convertToSingleFunctionObjects.h
  3. 2
      src/Magnum/Trade/SceneData.h

10
src/Magnum/SceneTools/Implementation/combine.h

@ -159,7 +159,7 @@ inline Trade::SceneData combineFields(const Trade::SceneMappingType mappingType,
sharedTrsMapping = itemViewOffset;
arrayAppend(items, InPlaceInit,
NoInit,
std::size_t(fields[sharedSceneFieldIds.trs[0]].size()),
fields[sharedSceneFieldIds.trs[0]].size(),
mappingTypeSize,
mappingTypeAlignment,
itemViews[itemViewOffset].types);
@ -170,7 +170,7 @@ inline Trade::SceneData combineFields(const Trade::SceneMappingType mappingType,
sharedMeshMaterialMapping = itemViewOffset;
arrayAppend(items, InPlaceInit,
NoInit,
std::size_t(fields[sharedSceneFieldIds.meshMaterial[0]].size()),
fields[sharedSceneFieldIds.meshMaterial[0]].size(),
mappingTypeSize,
mappingTypeAlignment,
itemViews[itemViewOffset].types);
@ -220,7 +220,7 @@ inline Trade::SceneData combineFields(const Trade::SceneMappingType mappingType,
itemViewMappings[i].first() = itemViewOffset;
arrayAppend(items, InPlaceInit,
NoInit,
std::size_t(field.size()),
field.size(),
mappingTypeSize,
mappingTypeAlignment,
itemViews[itemViewOffset].types);
@ -236,13 +236,13 @@ inline Trade::SceneData combineFields(const Trade::SceneMappingType mappingType,
if(fieldType == Trade::SceneFieldType::Bit) {
arrayAppend(items, InPlaceInit,
NoInit,
Containers::Size2D{std::size_t(field.size()), field.fieldArraySize() ? field.fieldArraySize() : 1},
Containers::Size2D{field.size(), field.fieldArraySize() ? field.fieldArraySize() : 1},
itemViews[itemViewOffset].bits);
++itemViewOffset;
} else {
arrayAppend(items, InPlaceInit,
NoInit,
std::size_t(field.size()), sceneFieldTypeSize(fieldType)*(field.fieldArraySize() ? field.fieldArraySize() : 1),
field.size(), sceneFieldTypeSize(fieldType)*(field.fieldArraySize() ? field.fieldArraySize() : 1),
sceneFieldTypeAlignment(fieldType),
itemViews[itemViewOffset].types);
++itemViewOffset;

6
src/Magnum/SceneTools/Implementation/convertToSingleFunctionObjects.h

@ -124,11 +124,11 @@ inline Trade::SceneData convertToSingleFunctionObjects(const Trade::SceneData& s
/** @todo wow this placeholder construction is HIDEOUS */
fields[i] = Trade::SceneFieldData{field.name(),
field.mappingType(),
Containers::ArrayView<const UnsignedInt>{nullptr, std::size_t(field.size() + fieldsToCopyAdditionCount[*fieldToCopy])},
Containers::ArrayView<const UnsignedInt>{nullptr, field.size() + fieldsToCopyAdditionCount[*fieldToCopy]},
field.fieldType(),
Containers::StridedArrayView1D<const void>{
{nullptr, ~std::size_t{}},
std::size_t(field.size() + fieldsToCopyAdditionCount[*fieldToCopy]),
field.size() + fieldsToCopyAdditionCount[*fieldToCopy],
std::ptrdiff_t((field.fieldArraySize() ? field.fieldArraySize() : 1)*sceneFieldTypeSize(field.fieldType()))
},
field.fieldArraySize(),
@ -140,7 +140,7 @@ inline Trade::SceneData convertToSingleFunctionObjects(const Trade::SceneData& s
} else if(field.name() == Trade::SceneField::Parent) {
/** @todo some nicer constructor for placeholders once this is in
public interest */
fields[i] = Trade::SceneFieldData{Trade::SceneField::Parent, Containers::ArrayView<const UnsignedInt>{nullptr, std::size_t(field.size() + objectsToAdd)}, Containers::ArrayView<const Int>{nullptr, std::size_t(field.size() + objectsToAdd)},
fields[i] = Trade::SceneFieldData{Trade::SceneField::Parent, Containers::ArrayView<const UnsignedInt>{nullptr, field.size() + objectsToAdd}, Containers::ArrayView<const Int>{nullptr, field.size() + objectsToAdd},
/* If the field is ordered, we preserve that. But if it's
implicit, we can't. */
field.flags() & ~(Trade::SceneFieldFlag::ImplicitMapping & ~Trade::SceneFieldFlag::OrderedMapping)

2
src/Magnum/Trade/SceneData.h

@ -1324,7 +1324,7 @@ class MAGNUM_TRADE_EXPORT SceneFieldData {
constexpr SceneField name() const { return _name; }
/** @brief Number of entries */
constexpr UnsignedLong size() const { return _size; }
constexpr std::size_t size() const { return _size; }
/** @brief Object mapping type */
constexpr SceneMappingType mappingType() const {

Loading…
Cancel
Save