From dde7c55d2d63c9aa351809614855e579bdd06223 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Wed, 24 Jan 2018 10:30:42 +0100
Subject: [PATCH] Factorize code

---
 control/tile.c | 105 +++++++++++++------------------------------------
 1 file changed, 28 insertions(+), 77 deletions(-)

diff --git a/control/tile.c b/control/tile.c
index 34491a212..2d2a05270 100644
--- a/control/tile.c
+++ b/control/tile.c
@@ -57,46 +57,21 @@
  *****************************************************************************/
 int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
 {
-    MORSE_context_t  *morse;
-    MORSE_sequence_t *sequence = NULL;
-    MORSE_request_t   request;
-    MORSE_desc_t B;
-    int status;
-
-    morse = morse_context_self();
-    if (morse == NULL) {
-        morse_fatal_error("MORSE_Lapack_to_Tile", "MORSE not initialized");
-        return MORSE_ERR_NOT_INITIALIZED;
-    }
-    /* Check descriptor for correctness */
-    if (morse_desc_check(A) != MORSE_SUCCESS) {
-        morse_error("MORSE_Lapack_to_Tile", "invalid descriptor");
-        return MORSE_ERR_ILLEGAL_VALUE;
+    switch( A->dtyp ) {
+    case MorseComplexDouble:
+        return MORSE_zLapack_to_Tile( (MORSE_Complex64_t *)Af77, LDA, A );
+        break;
+    case MorseComplexFloat:
+        return MORSE_cLapack_to_Tile( (MORSE_Complex32_t *)Af77, LDA, A );
+        break;
+    case MorseRealFloat:
+        return MORSE_sLapack_to_Tile( (float *)Af77, LDA, A );
+        break;
+    case MorseRealDouble:
+    default:
+        return MORSE_dLapack_to_Tile( (double *)Af77, LDA, A );
     }
-
-    /* Create the B descriptor to handle the Lapack format matrix */
-    B = morse_desc_init_user(
-        A->dtyp, A->mb, A->nb, A->bsiz,
-        LDA, A->n, 0, 0, A->m, A->n, 1, 1,
-        morse_getaddr_cm, morse_getblkldd_cm, NULL );
-    B.mat  = Af77;
-    B.styp = MorseCM;
-
-    RUNTIME_desc_create( &B );
-
-    morse_sequence_create(morse, &sequence);
-
-    morse_pzlacpy( MorseUpperLower, &B, A, sequence, &request );
-
-    RUNTIME_desc_flush( &B, sequence );
-    RUNTIME_desc_flush(  A, sequence );
-    RUNTIME_sequence_wait( morse, sequence );
-
-    RUNTIME_desc_destroy( &B );
-
-    status = sequence->status;
-    morse_sequence_destroy(morse, sequence);
-    return status;
+    return MORSE_ERR_ILLEGAL_VALUE;
 }
 
 /** ***************************************************************************
@@ -124,43 +99,19 @@ int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
  *****************************************************************************/
 int MORSE_Tile_to_Lapack(MORSE_desc_t *A, void *Af77, int LDA)
 {
-    MORSE_context_t  *morse;
-    MORSE_sequence_t *sequence = NULL;
-    MORSE_request_t   request;
-    MORSE_desc_t      B;
-    int status;
-
-    morse = morse_context_self();
-    if (morse == NULL) {
-        morse_fatal_error("MORSE_Tile_to_Lapack", "MORSE not initialized");
-        return MORSE_ERR_NOT_INITIALIZED;
-    }
-    /* Check descriptor for correctness */
-    if (morse_desc_check(A) != MORSE_SUCCESS) {
-        morse_error("MORSE_Tile_to_Lapack", "invalid descriptor");
-        return MORSE_ERR_ILLEGAL_VALUE;
+    switch( A->dtyp ) {
+    case MorseComplexDouble:
+        return MORSE_zTile_to_Lapack( A, (MORSE_Complex64_t *)Af77, LDA );
+        break;
+    case MorseComplexFloat:
+        return MORSE_cTile_to_Lapack( A, (MORSE_Complex32_t *)Af77, LDA );
+        break;
+    case MorseRealFloat:
+        return MORSE_sTile_to_Lapack( A, (float *)Af77, LDA );
+        break;
+    case MorseRealDouble:
+    default:
+        return MORSE_dTile_to_Lapack( A, (double *)Af77, LDA );
     }
-
-    /* Create the B descriptor to handle the Lapack format matrix */
-    B = morse_desc_init_user(
-        A->dtyp, A->mb, A->nb, A->bsiz,
-        LDA, A->n, 0, 0, A->m, A->n, 1, 1,
-        morse_getaddr_cm, morse_getblkldd_cm, NULL );
-    B.mat  = Af77;
-    B.styp = MorseCM;
-
-    RUNTIME_desc_create( &B );
-
-    morse_sequence_create(morse, &sequence);
-    morse_pzlacpy( MorseUpperLower, A, &B, sequence, &request );
-
-    RUNTIME_desc_flush(  A, sequence );
-    RUNTIME_desc_flush( &B, sequence );
-    RUNTIME_sequence_wait( morse, sequence );
-
-    RUNTIME_desc_destroy( &B );
-
-    status = sequence->status;
-    morse_sequence_destroy(morse, sequence);
-    return status;
+    return MORSE_ERR_ILLEGAL_VALUE;
 }
-- 
GitLab