@@ -471,8 +471,7 @@ std::string DeckManager::MakeYdkEntryString(uint32_t code) {
471471 return epro::format (" # {}\n {}\n " , BufferIO::EncodeUTF8 (gDataManager ->GetName (code)), code);
472472 return epro::to_string (code) + " \n " ;
473473}
474- const wchar_t * DeckManager::ExportDeckBase64 (const Deck& deck) {
475- static std::wstring res;
474+ std::wstring DeckManager::ExportDeckYdke (const Deck& deck) {
476475 auto decktobuf = [](const auto & src) {
477476 static cardlist_type cards;
478477 cards.resize (src.size ());
@@ -481,16 +480,14 @@ const wchar_t* DeckManager::ExportDeckBase64(const Deck& deck) {
481480 }
482481 return base64_encode ((uint8_t *)cards.data (), cards.size () * sizeof (cardlist_type::value_type));
483482 };
484- res = epro::format (L" ydke://{}!{}!{}!" , decktobuf (deck.main ), decktobuf (deck.extra ), decktobuf (deck.side ));
485- return res.data ();
483+ return epro::format (L" ydke://{}!{}!{}!" , decktobuf (deck.main ), decktobuf (deck.extra ), decktobuf (deck.side ));
486484}
487- const wchar_t * DeckManager::ExportDeckCardNames (Deck deck) {
488- static std::wstring res;
489- res.clear ();
485+ std::wstring DeckManager::ExportDeckCardNames (Deck deck) {
486+ std::wstring res;
490487 std::sort (deck.main .begin (), deck.main .end (), DataManager::deck_sort_lv);
491488 std::sort (deck.extra .begin (), deck.extra .end (), DataManager::deck_sort_lv);
492489 std::sort (deck.side .begin (), deck.side .end (), DataManager::deck_sort_lv);
493- auto serialize = [](const auto & list) {
490+ auto serialize = [& ](const auto & list) {
494491 uint32_t prev = 0 ;
495492 uint32_t count = 0 ;
496493 for (const auto & card : list) {
@@ -531,14 +528,14 @@ const wchar_t* DeckManager::ExportDeckCardNames(Deck deck) {
531528 res.append (L" Side Deck:\n " );
532529 serialize (deck.side );
533530 }
534- return res. data () ;
531+ return res;
535532}
536533static cardlist_type BufferToCardlist (const std::vector<uint8_t >& input) {
537534 cardlist_type vect (input.size () / sizeof (uint32_t ));
538535 memcpy (vect.data (), input.data (), vect.size () * sizeof (uint32_t ));
539536 return vect;
540537}
541- void DeckManager::ImportDeckBase64 (Deck& deck, const wchar_t * buffer) {
538+ void DeckManager::ImportDeckYdke (Deck& deck, epro::wstringview buffer) {
542539 buffer += L" ydke://" sv.size ();
543540 size_t delimiters[3 ];
544541 int delim = 0 ;
@@ -549,9 +546,9 @@ void DeckManager::ImportDeckBase64(Deck& deck, const wchar_t* buffer) {
549546 }
550547 if (delim != 3 )
551548 return ;
552- const auto mainlist = BufferToCardlist (base64_decode (buffer, delimiters[0 ]));
553- const auto extralist = BufferToCardlist (base64_decode (buffer + delimiters[0 ] + 1 , delimiters[1 ] - delimiters[0 ]));
554- const auto sidelist = BufferToCardlist (base64_decode (buffer + delimiters[1 ] + 1 , delimiters[2 ] - delimiters[1 ]));
549+ const auto mainlist = BufferToCardlist (base64_decode (buffer. substr ( 0 , delimiters[0 ]) ));
550+ const auto extralist = BufferToCardlist (base64_decode (buffer. substr ( delimiters[0 ] + 1 , delimiters[1 ] - delimiters[0 ]) ));
551+ const auto sidelist = BufferToCardlist (base64_decode (buffer. substr ( delimiters[1 ] + 1 , delimiters[2 ] - delimiters[1 ]) ));
555552 LoadDeck (deck, mainlist, sidelist, &extralist);
556553}
557554template <size_t N>
0 commit comments