#ifndef ALREADY_INCLUDED_2006_LIBD__DOUBLE_HH
#define ALREADY_INCLUDED_2006_LIBD__DOUBLE_HH
#include "libd.hh"
namespace dmp
{
   class Double : private Single
   {
   public:
      double v;
      rtti_same(Double);
private:
      Double(double v) : Single(DCODE_DOUBLE)
      {
         this->v = v;
      }
public:
      static ptr<Double> ctor()
      {
         return new Double(0);
      }
      static ptr<Double> ctor(double v)
      {
         return new Double(v);
      }
private:
      template <class T> friend class ptr;
      ~Double()
      {
      }
#ifdef DAVINS_IO_ONLINE
      friend dmp::Writer& operator << (dmp::Writer& w, Double& d)
      {
         ASSERT(&w != null);
         ASSERT(&d != null);
         w << d.v;
         return w;
      }
#endif 
   private:
      Double(const Double&);
      Double& operator = (const Double&);
   };
class Float : private Single
   {
   public:
      float v;
private:
      Float(float v) : Single(DCODE_FLOAT)
      {
         this->v = v;
      }
public:
      static ptr<Float> ctor()
      {
         return new Float(0);
      }
      static ptr<Float> ctor(float v)
      {
         return new Float(v);
      }
private:
      template <class T> friend class ptr;
      ~Float()
      {
      }
#ifdef DAVINS_IO_ONLINE
      friend dmp::Writer& operator << (dmp::Writer& w, Float& d)
      {
         ASSERT(&w != null);
         ASSERT(&d != null);
         w << d.v;
         return w;
      }
#endif 
   private:
      Float(const Float&);
      Float& operator = (const Float&);
   };
}
#endif