Cleanup: use const for units API
authorCampbell Barton <ideasman42@gmail.com>
Tue, 3 May 2016 03:52:07 +0000 (13:52 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 3 May 2016 03:52:07 +0000 (13:52 +1000)
Also make return args explicit.

source/blender/blenkernel/BKE_unit.h
source/blender/blenkernel/intern/unit.c
source/blender/editors/space_view3d/view3d_draw.c

index b351bc6fe3e28da8aaba26ba50affe19144ad7c2..278b303a315ebdee1ca75a46ef7a9efc20a9d7ad 100644 (file)
@@ -54,11 +54,11 @@ bool bUnit_IsValid(int system, int type);
 /* loop over scales, coudl add names later */
 //double bUnit_Iter(void **unit, char **name, int system, int type);
 
-void        bUnit_GetSystem(void **usys_pt, int *len, int system, int type);
-int         bUnit_GetBaseUnit(void *usys_pt);
-const char *bUnit_GetName(void *usys_pt, int index);
-const char *bUnit_GetNameDisplay(void *usys_pt, int index);
-double      bUnit_GetScaler(void *usys_pt, int index);
+void        bUnit_GetSystem(int system, int type, void const **r_usys_pt, int *r_len);
+int         bUnit_GetBaseUnit(const void *usys_pt);
+const char *bUnit_GetName(const void *usys_pt, int index);
+const char *bUnit_GetNameDisplay(const void *usys_pt, int index);
+double      bUnit_GetScaler(const void *usys_pt, int index);
 
 /* aligned with PropertyUnit */
 enum {
index cf11fe2323d3d4c4cbba82e0bef9b9531c6eec91..c0a373395dcd01cc507365d0db4fb74c9dd7e95d 100644 (file)
@@ -102,7 +102,7 @@ typedef struct bUnitDef {
 
 /* define a single unit */
 typedef struct bUnitCollection {
-       struct bUnitDef *units;
+       const struct bUnitDef *units;
        int base_unit; /* basic unit index (when user doesn't specify unit explicitly) */
        int flag; /* options for this system */
        int length; /* to quickly find the last item */
@@ -113,7 +113,7 @@ static struct bUnitDef buDummyDef[] = { {"", NULL, "", NULL, NULL, 1.0, 0.0}, {N
 static struct bUnitCollection buDummyCollection = {buDummyDef, 0, 0, sizeof(buDummyDef)};
 
 /* Lengths */
-static struct bUnitDef buMetricLenDef[] = {
+static const struct bUnitDef buMetricLenDef[] = {
        {"kilometer", "kilometers",     "km",  NULL, "Kilometers", UN_SC_KM, 0.0,     B_UNIT_DEF_NONE},
        {"hectometer", "hectometers",   "hm",  NULL, "100 Meters", UN_SC_HM, 0.0,     B_UNIT_DEF_SUPPRESS},
        {"dekameter", "dekameters",     "dam", NULL, "10 Meters",  UN_SC_DAM, 0.0,    B_UNIT_DEF_SUPPRESS},
@@ -131,7 +131,7 @@ static struct bUnitDef buMetricLenDef[] = {
 #endif
        {NULL, NULL, NULL,      NULL, NULL, 0.0, 0.0}
 };
-static struct bUnitCollection buMetricLenCollection = {buMetricLenDef, 3, 0, sizeof(buMetricLenDef) / sizeof(bUnitDef)};
+static const struct bUnitCollection buMetricLenCollection = {buMetricLenDef, 3, 0, sizeof(buMetricLenDef) / sizeof(bUnitDef)};
 
 static struct bUnitDef buImperialLenDef[] = {
        {"mile", "miles",       "mi", "m", "Miles",      UN_SC_MI, 0.0,  B_UNIT_DEF_NONE},
@@ -289,7 +289,7 @@ static struct bUnitCollection buCameraLenCollection = {buCameraLenDef, 3, 0, siz
 
 
 #define UNIT_SYSTEM_TOT (((sizeof(bUnitSystems) / B_UNIT_TYPE_TOT) / sizeof(void *)) - 1)
-static struct bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = {
+static const struct bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = {
        {NULL, NULL, NULL, NULL, NULL, &buNaturalRotCollection, &buNaturalTimeCollection, NULL, NULL, NULL},
        {NULL, &buMetricLenCollection, &buMetricAreaCollection, &buMetricVolCollection, &buMetricMassCollection, &buNaturalRotCollection, &buNaturalTimeCollection, &buMetricVelCollection, &buMetricAclCollection, &buCameraLenCollection}, /* metric */
        {NULL, &buImperialLenCollection, &buImperialAreaCollection, &buImperialVolCollection, &buImperialMassCollection, &buNaturalRotCollection, &buNaturalTimeCollection, &buImperialVelCollection, &buImperialAclCollection, &buCameraLenCollection}, /* imperial */
@@ -299,20 +299,21 @@ static struct bUnitCollection *bUnitSystems[][B_UNIT_TYPE_TOT] = {
 
 
 /* internal, has some option not exposed */
-static bUnitCollection *unit_get_system(int system, int type)
+static const bUnitCollection *unit_get_system(int system, int type)
 {
        assert((system > -1) && (system < UNIT_SYSTEM_TOT) && (type > -1) && (type < B_UNIT_TYPE_TOT));
        return bUnitSystems[system][type]; /* select system to use, metric/imperial/other? */
 }
 
-static bUnitDef *unit_default(bUnitCollection *usys)
+static const bUnitDef *unit_default(const bUnitCollection *usys)
 {
        return &usys->units[usys->base_unit];
 }
 
-static bUnitDef *unit_best_fit(double value, bUnitCollection *usys, bUnitDef *unit_start, int suppress)
+static const bUnitDef *unit_best_fit(
+        double value, const bUnitCollection *usys, const bUnitDef *unit_start, int suppress)
 {
-       bUnitDef *unit;
+       const bUnitDef *unit;
        double value_abs = value > 0.0 ? value : -value;
 
        for (unit = unit_start ? unit_start : usys->units; unit->name; unit++) {
@@ -337,19 +338,21 @@ static bUnitDef *unit_best_fit(double value, bUnitCollection *usys, bUnitDef *un
 }
 
 /* convert into 2 units and 2 values for "2ft, 3inch" syntax */
-static void unit_dual_convert(double value, bUnitCollection *usys, bUnitDef **unit_a, bUnitDef **unit_b,
-                              double *value_a, double *value_b)
+static void unit_dual_convert(
+        double value, const bUnitCollection *usys,
+        bUnitDef const **r_unit_a, bUnitDef const **r_unit_b,
+        double *r_value_a, double *r_value_b)
 {
-       bUnitDef *unit = unit_best_fit(value, usys, NULL, 1);
+       const bUnitDef *unit = unit_best_fit(value, usys, NULL, 1);
 
-       *value_a = (value < 0.0 ? ceil : floor)(value / unit->scalar) * unit->scalar;
-       *value_b = value - (*value_a);
+       *r_value_a = (value < 0.0 ? ceil : floor)(value / unit->scalar) * unit->scalar;
+       *r_value_b = value - (*r_value_a);
 
-       *unit_a = unit;
-       *unit_b = unit_best_fit(*value_b, usys, *unit_a, 1);
+       *r_unit_a = unit;
+       *r_unit_b = unit_best_fit(*r_value_b, usys, *r_unit_a, 1);
 }
 
-static size_t unit_as_string(char *str, int len_max, double value, int prec, bUnitCollection *usys,
+static size_t unit_as_string(char *str, int len_max, double value, int prec, const bUnitCollection *usys,
                              /* non exposed options */
                              const bUnitDef *unit, char pad)
 {
@@ -422,14 +425,14 @@ static size_t unit_as_string(char *str, int len_max, double value, int prec, bUn
  */
 size_t bUnit_AsString(char *str, int len_max, double value, int prec, int system, int type, bool split, bool pad)
 {
-       bUnitCollection *usys = unit_get_system(system, type);
+       const bUnitCollection *usys = unit_get_system(system, type);
 
        if (usys == NULL || usys->units[0].name == NULL)
                usys = &buDummyCollection;
 
        /* split output makes sense only for length, mass and time */
        if (split && (type == B_UNIT_LENGTH || type == B_UNIT_MASS || type == B_UNIT_TIME || type == B_UNIT_CAMERA)) {
-               bUnitDef *unit_a, *unit_b;
+               const bUnitDef *unit_a, *unit_b;
                double value_a, value_b;
 
                unit_dual_convert(value, usys, &unit_a, &unit_b, &value_a, &value_b);
@@ -522,7 +525,7 @@ static bool ch_is_op(char op)
        }
 }
 
-static int unit_scale_str(char *str, int len_max, char *str_tmp, double scale_pref, bUnitDef *unit,
+static int unit_scale_str(char *str, int len_max, char *str_tmp, double scale_pref, const bUnitDef *unit,
                           const char *replace_str)
 {
        char *str_found;
@@ -571,7 +574,7 @@ static int unit_scale_str(char *str, int len_max, char *str_tmp, double scale_pr
        return 0;
 }
 
-static int unit_replace(char *str, int len_max, char *str_tmp, double scale_pref, bUnitDef *unit)
+static int unit_replace(char *str, int len_max, char *str_tmp, double scale_pref, const bUnitDef *unit)
 {
        int ofs = 0;
        ofs += unit_scale_str(str + ofs, len_max - ofs, str_tmp, scale_pref, unit, unit->name_short);
@@ -581,7 +584,7 @@ static int unit_replace(char *str, int len_max, char *str_tmp, double scale_pref
        return ofs;
 }
 
-static bool unit_find(const char *str, bUnitDef *unit)
+static bool unit_find(const char *str, const bUnitDef *unit)
 {
        if (unit_find_str(str, unit->name_short))   return true;
        if (unit_find_str(str, unit->name_plural))  return true;
@@ -591,12 +594,12 @@ static bool unit_find(const char *str, bUnitDef *unit)
        return false;
 }
 
-static bUnitDef *unit_detect_from_str(bUnitCollection *usys, const char *str, const char *str_prev)
+static const bUnitDef *unit_detect_from_str(const bUnitCollection *usys, const char *str, const char *str_prev)
 {
        /* Try to find a default unit from current or previous string.
         * This allows us to handle cases like 2 + 2mm, people would expect to get 4mm, not 2.002m!
         * Note this does not handle corner cases like 2 + 2cm + 1 + 2.5mm... We can't support everything. */
-       bUnitDef *unit = NULL;
+       const bUnitDef *unit = NULL;
 
        /* see which units the new value has */
        for (unit = usys->units; unit->name; unit++) {
@@ -636,9 +639,9 @@ static bUnitDef *unit_detect_from_str(bUnitCollection *usys, const char *str, co
  */
 bool bUnit_ReplaceString(char *str, int len_max, const char *str_prev, double scale_pref, int system, int type)
 {
-       bUnitCollection *usys = unit_get_system(system, type);
+       const bUnitCollection *usys = unit_get_system(system, type);
 
-       bUnitDef *unit = NULL, *default_unit;
+       const bUnitDef *unit = NULL, *default_unit;
        double scale_pref_base = scale_pref;
        char str_tmp[TEMP_STR_SIZE];
        bool changed = false;
@@ -679,7 +682,7 @@ bool bUnit_ReplaceString(char *str, int len_max, const char *str_prev, double sc
                 * In other words, when in metrics, typing '2+2in' will give 2 meters 2 inches, not 4 inches.
                 * I do think this is the desired behavior!
                 */
-               bUnitCollection *usys_iter;
+               const bUnitCollection *usys_iter;
                int system_iter;
 
                for (system_iter = 0; system_iter < UNIT_SYSTEM_TOT; system_iter++) {
@@ -730,9 +733,9 @@ bool bUnit_ReplaceString(char *str, int len_max, const char *str_prev, double sc
 /* 45┬Ám --> 45um */
 void bUnit_ToUnitAltName(char *str, int len_max, const char *orig_str, int system, int type)
 {
-       bUnitCollection *usys = unit_get_system(system, type);
+       const bUnitCollection *usys = unit_get_system(system, type);
 
-       bUnitDef *unit;
+       const bUnitDef *unit;
 
        /* find and substitute all units */
        for (unit = usys->units; unit->name; unit++) {
@@ -769,8 +772,8 @@ void bUnit_ToUnitAltName(char *str, int len_max, const char *orig_str, int syste
 
 double bUnit_ClosestScalar(double value, int system, int type)
 {
-       bUnitCollection *usys = unit_get_system(system, type);
-       bUnitDef *unit;
+       const bUnitCollection *usys = unit_get_system(system, type);
+       const bUnitDef *unit;
 
        if (usys == NULL)
                return -1;
@@ -784,7 +787,7 @@ double bUnit_ClosestScalar(double value, int system, int type)
 
 double bUnit_BaseScalar(int system, int type)
 {
-       bUnitCollection *usys = unit_get_system(system, type);
+       const bUnitCollection *usys = unit_get_system(system, type);
        return unit_default(usys)->scalar;
 }
 
@@ -794,34 +797,34 @@ bool bUnit_IsValid(int system, int type)
        return !(system < 0 || system > UNIT_SYSTEM_TOT || type < 0 || type > B_UNIT_TYPE_TOT);
 }
 
-void bUnit_GetSystem(void **usys_pt, int *len, int system, int type)
+void bUnit_GetSystem(int system, int type, void const **r_usys_pt, int *r_len)
 {
-       bUnitCollection *usys = unit_get_system(system, type);
-       *usys_pt = usys;
+       const bUnitCollection *usys = unit_get_system(system, type);
+       *r_usys_pt = usys;
 
        if (usys == NULL) {
-               *len = 0;
+               *r_len = 0;
                return;
        }
 
-       *len = usys->length;
+       *r_len = usys->length;
 }
 
-int bUnit_GetBaseUnit(void *usys_pt)
+int bUnit_GetBaseUnit(const void *usys_pt)
 {
        return ((bUnitCollection *)usys_pt)->base_unit;
 }
 
-const char *bUnit_GetName(void *usys_pt, int index)
+const char *bUnit_GetName(const void *usys_pt, int index)
 {
        return ((bUnitCollection *)usys_pt)->units[index].name;
 }
-const char *bUnit_GetNameDisplay(void *usys_pt, int index)
+const char *bUnit_GetNameDisplay(const void *usys_pt, int index)
 {
        return ((bUnitCollection *)usys_pt)->units[index].name_display;
 }
 
-double bUnit_GetScaler(void *usys_pt, int index)
+double bUnit_GetScaler(const void *usys_pt, int index)
 {
        return ((bUnitCollection *)usys_pt)->units[index].scalar;
 }
index 7f1a7a059fc1250a21b33bae506ddffaf9641605..3972fa276808d3e1c413997bbb390efb38f7a598 100644 (file)
@@ -315,12 +315,12 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **
        if (unit->system) {
                /* Use GRID_MIN_PX * 2 for units because very very small grid
                 * items are less useful when dealing with units */
-               void *usys;
+               const void *usys;
                int len, i;
                double dx_scalar;
                float blend_fac;
 
-               bUnit_GetSystem(&usys, &len, unit->system, B_UNIT_LENGTH);
+               bUnit_GetSystem(unit->system, B_UNIT_LENGTH, &usys, &len);
 
                if (usys) {
                        i = len;
@@ -455,10 +455,10 @@ float ED_scene_grid_scale(Scene *scene, const char **grid_unit)
 {
        /* apply units */
        if (scene->unit.system) {
-               void *usys;
+               const void *usys;
                int len;
 
-               bUnit_GetSystem(&usys, &len, scene->unit.system, B_UNIT_LENGTH);
+               bUnit_GetSystem(scene->unit.system, B_UNIT_LENGTH, &usys, &len);
 
                if (usys) {
                        int i = bUnit_GetBaseUnit(usys);