summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2011-03-12 11:20:07 +0000
committerJakob Odersky <jodersky@gmail.com>2011-03-12 11:20:07 +0000
commit042870bbcea4c39e8fbf9f07990dc9d64c92bde1 (patch)
tree566bdd68dfc72f090a7d07118fbd45866d465f25 /src
parentcc47a21b3c70a8f91ef945e6c127d4f2e3b007da (diff)
downloadvhc-042870bbcea4c39e8fbf9f07990dc9d64c92bde1.tar.gz
vhc-042870bbcea4c39e8fbf9f07990dc9d64c92bde1.tar.bz2
vhc-042870bbcea4c39e8fbf9f07990dc9d64c92bde1.zip
Reorganisation du repertoire source. Les sources principaux sont dans `src/main' et les tests dans `src/test'.
Diffstat (limited to 'src')
-rw-r--r--src/main/Makefile35
-rw-r--r--src/main/Particle.cc17
-rw-r--r--src/main/Particle.h38
-rw-r--r--src/main/Vector3D.cc29
-rw-r--r--src/main/Vector3D.h125
-rw-r--r--src/main/namespace.ccbak2
-rw-r--r--src/test/Makefile37
-rw-r--r--src/test/Vector3DTest.cc61
8 files changed, 344 insertions, 0 deletions
diff --git a/src/main/Makefile b/src/main/Makefile
new file mode 100644
index 0000000..af9deab
--- /dev/null
+++ b/src/main/Makefile
@@ -0,0 +1,35 @@
+#########################################################################
+# Makefile recursif #
+#=======================================================================#
+# Les variables suivantes sont definis dans un makefile plus haut. #
+# BASEDIR repertoire de base du projet #
+# SRCDIR repertoire contenant le code source #
+# BINDIR repertoire ou sont places toutes objets compiles #
+#########################################################################
+
+# Nom du repertoire contenant ce makefile
+LOCALDIR = main
+
+# ==> Ajouter ici les objets a compiler
+# Si un objet necessite une compilation non-standard (i.e. pas de regle du style Foo.o : Foo.cc Foo.h), rajouter
+# cette regle.
+OBJS = Vector3D.o Particle.o
+
+all: checkdirs lib
+
+# Verifie l'existance du repertoire de sortie
+checkdirs: $(BINDIR)/$(LOCALDIR)
+
+# Cree le repertoire de sortie
+$(BINDIR)/$(LOCALDIR):
+ @mkdir -p $@
+
+# Cree une librairie statique des fichiers objets
+lib: $(OBJS)
+ @echo "Packing library..."
+ ar rcs $(BINDIR)/$(LOCALDIR)/libvhc.a $(addprefix $(BINDIR)/$(LOCALDIR)/,$(OBJS))
+ @echo "Done packing library."
+
+# Regle implicite qui modifie le repertoire de destination des fichiers .o
+%.o: %.cc
+ $(CXX) $(CXXFLAGS) -c $< -o $(BINDIR)/$(LOCALDIR)/$@ \ No newline at end of file
diff --git a/src/main/Particle.cc b/src/main/Particle.cc
new file mode 100644
index 0000000..2917449
--- /dev/null
+++ b/src/main/Particle.cc
@@ -0,0 +1,17 @@
+/*
+ * Particle.cc
+ *
+ * Created on: Mar 9, 2011
+ * Author: jakob
+ */
+
+#include "Particle.h"
+
+namespace vhc {
+
+
+Particle::~Particle() {
+ // TODO Auto-generated destructor stub
+}
+
+}
diff --git a/src/main/Particle.h b/src/main/Particle.h
new file mode 100644
index 0000000..128dbb1
--- /dev/null
+++ b/src/main/Particle.h
@@ -0,0 +1,38 @@
+/*
+ * Particle.h
+ *
+ * Created on: Mar 9, 2011
+ * Author: jakob
+ */
+
+#ifndef PARTICLE_H_
+#define PARTICLE_H_
+
+#include "Vector3D.h"
+
+namespace vhc {
+
+class Particle {
+
+private:
+ Vector3D position;
+
+public:
+/*
+ Vector3D getPosition();
+
+ Vector3D getVelocity();
+
+ Vector3D getEnergy();
+
+ Vector3D getGamma();
+
+ Vector3D getMomentum();
+*/
+ Particle(): position(0, 0, 0) {};
+ virtual ~Particle();
+};
+
+}
+
+#endif /* PARTICLE_H_ */
diff --git a/src/main/Vector3D.cc b/src/main/Vector3D.cc
new file mode 100644
index 0000000..258922f
--- /dev/null
+++ b/src/main/Vector3D.cc
@@ -0,0 +1,29 @@
+/*
+ * Vector3D.cc
+ *
+ * Created on: Mar 1, 2011
+ * Author: Jakob Odersky
+ */
+
+#include <iostream>
+#include "Vector3D.h"
+
+using namespace std;
+
+namespace vhc {
+
+Vector3D const Vector3D::Null = Vector3D(0.0, 0.0, 0.0);
+Vector3D const Vector3D::i = Vector3D(1.0, 0.0, 0.0);
+Vector3D const Vector3D::j = Vector3D(0.0, 1.0, 0.0);
+Vector3D const Vector3D::k = Vector3D(0.0, 0.0, 1.0);
+
+ostream& operator<< (ostream& output, const Vector3D& v) {
+ output << v.toString();
+ return output;
+}
+
+Vector3D operator* (double n, const Vector3D& v) {
+ return v * n;
+}
+
+}
diff --git a/src/main/Vector3D.h b/src/main/Vector3D.h
new file mode 100644
index 0000000..042463d
--- /dev/null
+++ b/src/main/Vector3D.h
@@ -0,0 +1,125 @@
+/*
+ * Vector3D.h
+ *
+ * Created on: Mar 1, 2011
+ * Author: Jakob Odersky
+ */
+
+#ifndef VECTOR3D_H_
+#define VECTOR3D_H_
+
+#include <iostream>
+#include <sstream>
+#include <math.h>
+#include <stdexcept>
+
+namespace vhc {
+
+/** Un vecteur de dimension trois. Les instances de cette classes sont completement
+ * invariables, c'est-a-dire un vecteur une fois initialise, ses composantes ne
+ * peuvent plus etres modifies.
+ * Le fait qu'un vecteur ne possede pas d'etat, facilite le raisonement et parait
+ * surtout naturelle.
+ * Ainsi, chaque operation sur un vecteur retourne une nouvelle instance. La
+ * performance perdue ainsi est minimale pour une classe ne contenant que trois
+ * champs.
+ */
+class Vector3D {
+
+private:
+ /** Composante x. */
+ double x;
+
+ /** Composante y. */
+ double y;
+
+ /** Composante z. */
+ double z;
+
+public:
+
+ /** Cree une nouvelle instance de <code>Vector3D</code>.
+ * @param x 1e composante
+ * @param y 2e composante
+ * @param z 3e composante
+ */
+ Vector3D(double _x, double _y, double _z) : x(_x), y(_y), z(_z) {};
+
+ /** Retourne la composante x de ce vecteur. */
+ double getX() const {return x;};
+
+ /** Retourne la composante y de ce vecteur. */
+ double getY() const {return y;};
+
+ /** Retourne la composante z de ce vecteur. */
+ double getZ() const {return z;};
+
+ /** Verifie si ce vecteur et le vecteur <code>v</code> sont eqaux, i.e. qu'ils ont les memes composantes. */
+ bool operator== (const Vector3D& v) const {return x == v.x && y == v.y && z == v.z;};
+
+ /** Verifie si ce vecteur et le vecteur <code>v</code> sont differents, i.e. qu'ils ont des composantes differentes. */
+ bool operator!= (const Vector3D& v) const {return !((*this) == (v));};
+
+ /** Addition de vecteurs. Retourne un nouveau vecteur resultant de l'addition de ce vecteur avec <code>v</code>. */
+ Vector3D operator+ (const Vector3D& v) const {return Vector3D(x + v.x, y + v.y, z + v.z);};
+
+ /** Multiplication scalaire. Retourne un nouveau vecteur resultant de la multiplication de ce vecteur par <code>n</code>. */
+ Vector3D operator* (double n) const {return Vector3D(x * n, y * n, z * n);};
+
+ /** Retourne l'oppose de ce vecteur. */
+ Vector3D operator-() const {return (*this) * (-1.0);};
+
+ /** Soustraction de vecteurs. Retourne un nouveau vecteur resultant de la soustraction de ce vecteur avec <code>v</code>. */
+ Vector3D operator- (const Vector3D& v) const {return (*this) + -v;};
+
+ /** Division scalaire. Retourne un nouveau vecteur resultant de la division de ce vecteur par <code>n</code>. */
+ Vector3D operator/ (double n) const {return (*this) * (1.0 / n) ;};
+
+ /** Produit scalaire. Retourne le produit scalaire de ce vecteur avec le vecteur <code>v</code>. */
+ double dot(const Vector3D& v) const {return x * v.x + y * v.y + z * v.z;};
+
+ /** Produit vectoriel. Retourne le produit vectoriel directe (main droite) de ce vecteur avec le vecteur <code>v</code>.
+ * Nous avons decide de ne pas utiliser l'operateur `^' pour representer le produit vectoriel car sa precedence est plus
+ * basse que toutes autres operations binaires sur les vecteurs.
+ */
+ Vector3D cross(const Vector3D& v) const {return Vector3D(y * v.z - v.y * z, v.x * z - x * v.z, x * v.y - v.x * y);};
+
+ /** Vecteur unitaire de ce vecteur. */
+ Vector3D operator~() const {
+ if (getNorm() != 0.0) return (*this) / getNorm();
+ else throw std::domain_error("Unit vector.");
+ };
+
+ Vector3D getUnit() const {return ~(*this);}
+
+ /** Retourne la norme du vecteur. */
+ double getNorm() const {return sqrt(dot(*this));};
+
+ /** Retourne une representation en chaine de ce vecteur. */
+ std::string toString() const {
+ std::stringstream s;
+ s << "Vector3D(" << x << ", " << y << ", " << z << ")";
+ return s.str();
+ };
+
+ /** Vecteur nulle. (0,0,0) */
+ static const Vector3D Null;
+
+ /** Vecteur unitaire, d'axe x. (1, 0, 0) */
+ static const Vector3D i;
+
+ /** Vecteur unitaire, d'axe y. (0, 1, 0) */
+ static const Vector3D j;
+
+ /** Vecteur unitaire, d'axe z. (0, 0, 1) */
+ static const Vector3D k;
+
+};
+
+std::ostream& operator<< (std::ostream& output, const Vector3D& v);
+
+Vector3D operator* (double n, const Vector3D& v);
+
+} // namespace
+
+#endif /* VECTOR3D_H_ */
diff --git a/src/main/namespace.ccbak b/src/main/namespace.ccbak
new file mode 100644
index 0000000..52d293c
--- /dev/null
+++ b/src/main/namespace.ccbak
@@ -0,0 +1,2 @@
+/** Espace de nom contenant tout code relatif au projet `Virtual Hadron Collider'. */
+namespace vhc {};
diff --git a/src/test/Makefile b/src/test/Makefile
new file mode 100644
index 0000000..e8a9340
--- /dev/null
+++ b/src/test/Makefile
@@ -0,0 +1,37 @@
+#########################################################################
+# Makefile recursif #
+#=======================================================================#
+# Les variables suivantes sont definis dans un makefile plus haut. #
+# BASEDIR repertoire de base du projet #
+# SRCDIR repertoire contenant le code source #
+# BINDIR repertoire ou sont places toutes objets compiles #
+#=======================================================================#
+# ==> indique des champs modifiables aisement #
+#=======================================================================#
+# Comme tous les tests dependent du projet principal, les references au #
+# dossier `main' sont autorisees. #
+#########################################################################
+
+# Nom du repertoire contenant ce makefile
+LOCALDIR = test
+
+# ==> Rajouter ici les tests a compiler, i.e. les noms des fichiers tests _sans_ extension
+# Si un objet X necessite une compilation non-standard (i.e. pas de regle du style X: X.cc X.h), rajouter cet objet
+# en fin de BINS ne suffit pas. Il faut de plus creer une nouvelle regle.
+BINS = Vector3DTest
+
+# Inclure les headers de main (source principale)
+CXXFLAGS += -I $(SRCDIR)/main/
+
+all: checkdirs $(BINS)
+
+# Verifie l'existance du repertoire de sortie
+checkdirs: $(BINDIR)/$(LOCALDIR)
+
+# Cree le repertoire de sortie
+$(BINDIR)/$(LOCALDIR):
+ @mkdir -p $@
+
+# Regle implicite pour les fichiers sans extension (i.e. pour les executables)
+%: %.cc
+ $(CXX) $(CXXFLAGS) $< -static -L$(BINDIR)/main -lvhc -o $(BINDIR)/$(LOCALDIR)/$@
diff --git a/src/test/Vector3DTest.cc b/src/test/Vector3DTest.cc
new file mode 100644
index 0000000..bf4203a
--- /dev/null
+++ b/src/test/Vector3DTest.cc
@@ -0,0 +1,61 @@
+/*
+ * Vector3DTest.cc
+ *
+ * Created on: Mar 1, 2011
+ * Author: Jakob Odersky
+ */
+
+
+#include <iostream>
+#include <assert.h>
+#include <iomanip>
+#include <limits>
+//TODO change relative include
+#include "Vector3D.h"
+
+using namespace std;
+using namespace vhc;
+
+
+bool printTest();
+
+int main() {
+ //equality test
+ assert(Vector3D(1, 2, 3) == Vector3D(1, 2, 3));
+ assert(Vector3D(1, 2.4, 3) != Vector3D(1, 2, 3));
+
+ //addition test
+ assert(Vector3D(1, -0.9, 57683) + Vector3D(-1, 0.9, -57683) == Vector3D::Null);
+
+ //addition, mutliplication test
+ assert(Vector3D(4, 0, 16) / 4 == -Vector3D(0.25, 0, 1) * -4);
+
+ //length test
+ assert(Vector3D(0,3,4).getNorm() == 5);
+
+ bool caught = false;
+ try {
+ ~Vector3D::Null;
+ } catch (domain_error& ex) {
+ caught = true;
+ };
+ assert(caught == true);
+
+ cout << "Vector3D: tests completed successfully" << endl;
+
+ return 0;
+}
+
+bool printTest() {
+ cout << "PRINT TEST" << endl;
+ cout << Vector3D(1,2,3) << endl;
+ char answer;
+ do {
+ cout << "Was 'Vector3D(1,2,3)' displayed? (y/n)" << endl;
+ cin >> answer;
+ } while (answer != 'y' && answer != 'n');
+ cout << "END PRINT TEST" << endl;
+
+ if (answer == 'y') return true;
+ else return false;
+}