activity_sdk_pack_composer_validate.cpp 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include <algorithm>
  2. #include <array>
  3. #include <limits>
  4. #include "activity_sdk_pack_composer_internal.h"
  5. namespace sunrise::client::content::activity::sdk_generation::pack_composer::detail {
  6. /** Checks the retained activity and panel tables at the public composition boundary. */
  7. bool validate_storage(const Inputs&,
  8. const PreparedRanges& prepared,
  9. const Storage& value) noexcept {
  10. const std::array<std::size_t, format::kSectionCount> counts{
  11. value.strings.size(),
  12. value.activities.size(),
  13. value.scenarios.size(),
  14. value.bubbles.size(),
  15. value.states.size(),
  16. value.objects.size(),
  17. value.occurrences.size(),
  18. value.slots.size(),
  19. value.texts.size(),
  20. value.capabilities.size(),
  21. value.gates.size(),
  22. value.refusals.size(),
  23. value.actorClasses.size(),
  24. value.rsatDescriptors.size(),
  25. value.rsatSchemas.size(),
  26. value.rsatFields.size(),
  27. value.squads.size(),
  28. value.squadMembers.size(),
  29. value.squadAnchors.size(),
  30. value.authoredSceneResources.size(),
  31. value.authoredSceneSquadEdges.size(),
  32. value.taskTargets.size(),
  33. value.dialogueCueTexts.size(),
  34. value.directiveElements.size(),
  35. value.activityBindingTags.size(),
  36. value.activityBindingLocators.size(),
  37. value.behaviorPrograms.size(),
  38. value.behaviorInputs.size(),
  39. value.behaviorChannelWrites.size(),
  40. value.behaviorOwners.size(),
  41. value.behaviorActivityBindings.size(),
  42. value.actorMessageSchemas.size(),
  43. value.actorCommandDefinitions.size(),
  44. value.actorBehaviorProfiles.size(),
  45. value.simulationEventDefinitions.size(),
  46. value.runtimeSchemas.size(),
  47. value.runtimeFields.size(),
  48. value.sobjectRsats.size(),
  49. value.sobjectRsatDescriptors.size(),
  50. value.entityTypeDefinitions.size(),
  51. value.sobjectRsatFieldBindings.size(),
  52. value.runtimeTypeDefinitions.size(),
  53. value.actorStateNames.size(),
  54. value.actorSequenceTables.size(),
  55. value.actorSequenceEntries.size(),
  56. value.actorSequenceBindings.size(),
  57. };
  58. const bool bounded = std::all_of(counts.begin(), counts.end(), [](std::size_t count) {
  59. return count <= (std::numeric_limits<std::uint32_t>::max)();
  60. });
  61. return bounded && !value.strings.empty() && !value.activities.empty()
  62. && !value.actorMessageSchemas.empty() && !value.actorCommandDefinitions.empty()
  63. && value.actorBehaviorProfiles.size() == value.actorClasses.size()
  64. && !value.simulationEventDefinitions.empty() && !value.runtimeSchemas.empty()
  65. && !value.runtimeFields.empty() && !value.sobjectRsats.empty()
  66. && !value.entityTypeDefinitions.empty()
  67. && value.sobjectRsatFieldBindings.size() == value.rsatFields.size()
  68. && !value.runtimeTypeDefinitions.empty()
  69. && prepared.scenarioBubbles.size() == value.scenarios.size()
  70. && prepared.scenarioStates.size() == value.scenarios.size()
  71. && prepared.scenarioOccurrences.size() == value.scenarios.size()
  72. && prepared.bubbleStates.size() == value.bubbles.size()
  73. && prepared.objectSlots.size() == value.objects.size();
  74. }
  75. } // namespace sunrise::client::content::activity::sdk_generation::pack_composer::detail