Remove code duplications when switching over data types
There is a lot of duplicated code in Tango codebase. Most of the duplications come from switch
-ing over all possible Tango::DEV_XXX
types (some switch statements are over 500 lines long), where all the cases are (almost) the same except different variable names and types.
We can improve code quality and maintainability by replacing these duplications with template code. We would need to provide functions templates to access class members (e.g. WAttribute.short_val
, logn_val
, ...) and union members (e.g. AttrValue.sh_seq
, lg_seq
, ...) depending on CmdArgType runtime value.
-
We can also extract common parts from set_value()
overloads incppapi/server/attrsetval.cpp
.
Switching over types:
-
client/api_util.cpp
-
1769: case Tango::DEV_SHORT : -
2080: case Tango::DEV_SHORT :
-
-
server/device_2.cpp
-
1890: case Tango::DEV_SHORT :
-
-
server/attrgetsetprop.cpp
-
1154: case Tango::DEV_SHORT: -
1227: case Tango::DEV_SHORT: -
1391: case Tango::DEV_SHORT: -
1477: case Tango::DEV_SHORT: -
1939: case Tango::DEV_SHORT: -
2601: case Tango::DEV_SHORT: -
2669: case Tango::DEV_SHORT: -
2737: case Tango::DEV_SHORT: -
3421: case Tango::DEV_SHORT:
-
-
server/device.cpp
-
2943: case Tango::DEV_SHORT : -
5167: case Tango::DEV_SHORT : -
5395: case Tango::DEV_SHORT :
-
-
client/devapi_utils.cpp
-
160: case DEV_SHORT: -
262: case Tango::DEV_SHORT:
-
-
client/devapi_utils.tpp
-
294: case DEV_SHORT:
-
-
server/w_attribute.cpp
-
196: case Tango::DEV_SHORT: -
365: case Tango::DEV_SHORT : -
1223: case Tango::DEV_SHORT : -
2616: case Tango::DEV_SHORT : -
2683: case Tango::DEV_SHORT : -
2762: case Tango::DEV_SHORT : -
2894: case Tango::DEV_SHORT: -
3249: case Tango::DEV_SHORT:
-
-
server/deviceclass.cpp
-
372: case Tango::DEV_SHORT:
-
-
server/device_3.cpp
-
2327: case Tango::DEV_SHORT :
-
-
server/pollring.tpp
-
621: case Tango::DEV_SHORT : -
806: case Tango::DEV_SHORT:
-
-
server/logstream.cpp
-
220: case Tango::DEV_SHORT : -
527: case Tango::DEV_SHORT:
-
-
server/multiattribute.cpp
-
453: case DEV_SHORT: -
1693: case Tango::DEV_SHORT :
-
-
server/pollring.cpp
-
1111: case DEV_SHORT: -
1402: case Tango::DEV_SHORT: -
1568: case Tango::DEV_SHORT : -
1762: case Tango::DEV_SHORT : -
1942: case Tango::DEV_SHORT :
-
-
server/fwdattrdesc.cpp
-
366: case DEV_SHORT: -
491: case DEV_SHORT:
-
-
server/attrdesc.cpp
-
530: case Tango::DEV_SHORT:
-
-
server/w_attribute_spec.tpp
-
166: case Tango::DEV_SHORT: -
360: case Tango::DEV_SHORT:
-
-
server/attribute_spec.tpp
-
178: case Tango::DEV_SHORT: -
371: case Tango::DEV_SHORT: -
564: case Tango::DEV_SHORT: -
757: case Tango::DEV_SHORT:
-
-
server/attribute.cpp
-
649: case Tango::DEV_SHORT: -
1038: case Tango::DEV_SHORT: -
1754: case Tango::DEV_SHORT: -
2021: case Tango::DEV_SHORT: -
2308: case Tango::DEV_SHORT: -
2569: case Tango::DEV_SHORT: -
2865: case Tango::DEV_SHORT: -
3251: case Tango::DEV_SHORT : -
5043: case Tango::DEV_SHORT: -
5556: case DEV_SHORT: -
5610: case DEV_SHORT: -
5666: case DEV_SHORT: -
6006: case Tango::DEV_SHORT :
-
-
client/helpers/DeviceProxyHelper.h
-
877: case Tango::DEV_SHORT:
-