@@ -548,7 +548,47 @@ class ps_ptr {
548548 if (!myStr || !other) return false ;
549549 return strcmp (myStr, other) == 0 ;
550550 }
551+ // —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
552+ // 📌📌📌 A S S I G N F 📌📌📌
553+
554+ // ps_ptr<char> message;
555+ // message.assignf("Code %d, Modul %s", 404, "Network");
556+ // printf("%s\n", message.get()); // → Error: Code 404, Modul Network
557+
558+ // onli activate if T = char
559+ template <typename U = T>
560+ requires std::is_same_v<U, char >
561+ void assignf (const char * fmt, ...) {
562+ if (!fmt) return ;
563+
564+ // Formatierte Länge berechnen
565+ va_list args;
566+ va_start (args, fmt);
567+ va_list args_copy;
568+ va_copy (args_copy, args);
569+ int fmt_len = vsnprintf (nullptr , 0 , fmt, args_copy);
570+ va_end (args_copy);
551571
572+ if (fmt_len < 0 ) {
573+ va_end (args);
574+ return ;
575+ }
576+
577+ std::size_t new_len = static_cast <std::size_t >(fmt_len) + 1 ;
578+
579+ // share previous memory and new allocates
580+ reset ();
581+ alloc (new_len);
582+ if (!mem) {
583+ printf (" OOM: assignf() failed for %zu bytes\n " , new_len);
584+ va_end (args);
585+ return ;
586+ }
587+
588+ // write formatted text
589+ vsnprintf (static_cast <char *>(mem.get ()), new_len, fmt, args);
590+ va_end (args);
591+ }
552592// —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
553593 // 📌📌📌 A P P E N D F 📌📌📌
554594
0 commit comments