[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / particle-system / particle-impl.h
1 #ifndef DALI_TOOLKIT_PARTICLE_SYSTEM_INTERNAL_PARTICLE_H
2 #define DALI_TOOLKIT_PARTICLE_SYSTEM_INTERNAL_PARTICLE_H
3 /*
4  * Copyright (c) 2023 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 // CLASS HEADER
21 #include <dali-toolkit/internal/particle-system/particle-list-impl.h>
22
23 // EXTERNAL INCLUDES
24 #include <dali/public-api/math/quaternion.h>
25 #include <dali/public-api/math/vector3.h>
26 #include <dali/public-api/object/base-object.h>
27
28 // INTERNAL INCLUDES
29 #include <dali-toolkit/public-api/particle-system/particle-list.h>
30
31 namespace Dali::Toolkit::ParticleSystem::Internal
32 {
33 class Particle : public Dali::BaseObject
34 {
35 public:
36   ~Particle() = default;
37
38   Particle(Internal::ParticleList& ownerList, uint32_t index);
39
40   void* Get(ParticleStreamTypeFlagBit streamBit);
41
42   void* GetByIndex(uint32_t streamIndex);
43
44   [[nodiscard]] uint32_t GetIndex() const;
45
46 private:
47   Internal::ParticleList& mOwnerList;
48   uint32_t                mIndex;
49 };
50 } // namespace Dali::Toolkit::ParticleSystem::Internal
51
52 namespace Dali::Toolkit::ParticleSystem
53 {
54 inline Internal::Particle& GetImplementation(ParticleSystem::Particle& particle)
55 {
56   DALI_ASSERT_ALWAYS(particle && "Particle handle is empty");
57
58   BaseObject& handle = particle.GetBaseObject();
59
60   return static_cast<Internal::Particle&>(handle);
61 }
62
63 inline const Internal::Particle& GetImplementation(const ParticleSystem::Particle& particle)
64 {
65   DALI_ASSERT_ALWAYS(particle && "Particle handle is empty");
66
67   const BaseObject& handle = particle.GetBaseObject();
68
69   return static_cast<const Internal::Particle&>(handle);
70 }
71
72 } // namespace Dali::Toolkit::ParticleSystem
73
74 #endif // DALI_TOOLKIT_PARTICLE_SYSTEM_INTERNAL_PARTICLE_H