Generic class libraries for 1D array and 2D array: Array and Matrix. 1次元および2次元配列用の汎用クラスライブラリ: Array と Matrix.

Dependents:   F746_SD_WavPlayer CW_Decoder_using_FFT_on_F446 F446_MySoundMachine F446_ADF_Nlms ... more

Revision:
1:54b07f0d5ba1
Parent:
0:efe9b1f01090
Child:
2:a25dba17218c
--- a/Array.hpp	Sun May 22 06:14:18 2016 +0000
+++ b/Array.hpp	Mon Jul 25 13:37:16 2016 +0000
@@ -3,7 +3,7 @@
 //      If you define "#define DEBUG_ARRAY_CHECK",
 //      range check of index is available.
 //
-//  2016/05/22, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/07/25, Copyright (c) 2016 MIKAMI, Naoki
 //-----------------------------------------------------------------------
 
 #include "mbed.h"
@@ -20,8 +20,10 @@
         explicit Array(int i = 1) { ArrayNew(i); }  // default constructor
         Array(const Array<T>& a) { Copy(a); }       // copy constructor
         inline Array(int i, T initialValue);        // constructor with initialization
+        inline Array(int i, const T val[]);         // constructor with assignment built-in array
         ~Array() { delete[] v_; }                   // destructor
         inline void Fill(T val);                    // fill with same value
+        inline void Assign(const T val[]);          // assign  built-in array
         void SetSize(int i);                        // setting size
         int Length() const { return size_; }        // get size of array
         Array<T>& operator=(const Array<T>& a);     // assignment
@@ -45,11 +47,18 @@
 //-----------------------------------------------------------------------
 
     // constructor with initialization
-    template <class T> inline Array<T>::Array(int i, T initialValue)
+    template <class T> Array<T>::Array(int i, T initialValue)
     {
         ArrayNew(i);
         Fill(initialValue);
     }
+                                     
+    // constructor with assignment built-in array
+    template <class T> Array<T>::Array(int i, const T val[])
+    {
+        ArrayNew(i);
+        Assign(val);
+    }
 
     template <class T> void Array<T>::SetSize(int i)
     {
@@ -62,10 +71,16 @@
     {
         for (int n=0; n<size_; n++) v_[n] = val;        
     }
-                                     
+
+    // assign  built-in array
+    template <class T> void Array<T>::Assign(const T val[])
+    {
+        for (int n=0; n<size_; n++) v_[n] = val[n];        
+    }          
+
     template <class T> Array<T>& Array<T>::operator=(const Array<T>& a)
     {
-        if (this != &a)                     // prohibition of self-assignment
+        if (this != &a) // prohibition of self-assignment
         {
             delete [] v_;
             Copy(a);
@@ -76,7 +91,7 @@
     template <class T> inline T& Array<T>::operator[](int i)
     {
     #ifdef DEBUG_ARRAY_CHECK
-        Range(i);                               // out of bound ?
+        Range(i);       // out of bound ?
     #endif
         return v_[i];
     }
@@ -84,7 +99,7 @@
     template <class T> inline const T& Array<T>::operator[](int i) const
     {
     #ifdef DEBUG_ARRAY_CHECK
-        Range(i);                               // out of bounds ?
+        Range(i);       // out of bounds ?
     #endif
         return v_[i];
     }
@@ -101,7 +116,7 @@
     template <class T> void Array<T>::Copy(const Array<T>& v_src)
     {
         v_ = new T[size_ = v_src.size_];
-        for (int i=0; i<size_; i++) v_[i] = v_src.v_[i];
+        for (int n=0; n<size_; n++) v_[n] = v_src.v_[n];
     }
 
     // routine for constructor