Changeset: e58565e1f0ad for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e58565e1f0ad
Modified Files:
        sql/backends/monet5/vaults/lidar/lidar.c
Branch: data-vaults
Log Message:

[LiDAR]: Refactoring continued


diffs (206 lines):

diff --git a/sql/backends/monet5/vaults/lidar/lidar.c 
b/sql/backends/monet5/vaults/lidar/lidar.c
--- a/sql/backends/monet5/vaults/lidar/lidar.c
+++ b/sql/backends/monet5/vaults/lidar/lidar.c
@@ -1291,18 +1291,49 @@ LIDARattach(Client cntxt, MalBlkPtr mb, 
        return MAL_SUCCEED;
 }
 
+typedef union retval {
+       bte val_bte;
+       sht val_sht;
+       int val_int;
+       lng val_lng;
+#ifdef HAVE_HGE
+       hge val_hge;
+#endif
+       dbl val_dbl;
+} RetVal;
+
+static RetVal readValue(LASPointH p, ParameterValues param) {
+       RetVal ret;
+
+       switch(param) {
+       case PARAM_X_COORD:
+               ret.val_dbl = LASPoint_GetX(p);
+               break;
+       case PARAM_Y_COORD:
+               ret.val_dbl = LASPoint_GetY(p);
+               break;
+       case PARAM_Z_COORD:
+               ret.val_dbl = LASPoint_GetZ(p);
+               break;
+       default:
+               fprintf(stderr, "Unimplemented\n");
+       }
+
+       return ret;
+}
+
 #define READ_ARRAY(BAT_TYPE)                                                   
                        \
 static BAT *                                                                   
                                        \
 read_array_##BAT_TYPE(str fname,                                               
                        \
-                                         double (*callback)(LASPointH),        
                        \
-                                         long rows, double scale,              
                                \
-                                         short use_scale,  int *error_code)    
                \
+                                         ParameterValues val, long rows,       
                        \
+                                         double scale, int *error_code)        
                        \
 {                                                                              
                                                        \
        BAT *b;                                                                 
                                        \
        BAT_TYPE *d = NULL;                                                     
                                \
        LASPointH p = NULL;                                                     
                                \
        LASReaderH reader = NULL;                                               
                                \
        int i;                                                                  
                                                \
+       RetVal value;                                                           
                                        \
                                                                                
                                                        \
        b = COLnew(0, TYPE_##BAT_TYPE, rows, PERSISTENT);                       
        \
                                                                                
                                                        \
@@ -1325,11 +1356,15 @@ read_array_##BAT_TYPE(str fname,                        
                                        
        p = LASReader_GetNextPoint(reader);                                     
                \
        i = 0;                                                                  
                                                \
        while(p) {                                                              
                                                \
-               if (use_scale) {                                                
                                        \
-                       d[i] = callback(p)/scale;                               
                                \
-               }                                                               
                                                        \
-               else {                                                          
                                        \
-                       d[i] = callback(p);                                     
                                \
+               switch(val) {                                                   
                                        \
+               case PARAM_X_COORD:                                             
                                \
+               case PARAM_Y_COORD:                                             
                                \
+               case PARAM_Z_COORD:                                             
                                \
+                       value = readValue(p, val);                              
                                \
+                       d[i] = value.val_dbl/scale;                             
                        \
+                       break;                                                  
                                                \
+               default:                                                        
                                                \
+                       fprintf(stderr, "Unimplemented\n");                     
                \
                }                                                               
                                                        \
                p = LASReader_GetNextPoint(reader);                             
                \
                i++;                                                            
                                                \
@@ -1357,8 +1392,8 @@ READ_ARRAY(lng)
 READ_ARRAY(hge)
 #endif
 
-static
-str LIDARloadTable_(mvc *m, sql_schema *sch, sql_table *lidar_tbl, str tname, 
sql_table *tbl)
+static str
+LIDARloadTable_(mvc *m, sql_schema *sch, sql_table *lidar_tbl, str tname, 
sql_table *tbl)
 {
        sql_table *lidar_fl, *lidar_cl;
        sql_column *col; /*, *colx, *coly, *colz;*/
@@ -1378,7 +1413,6 @@ str LIDARloadTable_(mvc *m, sql_schema *
        int input_params;
        double scalex, scaley, scalez;
        int error_code;
-       short use_scale;
 
        col = mvc_bind_column(m, lidar_tbl, "name");
        rid = table_funcs.column_find_row(m->session->tr, col, tname, NULL);
@@ -1416,30 +1450,29 @@ str LIDARloadTable_(mvc *m, sql_schema *
        col = mvc_bind_column(m, lidar_tbl, "LoadParams");
        input_params = *(int*)table_funcs.column_find_value(m->session->tr, 
col, rid);
 
-       for (int x = 1; x < PARAMS_END_SENTINEL; x <<= 1) {
-               if (input_params & x) {
-                       switch(x) {
-                       case(PARAM_X_COORD):
+       for (int prm = 1; prm < PARAMS_END_SENTINEL; prm <<= 1) {
+               if (input_params & prm) {
+                       switch(prm) {
+                       case PARAM_X_COORD:
                                col = mvc_bind_column(m, lidar_cl, "file_id");
                                tid = 
table_funcs.column_find_row(m->session->tr, col, (void *)&fid, NULL);
                                col = mvc_bind_column(m, lidar_cl, "ScaleX");
                                scalex = 
*(double*)table_funcs.column_find_value(m->session->tr, col, tid);
                                col = mvc_bind_column(m, lidar_cl, 
"PrecisionX");
                                precisionx = 
*(sht*)table_funcs.column_find_value(m->session->tr, col, tid);
-                               use_scale = 1;
                                if (precisionx <= 2)
-                                       bat = read_array_bte(fname, 
LASPoint_GetX, rows, scalex, use_scale, &error_code);
+                                       bat = read_array_bte(fname, prm, rows, 
scalex, &error_code);
                                else if (precisionx <= 4)
-                                       bat = read_array_sht(fname, 
LASPoint_GetX, rows, scalex, use_scale, &error_code);
+                                       bat = read_array_sht(fname, prm, rows, 
scalex, &error_code);
                                else if (precisionx <= 8)
-                                       bat = read_array_int(fname, 
LASPoint_GetX, rows, scalex, use_scale, &error_code);
+                                       bat = read_array_int(fname, prm, rows, 
scalex, &error_code);
                                else if (precisionx <= 16)
-                                       bat = read_array_int(fname, 
LASPoint_GetX, rows, scalex, use_scale, &error_code);
+                                       bat = read_array_int(fname, prm, rows, 
scalex, &error_code);
                                else if (precisionx <= 32)
-                                       bat = read_array_lng(fname, 
LASPoint_GetX, rows, scalex, use_scale, &error_code);
+                                       bat = read_array_lng(fname, prm, rows, 
scalex, &error_code);
 #ifdef HAVE_HGE
                                else if (precisionx <= 64)
-                                       bat = read_array_hge(fname, 
LASPoint_GetX, rows, scalex, use_scale, &error_code);
+                                       bat = read_array_hge(fname, prm, rows, 
scalex, &error_code);
 #endif
                                else {
                                        bat = NULL;
@@ -1447,27 +1480,26 @@ str LIDARloadTable_(mvc *m, sql_schema *
                                }
                                column = mvc_bind_column(m, tbl, "x");
                                break;
-                       case(PARAM_Y_COORD):
+                       case PARAM_Y_COORD:
                                col = mvc_bind_column(m, lidar_cl, "file_id");
                                tid = 
table_funcs.column_find_row(m->session->tr, col, (void *)&fid, NULL);
                                col = mvc_bind_column(m, lidar_cl, "ScaleY");
                                scaley = 
*(double*)table_funcs.column_find_value(m->session->tr, col, tid);
                                col = mvc_bind_column(m, lidar_cl, 
"PrecisionY");
                                precisiony = 
*(sht*)table_funcs.column_find_value(m->session->tr, col, tid);
-                               use_scale = 1;
                                if (precisiony <= 2)
-                                       bat = read_array_bte(fname, 
LASPoint_GetY, rows, scaley, use_scale, &error_code);
+                                       bat = read_array_bte(fname, prm, rows, 
scaley, &error_code);
                                else if (precisiony <= 4)
-                                       bat = read_array_sht(fname, 
LASPoint_GetY, rows, scaley, use_scale, &error_code);
+                                       bat = read_array_sht(fname, prm, rows, 
scaley, &error_code);
                                else if (precisiony <= 8)
-                                       bat = read_array_int(fname, 
LASPoint_GetY, rows, scaley, use_scale, &error_code);
+                                       bat = read_array_int(fname, prm, rows, 
scaley, &error_code);
                                else if (precisiony <= 16)
-                                       bat = read_array_int(fname, 
LASPoint_GetY, rows, scaley, use_scale, &error_code);
+                                       bat = read_array_int(fname, prm, rows, 
scaley, &error_code);
                                else if (precisiony <= 32)
-                                       bat = read_array_lng(fname, 
LASPoint_GetY, rows, scaley, use_scale, &error_code);
+                                       bat = read_array_lng(fname, prm, rows, 
scaley, &error_code);
 #ifdef HAVE_HGE
                                else if (precisiony <= 64)
-                                       bat = read_array_hge(fname, 
LASPoint_GetY, rows, scaley, use_scale, &error_code);
+                                       bat = read_array_hge(fname, prm, rows, 
scaley, &error_code);
 #endif
                                else {
                                        bat = NULL;
@@ -1475,7 +1507,7 @@ str LIDARloadTable_(mvc *m, sql_schema *
                                }
                                column = mvc_bind_column(m, tbl, "y");
                                break;
-                       case(PARAM_Z_COORD):
+                       case PARAM_Z_COORD:
                                col = mvc_bind_column(m, lidar_cl, "file_id");
                                tid = 
table_funcs.column_find_row(m->session->tr, col, (void *)&fid, NULL);
                                col = mvc_bind_column(m, lidar_cl, "ScaleZ");
@@ -1483,18 +1515,18 @@ str LIDARloadTable_(mvc *m, sql_schema *
                                col = mvc_bind_column(m, lidar_cl, 
"PrecisionZ");
                                precisionz = 
*(sht*)table_funcs.column_find_value(m->session->tr, col, tid);
                                if (precisionz <= 2)
-                                       bat = read_array_bte(fname, 
LASPoint_GetZ, rows, scalez, use_scale, &error_code);
+                                       bat = read_array_bte(fname, prm, rows, 
scalez, &error_code);
                                else if (precisionz <= 4)
-                                       bat = read_array_sht(fname, 
LASPoint_GetZ, rows, scalez, use_scale, &error_code);
+                                       bat = read_array_sht(fname, prm, rows, 
scalez, &error_code);
                                else if (precisionz <= 8)
-                                       bat = read_array_int(fname, 
LASPoint_GetZ, rows, scalez, use_scale, &error_code);
+                                       bat = read_array_int(fname, prm, rows, 
scalez, &error_code);
                                else if (precisionz <= 16)
-                                       bat = read_array_int(fname, 
LASPoint_GetZ, rows, scalez, use_scale, &error_code);
+                                       bat = read_array_int(fname, prm, rows, 
scalez, &error_code);
                                else if (precisionz <= 32)
-                                       bat = read_array_lng(fname, 
LASPoint_GetZ, rows, scalez, use_scale, &error_code);
+                                       bat = read_array_lng(fname, prm, rows, 
scalez, &error_code);
 #ifdef HAVE_HGE
                                else if (precisionz <= 64)
-                                       bat = read_array_hge(fname, 
LASPoint_GetZ, rows, scalez, use_scale, &error_code);
+                                       bat = read_array_hge(fname, prm, rows, 
scalez, &error_code);
 #endif
                                else {
                                        bat = NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to