summaryrefslogtreecommitdiff
path: root/src/main/CompositeElement.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/CompositeElement.h')
-rw-r--r--src/main/CompositeElement.h35
1 files changed, 14 insertions, 21 deletions
diff --git a/src/main/CompositeElement.h b/src/main/CompositeElement.h
index b032e62..76ca395 100644
--- a/src/main/CompositeElement.h
+++ b/src/main/CompositeElement.h
@@ -13,38 +13,30 @@
namespace vhc {
+/** Classe abstraite representant un element compose de differents elements.
+ * Cette classe est immuable publiquement, c'est a dire que les elements constituants de cet element compose
+ * ne peuvent pas etres reassignes, ajoutes ou supprimes depuis l'exterieur.
+ * Le but de cette contrainte est de faciliter la gestion de pointeurs, necessaires au polymorphisme. */
class CompositeElement: public Element {
+ /** Elements composants de cet element compose. */
std::vector < Element* > elements;
public:
- CompositeElement(
- const Vector3D& entry,
- const Vector3D& exit,
- double sectionRadius,
- const std::vector<Element*> & elements0,
- Element* next = NULL):
-
+ CompositeElement(const Vector3D& entry, const Vector3D& exit, double sectionRadius, Element* next = NULL):
Element(entry, exit, sectionRadius, next),
- elements(0) {
-
- for (int i(0); i < elements0.size(); ++i) {
- elements.push_back(elements0[i]->copy());
- };
- }
+ elements(0) {};
- virtual ~CompositeElement() {
- for (int i(0); i < elements.size(); ++i) {
- delete elements[i];
- elements[i] = NULL;
- };
- }
+ virtual ~CompositeElement();
- //TODO copy may not be alright (shallow)?
- virtual CompositeElement* copy() const {return new CompositeElement(*this);}
+ /*for (int i(0); i < elements.size(); ++i) {
+ delete elements[i];
+ elements[i] = NULL;
+ };*/
+ /** Determine si une particule a heurte le bord de cet element, donc d'un des elements composants. */
virtual bool isOutside(const Particle& particle) const {
for (int i(0); i < elements.size(); ++i) {
if (elements[i]->isOutside(particle)) return true;
@@ -52,6 +44,7 @@ public:
return false;
}
+ /** Determine si une particule a passe cet element, donc passe le dernier element composant. */
virtual bool isPast(const Particle& particle) const {
if (elements[elements.size() - 1]->isPast(particle)) return true;
else return false;