Cleaned up class heirarchy and removed storage of string identifier, using constexpr...
authorTrevor Irons <Trevor.Irons@lemmasoftware.org>
Thu, 16 Jun 2016 22:35:41 +0000 (16:35 -0600)
committerTrevor Irons <Trevor.Irons@lemmasoftware.org>
Thu, 16 Jun 2016 22:35:41 +0000 (16:35 -0600)
examples/DEMGrain.cpp
include/DEMGrain.h [new file with mode: 0644]
include/DEMParticle.h
src/DEMGrain.cpp [new file with mode: 0644]
src/DEMParticle.cpp

index a07831a..c96463f 100644 (file)
@@ -28,12 +28,19 @@ int main()
     std::cout << *Grain << std::endl;
     YAML::Node ng = Grain->Serialize();
 
+    auto Grain3 = DEMGrain::NewSP();
+    std::cout << Grain3->GetName() << std::endl;
+    std::cout << ((DEMParticle*)(Grain3.get()))->GetName() << std::endl;
+
+    auto Grain4 = DEMParticle::NewSP();
+    std::cout << Grain4->GetName() << std::endl;
+
     //Vector3r pos; pos << 2,3,4;
 
     //Grain->SetCentreMass( pos );
 
-    auto Grain2 = DEMGrain::DeSerialize(ng);
-    std::cout << *Grain2 << std::endl;
+    //auto Grain2 = DEMParticle::DeSerialize(ng);
+    //std::cout << *Grain2 << std::endl;
 
 /*
     if ( *Grain2 != *Grain) {
diff --git a/include/DEMGrain.h b/include/DEMGrain.h
new file mode 100644 (file)
index 0000000..5ca30ef
--- /dev/null
@@ -0,0 +1,104 @@
+/* This file is part of Lemma, a geophysical modelling and inversion API.
+ * More information is available at http://lemmasoftware.org
+ */
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/**
+ * @file
+ * @date      06/16/2016 02:10:28 PM
+ * @version   $Id$
+ * @author    Trevor Irons (ti)
+ * @email     tirons@egi.utah.edu
+ * @copyright Copyright (c) 2016, University of Utah
+ * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
+ */
+
+#ifndef  DEMGRAIN_INC
+#define  DEMGRAIN_INC
+
+#pragma once
+#include "DEMParticle.h"
+
+namespace Lemma {
+
+    /**
+      \brief
+      \details
+     */
+    class DEMGrain : public DEMParticle {
+
+        friend std::ostream &operator<<(std::ostream &stream, const DEMGrain &ob);
+
+        public:
+
+        // ====================  LIFECYCLE     =======================
+
+        /*
+         *  Factory method for generating concrete class.
+         *  @return a std::shared_ptr of type DEMGrain
+         */
+        static std::shared_ptr< DEMGrain > NewSP();
+
+        /**
+         *  Uses YAML to serialize this object.
+         *  @return a YAML::Node
+         *   @see DEMGrain::DeSerialize
+         */
+        YAML::Node Serialize() const;
+
+        /**
+         *   Constructs an DEMGrain object from a YAML::Node.
+         *   @see DEMGrain::Serialize
+         */
+        static std::shared_ptr<DEMGrain> DeSerialize(const YAML::Node& node);
+
+        // ====================  OPERATORS     =======================
+
+        // ====================  OPERATIONS    =======================
+
+        // ====================  ACCESS        =======================
+
+        // ====================  INQUIRY       =======================
+
+        virtual inline std::string GetName () const {
+            return std::string(this->CName);
+        }
+
+        protected:
+
+        // ====================  LIFECYCLE     =======================
+
+        /**
+         * Default protected constructor, use NewSP methods to construct
+         * @see DEMGrain::NewSP
+         */
+        DEMGrain ( );
+
+        /**
+         * Protected DeDerializing constructor, use factory DeSerialize  method.
+         * @see DEMGrain::DeSerialize
+         */
+        DEMGrain (const YAML::Node& node);
+
+        /** Default protected destructor, use smart pointers (std::shared_ptr) */
+        ~DEMGrain ();
+
+        // ====================  DATA MEMBERS  =========================
+
+        private:
+
+        static constexpr auto CName = "DEMGrain";
+
+    }; // -----  end of class  DEMGrain  -----
+}  // -----  end of namespace Lemma ----
+
+/* vim: set tabstop=4 expandtab: */
+/* vim: set filetype=cpp: */
+
+
+#endif   // ----- #ifndef DEMGRAIN_INC  -----
+
index 2fe1cfb..97a7f5a 100644 (file)
@@ -54,8 +54,11 @@ namespace Lemma {
         Vector3r GetCentreMass(  );
 
         // ====================  INQUIRY       =======================
+        /** Returns the name of the underlying class, similiar to Python's type */
+        virtual inline std::string GetName() const {
+            return this->CName;
+        }
 
-#ifdef HAVE_YAMLCPP
         /**
          *  Uses YAML to serialize this object.
          *  @return a YAML::Node
@@ -66,25 +69,26 @@ namespace Lemma {
          *   Constructs an object from a YAML::Node.
          */
         static std::shared_ptr< DEMParticle > DeSerialize(const YAML::Node& node);
-#endif
 
         protected:
 
         // ====================  LIFECYCLE     =======================
 
         /** Default protected constructor, use New */
-        DEMParticle (const std::string& name);
+        DEMParticle ( );
 
-#ifdef HAVE_YAMLCPP
         /** Protected DeDerializing constructor, use factory DeSerialize  method*/
         DEMParticle (const YAML::Node& node);
-#endif
 
         /** Default protected destructor, use Delete */
         ~DEMParticle ();
 
         private:
 
+
+        /** ASCII string representation of the class name */
+        static constexpr auto CName = "DEMParticle";
+
         // ====================  DATA MEMBERS  =========================
 
         Vector3r    centreMass;
diff --git a/src/DEMGrain.cpp b/src/DEMGrain.cpp
new file mode 100644 (file)
index 0000000..a8a5138
--- /dev/null
@@ -0,0 +1,99 @@
+/* This file is part of Lemma, a geophysical modelling and inversion API.
+ * More information is available at http://lemmasoftware.org
+ */
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/**
+ * @file
+ * @date      06/16/2016 02:11:21 PM
+ * @version   $Id$
+ * @author    Trevor Irons (ti)
+ * @email     tirons@egi.utah.edu
+ * @copyright Copyright (c) 2016, University of Utah
+ * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
+ */
+
+
+#include "DEMGrain.h"
+
+namespace Lemma {
+
+    // ====================  FRIEND METHODS  =====================
+
+    std::ostream &operator << (std::ostream &stream, const DEMGrain &ob) {
+        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
+        return stream;
+    }
+
+    // ====================  LIFECYCLE     =======================
+
+    //--------------------------------------------------------------------------------------
+    //       Class:  DEMGrain
+    //      Method:  DEMGrain
+    // Description:  constructor (protected)
+    //--------------------------------------------------------------------------------------
+    DEMGrain::DEMGrain ( ) : DEMParticle( ) {
+
+    }  // -----  end of method DEMGrain::DEMGrain  (constructor)  -----
+
+    //--------------------------------------------------------------------------------------
+    //       Class:  DEMGrain
+    //      Method:  DEMGrain
+    // Description:  DeSerializing constructor (protected)
+    //--------------------------------------------------------------------------------------
+    DEMGrain::DEMGrain (const YAML::Node& node) : DEMParticle(node) {
+
+    }  // -----  end of method DEMGrain::DEMGrain  (constructor)  -----
+
+    //--------------------------------------------------------------------------------------
+    //       Class:  DEMGrain
+    //      Method:  NewSP()
+    // Description:  public constructor returing a shared_ptr
+    //--------------------------------------------------------------------------------------
+    std::shared_ptr< DEMGrain >  DEMGrain::NewSP() {
+        std::shared_ptr< DEMGrain > sp(new  DEMGrain( ), LemmaObjectDeleter() );
+        return sp;
+    }
+
+    //--------------------------------------------------------------------------------------
+    //       Class:  DEMGrain
+    //      Method:  ~DEMGrain
+    // Description:  destructor (protected)
+    //--------------------------------------------------------------------------------------
+    DEMGrain::~DEMGrain () {
+
+    }  // -----  end of method DEMGrain::~DEMGrain  (destructor)  -----
+
+    //--------------------------------------------------------------------------------------
+    //       Class:  DEMGrain
+    //      Method:  Serialize
+    //--------------------------------------------------------------------------------------
+    YAML::Node  DEMGrain::Serialize (  ) const {
+        YAML::Node node = DEMParticle::Serialize();
+        node.SetTag( GetName() );
+        // FILL IN CLASS SPECIFICS HERE
+        return node;
+    }          // -----  end of method DEMGrain::Serialize  -----
+
+    //--------------------------------------------------------------------------------------
+    //       Class:  DEMGrain
+    //      Method:  DeSerialize
+    //--------------------------------------------------------------------------------------
+    std::shared_ptr<DEMGrain> DEMGrain::DeSerialize ( const YAML::Node& node  ) {
+        if (node.Tag() !=  "DEMGrain" ) {
+            throw  DeSerializeTypeMismatch( "DEMGrain", node.Tag());
+        }
+        std::shared_ptr< DEMGrain > Object(new DEMGrain(node), LemmaObjectDeleter() );
+        return Object ;
+    }          // -----  end of method DEMGrain::DeSerialize  -----
+
+} // ----  end of namespace Lemma  ----
+
+/* vim: set tabstop=4 expandtab: */
+/* vim: set filetype=cpp: */
+
+
index f5b0234..022ab28 100644 (file)
@@ -35,7 +35,7 @@ std::ostream &operator << (std::ostream &stream, const DEMParticle &ob) {
 //      Method:  DEMParticle
 // Description:  constructor (protected)
 //--------------------------------------------------------------------------------------
-DEMParticle::DEMParticle (const std::string& name) : LemmaObject(name) {
+DEMParticle::DEMParticle ( ) : LemmaObject( ) {
 
 }  // -----  end of method DEMParticle::DEMParticle  (constructor)  -----
 
@@ -54,7 +54,7 @@ DEMParticle::DEMParticle (const YAML::Node& node) : LemmaObject(node) {
 // Description:  public constructor
 //--------------------------------------------------------------------------------------
 std::shared_ptr< DEMParticle > DEMParticle::NewSP() {
-    std::shared_ptr<DEMParticle> sp(new  DEMParticle("DEMParticle"), LemmaObjectDeleter() );
+    std::shared_ptr<DEMParticle> sp(new  DEMParticle( ), LemmaObjectDeleter() );
     return sp;
 }