Morse Encoder/Decoder Library. Transforms char array to binary array and vice-versa.

A Morse Encoding/Decoding Library \n Transforms char arrays into bool arrays and vice-versa

Morse code taken from http://en.wikipedia.org/wiki/Morse_code Added some more characters :
- : DOT DOT DASH DASH
_ : DASH DASH DASH DOT
. : DASH DASH DASH DASH
/ : DOT DASH DOT DASH
@ : DOT DOT DOT DASH DOT
? : DOT DOT DASH DOT DOT

Here is an quick hello-world that show how to use this library

#include "mbed.h
#include "Morse.h"
    
Serial pc(USBTX, USBRX);
    
int main() {
    int i;
    Morse_data* data;
    char message[] = "Hello World";
    
    data = morse_create(morse_getBoolSize(message));
    morse_encode(message, data);
    for (i=0; i<data->length; i++) pc.printf("%d", data->data[i]);
    
    morse_decode(data, message);
    pc.printf("\nMessage was : %s\n", message);
    
    while(1);
}
Revision:
0:4648894e0d80
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MorseEncoder.h	Tue Sep 16 16:51:31 2014 +0000
@@ -0,0 +1,98 @@
+#ifndef INCLUDE_MORSE_ENCODER_H
+#define INCLUDE_MORSE_ENCODER_H
+
+#include "Morse.h"
+
+#define MORSE_0 {DASH, DASH, DASH, DASH, DASH}
+#define MORSE_1 {DOT,  DASH, DASH, DASH, DASH}
+#define MORSE_2 {DOT,  DOT,  DASH, DASH, DASH}
+#define MORSE_3 {DOT,  DOT,  DOT,  DASH, DASH}
+#define MORSE_4 {DOT,  DOT,  DOT,  DOT,  DASH}
+#define MORSE_5 {DOT,  DOT,  DOT,  DOT,  DOT }
+#define MORSE_6 {DASH, DOT,  DOT,  DOT,  DOT }
+#define MORSE_7 {DASH, DASH, DOT,  DOT,  DOT }
+#define MORSE_8 {DASH, DASH, DASH, DOT,  DOT }
+#define MORSE_9 {DASH, DASH, DASH, DASH, DOT }
+#define MORSE_A {DOT,  DASH, 0,    0,    0   }
+#define MORSE_B {DASH, DOT,  DOT,  DOT,  0   }
+#define MORSE_C {DASH, DOT,  DASH, DOT,  0   }
+#define MORSE_D {DASH, DOT,  DOT,  0,    0   }
+#define MORSE_E {DOT,  0,    0,    0,    0   }
+#define MORSE_F {DOT,  DOT,  DASH, DOT,  0   }
+#define MORSE_G {DASH, DASH, DOT,  0,    0   }
+#define MORSE_H {DOT,  DOT,  DOT,  DOT,  0   }
+#define MORSE_I {DOT,  DOT,  0,    0,    0   }
+#define MORSE_J {DOT,  DASH, DASH, DASH, 0   }
+#define MORSE_K {DASH, DOT, DASH,  0,    0   }
+#define MORSE_L {DOT,  DASH, DOT,  DOT,  0   }
+#define MORSE_M {DASH, DASH, 0,    0,    0   }
+#define MORSE_N {DASH, DOT,  0,    0,    0   }
+#define MORSE_O {DASH, DASH, DASH, 0,    0   }
+#define MORSE_P {DOT,  DASH, DASH, DOT,  0   }
+#define MORSE_Q {DASH, DASH, DOT,  DASH, 0   }
+#define MORSE_R {DOT,  DASH, DOT,  0,    0   }
+#define MORSE_S {DOT,  DOT,  DOT,  0,    0   }
+#define MORSE_T {DASH, 0,    0,    0,    0   }
+#define MORSE_U {DOT,  DOT,  DASH, 0,    0   }
+#define MORSE_V {DOT,  DOT,  DOT,  DASH, 0   }
+#define MORSE_W {DOT,  DASH, DASH, 0   , 0   }
+#define MORSE_X {DASH, DOT,  DOT,  DASH, 0   }
+#define MORSE_Y {DASH, DOT,  DASH, DASH, 0   }
+#define MORSE_Z {DASH, DASH, DOT,  DOT,  0   }
+
+#define MORSE_0_SIZE 19
+#define MORSE_1_SIZE 17
+#define MORSE_2_SIZE 15
+#define MORSE_3_SIZE 13
+#define MORSE_4_SIZE 11
+#define MORSE_5_SIZE 9
+#define MORSE_6_SIZE 11
+#define MORSE_7_SIZE 13
+#define MORSE_8_SIZE 15
+#define MORSE_9_SIZE 17
+#define MORSE_A_SIZE 5
+#define MORSE_B_SIZE 9
+#define MORSE_C_SIZE 11
+#define MORSE_D_SIZE 7
+#define MORSE_E_SIZE 1
+#define MORSE_F_SIZE 9
+#define MORSE_G_SIZE 9
+#define MORSE_H_SIZE 7
+#define MORSE_I_SIZE 3
+#define MORSE_J_SIZE 13
+#define MORSE_K_SIZE 9
+#define MORSE_L_SIZE 9
+#define MORSE_M_SIZE 7
+#define MORSE_N_SIZE 5
+#define MORSE_O_SIZE 11
+#define MORSE_P_SIZE 8
+#define MORSE_Q_SIZE 13
+#define MORSE_R_SIZE 7
+#define MORSE_S_SIZE 5
+#define MORSE_T_SIZE 3
+#define MORSE_U_SIZE 7
+#define MORSE_V_SIZE 9
+#define MORSE_W_SIZE 9
+#define MORSE_X_SIZE 11
+#define MORSE_Y_SIZE 13
+#define MORSE_Z_SIZE 11
+
+typedef struct {
+    int length;
+    bool* data;
+} MorseEncoder_data;
+
+class MorseEncoder {
+private:
+    static const unsigned int _values_size[36];
+    static const bool _values[36][5];
+    
+    unsigned int find(char c);
+    unsigned int addChar(unsigned int index_value, bool* result, unsigned int place);
+    
+public:
+    MorseEncoder_data* encode(char* word);
+    void destroy(MorseEncoder_data* data);
+};
+                                            
+#endif