add string_compose argument specializations so that empty std::string and empty C...
[ardour.git] / libs / ardour / utils.cc
index d4b0a778932346672d50674b2293f35f45bacdff..c66b34a2bab3b08e9819867cca949585864554d8 100644 (file)
@@ -196,6 +196,32 @@ ARDOUR::bump_name_once (const std::string& name, char delimiter)
 
 }
 
+string
+ARDOUR::bump_name_number (const std::string& name)
+{
+       size_t pos = name.length();
+       size_t num = 0;
+       bool have_number = false;
+       while (pos > 0 && isdigit(name.at(--pos))) {
+               have_number = true;
+               num = pos;
+       }
+
+       string newname;
+       if (have_number) {
+               int32_t seq = strtol (name.c_str() + num, (char **)NULL, 10);
+               char buf[32];
+               snprintf (buf, sizeof(buf), "%d", seq + 1);
+               newname = name.substr (0, num);
+               newname += buf;
+       } else {
+               newname = name;
+               newname += "1";
+       }
+
+       return newname;
+}
+
 XMLNode *
 ARDOUR::find_named_node (const XMLNode& node, string name)
 {
@@ -270,17 +296,6 @@ ARDOUR::cmp_nocase_utf8 (const string& s1, const string& s2)
        return retval;
 }
 
-int
-ARDOUR::touch_file (string path)
-{
-       int fd = open (path.c_str(), O_RDWR|O_CREAT, 0660);
-       if (fd >= 0) {
-               close (fd);
-               return 0;
-       }
-       return 1;
-}
-
 string
 ARDOUR::region_name_from_path (string path, bool strip_channels, bool add_channel_suffix, uint32_t total, uint32_t this_one)
 {
@@ -397,11 +412,13 @@ ARDOUR::string_to_edit_mode (string str)
                return Splice;
        } else if (str == _("Slide")) {
                return Slide;
+       } else if (str == _("Ripple")) {
+               return Ripple;
        } else if (str == _("Lock")) {
                return Lock;
        }
        fatal << string_compose (_("programming error: unknown edit mode string \"%1\""), str) << endmsg;
-       /*NOTREACHED*/
+       abort(); /*NOTREACHED*/
        return Slide;
 }
 
@@ -415,6 +432,9 @@ ARDOUR::edit_mode_to_string (EditMode mode)
        case Lock:
                return _("Lock");
 
+       case Ripple:
+               return _("Ripple");
+
        default:
        case Splice:
                return _("Splice");
@@ -436,8 +456,12 @@ ARDOUR::string_to_sync_source (string str)
                return Engine;
        }
 
+       if (str == _("LTC")) {
+               return LTC;
+       }
+
        fatal << string_compose (_("programming error: unknown sync source string \"%1\""), str) << endmsg;
-       /*NOTREACHED*/
+       abort(); /*NOTREACHED*/
        return Engine;
 }
 
@@ -490,11 +514,8 @@ ARDOUR::meter_falloff_to_float (MeterFalloff falloff)
        case MeterFalloffModerate:
                return METER_FALLOFF_MODERATE;
        case MeterFalloffFast:
-               return METER_FALLOFF_FAST;
-       case MeterFalloffFaster:
-               return METER_FALLOFF_FASTER;
+       case MeterFalloffFaster:  // backwards compat enum MeterFalloff
        case MeterFalloffFastest:
-               return METER_FALLOFF_FASTEST;
        default:
                return METER_FALLOFF_FAST;
        }
@@ -521,14 +542,8 @@ ARDOUR::meter_falloff_from_float (float val)
        else if (val <= METER_FALLOFF_MEDIUM) {
                return MeterFalloffMedium;
        }
-       else if (val <= METER_FALLOFF_FAST) {
-               return MeterFalloffFast;
-       }
-       else if (val <= METER_FALLOFF_FASTER) {
-               return MeterFalloffFaster;
-       }
        else {
-               return MeterFalloffFastest;
+               return MeterFalloffFast;
        }
 }
 
@@ -546,7 +561,7 @@ ARDOUR::string_to_auto_state (std::string str)
        }
 
        fatal << string_compose (_("programming error: %1 %2"), "illegal AutoState string: ", str) << endmsg;
-       /*NOTREACHED*/
+       abort(); /*NOTREACHED*/
        return Touch;
 }
 
@@ -570,7 +585,7 @@ ARDOUR::auto_state_to_string (AutoState as)
        }
 
        fatal << string_compose (_("programming error: %1 %2"), "illegal AutoState type: ", as) << endmsg;
-       /*NOTREACHED*/
+       abort(); /*NOTREACHED*/
        return "";
 }
 
@@ -584,7 +599,7 @@ ARDOUR::string_to_auto_style (std::string str)
        }
 
        fatal << string_compose (_("programming error: %1 %2"), "illegal AutoStyle string: ", str) << endmsg;
-       /*NOTREACHED*/
+       abort(); /*NOTREACHED*/
        return Trim;
 }
 
@@ -603,7 +618,7 @@ ARDOUR::auto_style_to_string (AutoStyle as)
        }
 
        fatal << string_compose (_("programming error: %1 %2"), "illegal AutoStyle type: ", as) << endmsg;
-       /*NOTREACHED*/
+       abort(); /*NOTREACHED*/
        return "";
 }
 
@@ -634,11 +649,13 @@ ARDOUR::native_header_format_extension (HeaderFormat hf, const DataType& type)
         case iXML:
                 return ".ixml";
         case RF64:
+        case RF64_WAV:
+        case MBWF:
                 return ".rf64";
         }
 
         fatal << string_compose (_("programming error: unknown native header format: %1"), hf);
-        /*NOTREACHED*/
+        abort(); /*NOTREACHED*/
         return ".wav";
 }