MCPcopy Create free account
hub / github.com/anjo76/angelscript / StringScan

Function StringScan

sdk/add_on/scriptstdstring/scriptstdstring.cpp:741–801  ·  view source on GitHub ↗

TODO: variadic: review

Source from the content-addressed store, hash-verified

739
740// TODO: variadic: review
741static void StringScan(asIScriptGeneric* gen)
742{
743 asIScriptEngine* engine = gen->GetEngine();
744
745 stringstream ss(*(string*)gen->GetArgObject(0));
746 asUINT scanned = 0;
747
748 for (asUINT i = 1; i < (asUINT)gen->GetArgCount(); ++i)
749 {
750 int typeId = gen->GetArgTypeId(i);
751 if (!(typeId & ~asTYPEID_MASK_SEQNBR))
752 {
753#define AS_STRING_SCAN_IMPL(tid, type) \
754 case tid:\
755 do {\
756 type val;\
757 ss >> val;\
758 if(!ss) goto end_scan;\
759 void* ref = gen->GetArgAddress(i); \
760 *(type*)ref = val;\
761 } while(0); \
762 break
763
764 switch (typeId)
765 {
766 AS_STRING_SCAN_IMPL(asTYPEID_BOOL, bool);
767
768 AS_STRING_SCAN_IMPL(asTYPEID_INT16, int16_t);
769 default: // enum
770 AS_STRING_SCAN_IMPL(asTYPEID_INT32, int32_t);
771 AS_STRING_SCAN_IMPL(asTYPEID_INT64, int64_t);
772
773 AS_STRING_SCAN_IMPL(asTYPEID_UINT8, uint8_t);
774 AS_STRING_SCAN_IMPL(asTYPEID_UINT16, uint16_t);
775 AS_STRING_SCAN_IMPL(asTYPEID_UINT32, uint32_t);
776 AS_STRING_SCAN_IMPL(asTYPEID_UINT64, uint64_t);
777
778 AS_STRING_SCAN_IMPL(asTYPEID_FLOAT, float);
779 AS_STRING_SCAN_IMPL(asTYPEID_DOUBLE, double);
780 }
781 }
782 else if (typeId == engine->GetStringFactory())
783 {
784 string val;
785 ss >> val;
786 if (!ss) goto end_scan;
787
788 void* ref = gen->GetArgAddress(i);
789 *(string*)ref = std::move(val);
790 }
791 else // Invalid type
792 {
793 goto end_scan;
794 }
795
796 ++scanned;
797 }
798

Callers

nothing calls this directly

Calls 7

GetArgObjectMethod · 0.80
GetArgCountMethod · 0.80
GetArgTypeIdMethod · 0.80
GetStringFactoryMethod · 0.80
GetArgAddressMethod · 0.80
SetReturnDWordMethod · 0.80
GetEngineMethod · 0.45

Tested by

no test coverage detected