mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-26 12:05:36 +01:00
XStringArray re-implementation with template.
This commit is contained in:
parent
3475414580
commit
7d43ca70d5
@ -123,20 +123,15 @@
|
||||
9A637AE92430D928000B9474 /* XTheme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5E3262F2428F4EE002240E8 /* XTheme.cpp */; };
|
||||
9A637AEA2430D928000B9474 /* XTheme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5E3262F2428F4EE002240E8 /* XTheme.cpp */; };
|
||||
9A9AEB94243F7B5600FBD7D8 /* unicode_conversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */; };
|
||||
9A9AEB95243F7B5600FBD7D8 /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */; };
|
||||
9A9AEB96243F7B5600FBD7D8 /* XStringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A9AEB92243F7B5600FBD7D8 /* XStringArray.h */; };
|
||||
9A9AEB97243F7B5600FBD7D8 /* unicode_conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A9AEB93243F7B5600FBD7D8 /* unicode_conversions.h */; };
|
||||
9A9AEB99243F7B7A00FBD7D8 /* printf_lite-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A9AEB98243F7B7900FBD7D8 /* printf_lite-test.h */; };
|
||||
9A9AEB9A243F7B8400FBD7D8 /* unicode_conversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */; };
|
||||
9A9AEB9B243F7B8400FBD7D8 /* unicode_conversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */; };
|
||||
9A9AEB9C243F7B8400FBD7D8 /* unicode_conversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */; };
|
||||
9A9AEB9D243F7B9000FBD7D8 /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */; };
|
||||
9A9AEB9E243F7B9100FBD7D8 /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */; };
|
||||
9A9AEB9F243F7B9200FBD7D8 /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */; };
|
||||
9A9D3B2324221563006D8CD9 /* printf_lite-test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A9D3B2124221563006D8CD9 /* printf_lite-test.cpp */; };
|
||||
9AC77FB924176C04005CDD5C /* XStringWArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringWArray_test.h */; };
|
||||
9AC77FB924176C04005CDD5C /* XStringArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringArray_test.h */; };
|
||||
9AC77FBA24176C04005CDD5C /* XArray_tests.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECD24176C04005CDD5C /* XArray_tests.h */; };
|
||||
9AC77FBB24176C04005CDD5C /* XStringWArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringWArray_test.cpp */; };
|
||||
9AC77FBB24176C04005CDD5C /* XStringArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringArray_test.cpp */; };
|
||||
9AC77FC024176C04005CDD5C /* XObjArray_tests.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ED324176C04005CDD5C /* XObjArray_tests.h */; };
|
||||
9AC77FC124176C04005CDD5C /* all_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ED424176C04005CDD5C /* all_tests.cpp */; };
|
||||
9AC77FC224176C04005CDD5C /* XObjArray_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ED524176C04005CDD5C /* XObjArray_tests.cpp */; };
|
||||
@ -281,8 +276,8 @@
|
||||
9AC7808A24176C04005CDD5C /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FA824176C04005CDD5C /* memory.h */; };
|
||||
9AC7808B24176C04005CDD5C /* abort.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FA924176C04005CDD5C /* abort.h */; };
|
||||
9AC7808C24176C04005CDD5C /* remove_ref.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAA24176C04005CDD5C /* remove_ref.h */; };
|
||||
9AC7808D24176C04005CDD5C /* XStringWArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringWArray.h */; };
|
||||
9AC7809024176C04005CDD5C /* XStringWArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */; };
|
||||
9AC7808D24176C04005CDD5C /* XStringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringArray.h */; };
|
||||
9AC7809024176C04005CDD5C /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringArray.cpp */; };
|
||||
9AC7809724176C04005CDD5C /* XArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FB624176C04005CDD5C /* XArray.h */; };
|
||||
9AC7809824176C04005CDD5C /* XObjArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FB724176C04005CDD5C /* XObjArray.h */; };
|
||||
9AC7809A24178F02005CDD5C /* menu_items.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC7809924178F02005CDD5C /* menu_items.cpp */; };
|
||||
@ -295,7 +290,7 @@
|
||||
9ACFE65324309AF80071CC93 /* nvidia.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3324176C04005CDD5C /* nvidia.h */; };
|
||||
9ACFE65424309AF80071CC93 /* operatorNewDelete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FA324176C04005CDD5C /* operatorNewDelete.h */; };
|
||||
9ACFE65524309AF80071CC93 /* BasicIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF4173E242F15CC00D2644C /* BasicIO.h */; };
|
||||
9ACFE65724309AF80071CC93 /* XStringWArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringWArray_test.h */; };
|
||||
9ACFE65724309AF80071CC93 /* XStringArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringArray_test.h */; };
|
||||
9ACFE65824309AF80071CC93 /* syslinux_mbr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F1424176C04005CDD5C /* syslinux_mbr.h */; };
|
||||
9ACFE65924309AF80071CC93 /* lodepng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F6024176C04005CDD5C /* lodepng.h */; };
|
||||
9ACFE65A24309AF80071CC93 /* loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F8224176C04005CDD5C /* loader.h */; };
|
||||
@ -309,7 +304,7 @@
|
||||
9ACFE66924309AF80071CC93 /* XObjArray_tests.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ED324176C04005CDD5C /* XObjArray_tests.h */; };
|
||||
9ACFE66A24309AF80071CC93 /* Events.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3424176C04005CDD5C /* Events.h */; };
|
||||
9ACFE66B24309AF80071CC93 /* printlib-test-cpp_conf.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF4155F242BABC700D2644C /* printlib-test-cpp_conf.h */; };
|
||||
9ACFE66C24309AF80071CC93 /* XStringWArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringWArray.h */; };
|
||||
9ACFE66C24309AF80071CC93 /* XStringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringArray.h */; };
|
||||
9ACFE66E24309AF80071CC93 /* strcmp_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A28CD2D241BC0DF00F3D247 /* strcmp_test.h */; };
|
||||
9ACFE66F24309AF80071CC93 /* boot.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3824176C04005CDD5C /* boot.h */; };
|
||||
9ACFE67024309AF80071CC93 /* ati.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F4624176C04005CDD5C /* ati.h */; };
|
||||
@ -376,7 +371,7 @@
|
||||
9ACFE6B824309AF80071CC93 /* hda.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F3F24176C04005CDD5C /* hda.cpp */; };
|
||||
9ACFE6B924309AF80071CC93 /* egemb_icons_dark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F5E24176C04005CDD5C /* egemb_icons_dark.cpp */; };
|
||||
9ACFE6BA24309AF80071CC93 /* scroll_images.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F6924176C04005CDD5C /* scroll_images.cpp */; };
|
||||
9ACFE6BB24309AF80071CC93 /* XStringWArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */; };
|
||||
9ACFE6BB24309AF80071CC93 /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringArray.cpp */; };
|
||||
9ACFE6BC24309AF80071CC93 /* PlatformDriverOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F2724176C04005CDD5C /* PlatformDriverOverride.cpp */; };
|
||||
9ACFE6BD24309AF80071CC93 /* HdaCodecDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F1924176C04005CDD5C /* HdaCodecDump.cpp */; };
|
||||
9ACFE6BE24309AF80071CC93 /* Nvram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F3124176C04005CDD5C /* Nvram.cpp */; };
|
||||
@ -443,7 +438,7 @@
|
||||
9ACFE70624309AF80071CC93 /* icns.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F9324176C04005CDD5C /* icns.cpp */; };
|
||||
9ACFE70724309AF80071CC93 /* strcmp_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CD2C241BC0DF00F3D247 /* strcmp_test.cpp */; };
|
||||
9ACFE70824309AF80071CC93 /* nanosvgrast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F6E24176C04005CDD5C /* nanosvgrast.cpp */; };
|
||||
9ACFE70924309AF80071CC93 /* XStringWArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringWArray_test.cpp */; };
|
||||
9ACFE70924309AF80071CC93 /* XStringArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringArray_test.cpp */; };
|
||||
9ACFE70A24309AF80071CC93 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F9E24176C04005CDD5C /* main.cpp */; };
|
||||
9ACFE70B24309AF80071CC93 /* nvidia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F5024176C04005CDD5C /* nvidia.cpp */; };
|
||||
9ACFE70C24309AF80071CC93 /* XString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CC91241AB33700F3D247 /* XString.cpp */; };
|
||||
@ -484,7 +479,7 @@
|
||||
9AF41587242CD75C00D2644C /* XTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E326302428F4EE002240E8 /* XTheme.h */; };
|
||||
9AF41589242CD75C00D2644C /* nvidia.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3324176C04005CDD5C /* nvidia.h */; };
|
||||
9AF4158A242CD75C00D2644C /* operatorNewDelete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FA324176C04005CDD5C /* operatorNewDelete.h */; };
|
||||
9AF4158C242CD75C00D2644C /* XStringWArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringWArray_test.h */; };
|
||||
9AF4158C242CD75C00D2644C /* XStringArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringArray_test.h */; };
|
||||
9AF4158D242CD75C00D2644C /* syslinux_mbr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F1424176C04005CDD5C /* syslinux_mbr.h */; };
|
||||
9AF4158F242CD75C00D2644C /* lodepng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F6024176C04005CDD5C /* lodepng.h */; };
|
||||
9AF41590242CD75C00D2644C /* loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F8224176C04005CDD5C /* loader.h */; };
|
||||
@ -497,7 +492,7 @@
|
||||
9AF4159E242CD75C00D2644C /* XObjArray_tests.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ED324176C04005CDD5C /* XObjArray_tests.h */; };
|
||||
9AF4159F242CD75C00D2644C /* Events.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3424176C04005CDD5C /* Events.h */; };
|
||||
9AF415A0242CD75C00D2644C /* printlib-test-cpp_conf.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF4155F242BABC700D2644C /* printlib-test-cpp_conf.h */; };
|
||||
9AF415A1242CD75C00D2644C /* XStringWArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringWArray.h */; };
|
||||
9AF415A1242CD75C00D2644C /* XStringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringArray.h */; };
|
||||
9AF415A3242CD75C00D2644C /* strcmp_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A28CD2D241BC0DF00F3D247 /* strcmp_test.h */; };
|
||||
9AF415A4242CD75C00D2644C /* boot.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3824176C04005CDD5C /* boot.h */; };
|
||||
9AF415A5242CD75C00D2644C /* ati.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F4624176C04005CDD5C /* ati.h */; };
|
||||
@ -564,7 +559,7 @@
|
||||
9AF415EE242CD75C00D2644C /* hda.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F3F24176C04005CDD5C /* hda.cpp */; };
|
||||
9AF415EF242CD75C00D2644C /* egemb_icons_dark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F5E24176C04005CDD5C /* egemb_icons_dark.cpp */; };
|
||||
9AF415F0242CD75C00D2644C /* scroll_images.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F6924176C04005CDD5C /* scroll_images.cpp */; };
|
||||
9AF415F1242CD75C00D2644C /* XStringWArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */; };
|
||||
9AF415F1242CD75C00D2644C /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringArray.cpp */; };
|
||||
9AF415F2242CD75C00D2644C /* PlatformDriverOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F2724176C04005CDD5C /* PlatformDriverOverride.cpp */; };
|
||||
9AF415F3242CD75C00D2644C /* HdaCodecDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F1924176C04005CDD5C /* HdaCodecDump.cpp */; };
|
||||
9AF415F4242CD75C00D2644C /* Nvram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F3124176C04005CDD5C /* Nvram.cpp */; };
|
||||
@ -629,7 +624,7 @@
|
||||
9AF4163C242CD75C00D2644C /* icns.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F9324176C04005CDD5C /* icns.cpp */; };
|
||||
9AF4163D242CD75C00D2644C /* strcmp_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CD2C241BC0DF00F3D247 /* strcmp_test.cpp */; };
|
||||
9AF4163E242CD75C00D2644C /* nanosvgrast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F6E24176C04005CDD5C /* nanosvgrast.cpp */; };
|
||||
9AF4163F242CD75C00D2644C /* XStringWArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringWArray_test.cpp */; };
|
||||
9AF4163F242CD75C00D2644C /* XStringArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringArray_test.cpp */; };
|
||||
9AF41640242CD75C00D2644C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F9E24176C04005CDD5C /* main.cpp */; };
|
||||
9AF41641242CD75C00D2644C /* nvidia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F5024176C04005CDD5C /* nvidia.cpp */; };
|
||||
9AF41642242CD75C00D2644C /* XString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CC91241AB33700F3D247 /* XString.cpp */; };
|
||||
@ -656,7 +651,7 @@
|
||||
9AF41664242CDA5800D2644C /* XTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E326302428F4EE002240E8 /* XTheme.h */; };
|
||||
9AF41666242CDA5800D2644C /* nvidia.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3324176C04005CDD5C /* nvidia.h */; };
|
||||
9AF41667242CDA5800D2644C /* operatorNewDelete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FA324176C04005CDD5C /* operatorNewDelete.h */; };
|
||||
9AF41669242CDA5800D2644C /* XStringWArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringWArray_test.h */; };
|
||||
9AF41669242CDA5800D2644C /* XStringArray_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ECC24176C04005CDD5C /* XStringArray_test.h */; };
|
||||
9AF4166A242CDA5800D2644C /* syslinux_mbr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F1424176C04005CDD5C /* syslinux_mbr.h */; };
|
||||
9AF4166C242CDA5800D2644C /* lodepng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F6024176C04005CDD5C /* lodepng.h */; };
|
||||
9AF4166D242CDA5800D2644C /* loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F8224176C04005CDD5C /* loader.h */; };
|
||||
@ -669,7 +664,7 @@
|
||||
9AF4167B242CDA5800D2644C /* XObjArray_tests.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77ED324176C04005CDD5C /* XObjArray_tests.h */; };
|
||||
9AF4167C242CDA5800D2644C /* Events.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3424176C04005CDD5C /* Events.h */; };
|
||||
9AF4167D242CDA5800D2644C /* printlib-test-cpp_conf.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF4155F242BABC700D2644C /* printlib-test-cpp_conf.h */; };
|
||||
9AF4167E242CDA5800D2644C /* XStringWArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringWArray.h */; };
|
||||
9AF4167E242CDA5800D2644C /* XStringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77FAC24176C04005CDD5C /* XStringArray.h */; };
|
||||
9AF41680242CDA5800D2644C /* strcmp_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A28CD2D241BC0DF00F3D247 /* strcmp_test.h */; };
|
||||
9AF41681242CDA5800D2644C /* boot.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F3824176C04005CDD5C /* boot.h */; };
|
||||
9AF41682242CDA5800D2644C /* ati.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC77F4624176C04005CDD5C /* ati.h */; };
|
||||
@ -736,7 +731,7 @@
|
||||
9AF416CB242CDA5800D2644C /* hda.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F3F24176C04005CDD5C /* hda.cpp */; };
|
||||
9AF416CC242CDA5800D2644C /* egemb_icons_dark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F5E24176C04005CDD5C /* egemb_icons_dark.cpp */; };
|
||||
9AF416CD242CDA5800D2644C /* scroll_images.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F6924176C04005CDD5C /* scroll_images.cpp */; };
|
||||
9AF416CE242CDA5800D2644C /* XStringWArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */; };
|
||||
9AF416CE242CDA5800D2644C /* XStringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77FAF24176C04005CDD5C /* XStringArray.cpp */; };
|
||||
9AF416CF242CDA5800D2644C /* PlatformDriverOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F2724176C04005CDD5C /* PlatformDriverOverride.cpp */; };
|
||||
9AF416D0242CDA5800D2644C /* HdaCodecDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F1924176C04005CDD5C /* HdaCodecDump.cpp */; };
|
||||
9AF416D1242CDA5800D2644C /* Nvram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F3124176C04005CDD5C /* Nvram.cpp */; };
|
||||
@ -801,7 +796,7 @@
|
||||
9AF41719242CDA5800D2644C /* icns.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F9324176C04005CDD5C /* icns.cpp */; };
|
||||
9AF4171A242CDA5800D2644C /* strcmp_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CD2C241BC0DF00F3D247 /* strcmp_test.cpp */; };
|
||||
9AF4171B242CDA5800D2644C /* nanosvgrast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F6E24176C04005CDD5C /* nanosvgrast.cpp */; };
|
||||
9AF4171C242CDA5800D2644C /* XStringWArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringWArray_test.cpp */; };
|
||||
9AF4171C242CDA5800D2644C /* XStringArray_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77ECE24176C04005CDD5C /* XStringArray_test.cpp */; };
|
||||
9AF4171D242CDA5800D2644C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F9E24176C04005CDD5C /* main.cpp */; };
|
||||
9AF4171E242CDA5800D2644C /* nvidia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC77F5024176C04005CDD5C /* nvidia.cpp */; };
|
||||
9AF4171F242CDA5800D2644C /* XString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CC91241AB33700F3D247 /* XString.cpp */; };
|
||||
@ -890,15 +885,13 @@
|
||||
9A4185B42439F29D00BEAFB8 /* LoadOptions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadOptions_test.h; sourceTree = "<group>"; };
|
||||
9A4185B52439F29D00BEAFB8 /* LoadOptions_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadOptions_test.cpp; sourceTree = "<group>"; };
|
||||
9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unicode_conversions.cpp; sourceTree = "<group>"; };
|
||||
9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringArray.cpp; sourceTree = "<group>"; };
|
||||
9A9AEB92243F7B5600FBD7D8 /* XStringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringArray.h; sourceTree = "<group>"; };
|
||||
9A9AEB93243F7B5600FBD7D8 /* unicode_conversions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unicode_conversions.h; sourceTree = "<group>"; };
|
||||
9A9AEB98243F7B7900FBD7D8 /* printf_lite-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "printf_lite-test.h"; sourceTree = "<group>"; };
|
||||
9A9D3B2124221563006D8CD9 /* printf_lite-test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "printf_lite-test.cpp"; sourceTree = "<group>"; };
|
||||
9AC77EC424176BF2005CDD5C /* libCloverX64.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCloverX64.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9AC77ECC24176C04005CDD5C /* XStringWArray_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringWArray_test.h; sourceTree = "<group>"; };
|
||||
9AC77ECC24176C04005CDD5C /* XStringArray_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringArray_test.h; sourceTree = "<group>"; };
|
||||
9AC77ECD24176C04005CDD5C /* XArray_tests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XArray_tests.h; sourceTree = "<group>"; };
|
||||
9AC77ECE24176C04005CDD5C /* XStringWArray_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringWArray_test.cpp; sourceTree = "<group>"; };
|
||||
9AC77ECE24176C04005CDD5C /* XStringArray_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringArray_test.cpp; sourceTree = "<group>"; };
|
||||
9AC77ED324176C04005CDD5C /* XObjArray_tests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XObjArray_tests.h; sourceTree = "<group>"; };
|
||||
9AC77ED424176C04005CDD5C /* all_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = all_tests.cpp; sourceTree = "<group>"; };
|
||||
9AC77ED524176C04005CDD5C /* XObjArray_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XObjArray_tests.cpp; sourceTree = "<group>"; };
|
||||
@ -1044,8 +1037,8 @@
|
||||
9AC77FA824176C04005CDD5C /* memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = "<group>"; };
|
||||
9AC77FA924176C04005CDD5C /* abort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abort.h; sourceTree = "<group>"; };
|
||||
9AC77FAA24176C04005CDD5C /* remove_ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_ref.h; sourceTree = "<group>"; };
|
||||
9AC77FAC24176C04005CDD5C /* XStringWArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringWArray.h; sourceTree = "<group>"; };
|
||||
9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringWArray.cpp; sourceTree = "<group>"; };
|
||||
9AC77FAC24176C04005CDD5C /* XStringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringArray.h; sourceTree = "<group>"; };
|
||||
9AC77FAF24176C04005CDD5C /* XStringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringArray.cpp; sourceTree = "<group>"; };
|
||||
9AC77FB624176C04005CDD5C /* XArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XArray.h; sourceTree = "<group>"; };
|
||||
9AC77FB724176C04005CDD5C /* XObjArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XObjArray.h; sourceTree = "<group>"; };
|
||||
9AC7809924178F02005CDD5C /* menu_items.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = menu_items.cpp; sourceTree = "<group>"; };
|
||||
@ -1202,8 +1195,8 @@
|
||||
9AC77ED324176C04005CDD5C /* XObjArray_tests.h */,
|
||||
9A28CC95241AB34800F3D247 /* XString_test.cpp */,
|
||||
9A28CC96241AB34800F3D247 /* XString_test.h */,
|
||||
9AC77ECE24176C04005CDD5C /* XStringWArray_test.cpp */,
|
||||
9AC77ECC24176C04005CDD5C /* XStringWArray_test.h */,
|
||||
9AC77ECE24176C04005CDD5C /* XStringArray_test.cpp */,
|
||||
9AC77ECC24176C04005CDD5C /* XStringArray_test.h */,
|
||||
);
|
||||
path = cpp_unit_test;
|
||||
sourceTree = "<group>";
|
||||
@ -1456,10 +1449,8 @@
|
||||
9A28CC91241AB33700F3D247 /* XString.cpp */,
|
||||
9A28CC92241AB33700F3D247 /* XString.h */,
|
||||
9A35A6172451FE1500CAFF76 /* XStringAbstract.h */,
|
||||
9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */,
|
||||
9A9AEB92243F7B5600FBD7D8 /* XStringArray.h */,
|
||||
9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */,
|
||||
9AC77FAC24176C04005CDD5C /* XStringWArray.h */,
|
||||
9AC77FAF24176C04005CDD5C /* XStringArray.cpp */,
|
||||
9AC77FAC24176C04005CDD5C /* XStringArray.h */,
|
||||
);
|
||||
path = cpp_foundation;
|
||||
sourceTree = "<group>";
|
||||
@ -1480,7 +1471,7 @@
|
||||
9AC7801C24176C04005CDD5C /* nvidia.h in Headers */,
|
||||
9AC7808524176C04005CDD5C /* operatorNewDelete.h in Headers */,
|
||||
9AF41741242F15CC00D2644C /* BasicIO.h in Headers */,
|
||||
9AC77FB924176C04005CDD5C /* XStringWArray_test.h in Headers */,
|
||||
9AC77FB924176C04005CDD5C /* XStringArray_test.h in Headers */,
|
||||
9AC77FFE24176C04005CDD5C /* syslinux_mbr.h in Headers */,
|
||||
9AC7804724176C04005CDD5C /* lodepng.h in Headers */,
|
||||
9AC7806824176C04005CDD5C /* loader.h in Headers */,
|
||||
@ -1495,7 +1486,7 @@
|
||||
9AC77FC024176C04005CDD5C /* XObjArray_tests.h in Headers */,
|
||||
9AC7801D24176C04005CDD5C /* Events.h in Headers */,
|
||||
9AF41562242BABC700D2644C /* printlib-test-cpp_conf.h in Headers */,
|
||||
9AC7808D24176C04005CDD5C /* XStringWArray.h in Headers */,
|
||||
9AC7808D24176C04005CDD5C /* XStringArray.h in Headers */,
|
||||
9A105B7824483AE40006DE06 /* usbfix.h in Headers */,
|
||||
9A28CD33241BC0DF00F3D247 /* strcmp_test.h in Headers */,
|
||||
9AC7802124176C04005CDD5C /* boot.h in Headers */,
|
||||
@ -1516,7 +1507,6 @@
|
||||
9AC7808024176C04005CDD5C /* screen.h in Headers */,
|
||||
9AF41563242BABC700D2644C /* printlib-test.h in Headers */,
|
||||
9A105B5D24483AE40006DE06 /* FixBiosDsdt.h in Headers */,
|
||||
9A9AEB96243F7B5600FBD7D8 /* XStringArray.h in Headers */,
|
||||
9AD469522452B5A600D6D0DB /* Pci.h in Headers */,
|
||||
9A105B6624483AE40006DE06 /* LegacyBoot.h in Headers */,
|
||||
9AC7802224176C04005CDD5C /* DataHubCpu.h in Headers */,
|
||||
@ -1613,7 +1603,7 @@
|
||||
9ACFE65424309AF80071CC93 /* operatorNewDelete.h in Headers */,
|
||||
9A105B3024464A830006DE06 /* BmLib.h in Headers */,
|
||||
9ACFE65524309AF80071CC93 /* BasicIO.h in Headers */,
|
||||
9ACFE65724309AF80071CC93 /* XStringWArray_test.h in Headers */,
|
||||
9ACFE65724309AF80071CC93 /* XStringArray_test.h in Headers */,
|
||||
9ACFE65824309AF80071CC93 /* syslinux_mbr.h in Headers */,
|
||||
9ACFE65924309AF80071CC93 /* lodepng.h in Headers */,
|
||||
9ACFE65A24309AF80071CC93 /* loader.h in Headers */,
|
||||
@ -1627,7 +1617,7 @@
|
||||
9ACFE66924309AF80071CC93 /* XObjArray_tests.h in Headers */,
|
||||
9ACFE66A24309AF80071CC93 /* Events.h in Headers */,
|
||||
9ACFE66B24309AF80071CC93 /* printlib-test-cpp_conf.h in Headers */,
|
||||
9ACFE66C24309AF80071CC93 /* XStringWArray.h in Headers */,
|
||||
9ACFE66C24309AF80071CC93 /* XStringArray.h in Headers */,
|
||||
9ACFE66E24309AF80071CC93 /* strcmp_test.h in Headers */,
|
||||
9ACFE66F24309AF80071CC93 /* boot.h in Headers */,
|
||||
9ACFE67024309AF80071CC93 /* ati.h in Headers */,
|
||||
@ -1709,7 +1699,7 @@
|
||||
9AF41587242CD75C00D2644C /* XTheme.h in Headers */,
|
||||
9AF41589242CD75C00D2644C /* nvidia.h in Headers */,
|
||||
9AF4158A242CD75C00D2644C /* operatorNewDelete.h in Headers */,
|
||||
9AF4158C242CD75C00D2644C /* XStringWArray_test.h in Headers */,
|
||||
9AF4158C242CD75C00D2644C /* XStringArray_test.h in Headers */,
|
||||
9AF4158D242CD75C00D2644C /* syslinux_mbr.h in Headers */,
|
||||
9AF4158F242CD75C00D2644C /* lodepng.h in Headers */,
|
||||
9AF41590242CD75C00D2644C /* loader.h in Headers */,
|
||||
@ -1722,7 +1712,7 @@
|
||||
9AF4159E242CD75C00D2644C /* XObjArray_tests.h in Headers */,
|
||||
9AF4159F242CD75C00D2644C /* Events.h in Headers */,
|
||||
9AF415A0242CD75C00D2644C /* printlib-test-cpp_conf.h in Headers */,
|
||||
9AF415A1242CD75C00D2644C /* XStringWArray.h in Headers */,
|
||||
9AF415A1242CD75C00D2644C /* XStringArray.h in Headers */,
|
||||
9A09863C2438A15400826276 /* shared_with_menu.h in Headers */,
|
||||
9A4185B72439F29D00BEAFB8 /* LoadOptions_test.h in Headers */,
|
||||
9AF415A3242CD75C00D2644C /* strcmp_test.h in Headers */,
|
||||
@ -1804,7 +1794,7 @@
|
||||
9AF41664242CDA5800D2644C /* XTheme.h in Headers */,
|
||||
9AF41666242CDA5800D2644C /* nvidia.h in Headers */,
|
||||
9AF41667242CDA5800D2644C /* operatorNewDelete.h in Headers */,
|
||||
9AF41669242CDA5800D2644C /* XStringWArray_test.h in Headers */,
|
||||
9AF41669242CDA5800D2644C /* XStringArray_test.h in Headers */,
|
||||
9AF4166A242CDA5800D2644C /* syslinux_mbr.h in Headers */,
|
||||
9AF4166C242CDA5800D2644C /* lodepng.h in Headers */,
|
||||
9AF4166D242CDA5800D2644C /* loader.h in Headers */,
|
||||
@ -1817,7 +1807,7 @@
|
||||
9AF4167B242CDA5800D2644C /* XObjArray_tests.h in Headers */,
|
||||
9AF4167C242CDA5800D2644C /* Events.h in Headers */,
|
||||
9AF4167D242CDA5800D2644C /* printlib-test-cpp_conf.h in Headers */,
|
||||
9AF4167E242CDA5800D2644C /* XStringWArray.h in Headers */,
|
||||
9AF4167E242CDA5800D2644C /* XStringArray.h in Headers */,
|
||||
9A09863D2438A15400826276 /* shared_with_menu.h in Headers */,
|
||||
9A4185B82439F29D00BEAFB8 /* LoadOptions_test.h in Headers */,
|
||||
9AF41680242CDA5800D2644C /* strcmp_test.h in Headers */,
|
||||
@ -2078,7 +2068,7 @@
|
||||
9AC7802824176C04005CDD5C /* hda.cpp in Sources */,
|
||||
9AC7804524176C04005CDD5C /* egemb_icons_dark.cpp in Sources */,
|
||||
9AC7805024176C04005CDD5C /* scroll_images.cpp in Sources */,
|
||||
9AC7809024176C04005CDD5C /* XStringWArray.cpp in Sources */,
|
||||
9AC7809024176C04005CDD5C /* XStringArray.cpp in Sources */,
|
||||
9AC7801024176C04005CDD5C /* PlatformDriverOverride.cpp in Sources */,
|
||||
9AC7800224176C04005CDD5C /* HdaCodecDump.cpp in Sources */,
|
||||
9AC7801A24176C04005CDD5C /* Nvram.cpp in Sources */,
|
||||
@ -2101,7 +2091,6 @@
|
||||
9AC7808424176C04005CDD5C /* globals_dtor.cpp in Sources */,
|
||||
9AC7803024176C04005CDD5C /* DevicePath.cpp in Sources */,
|
||||
9AC77FC324176C04005CDD5C /* XArray_tests.cpp in Sources */,
|
||||
9A9AEB95243F7B5600FBD7D8 /* XStringArray.cpp in Sources */,
|
||||
9AC7800A24176C04005CDD5C /* StateGenerator.cpp in Sources */,
|
||||
9AC7805C24176C04005CDD5C /* XImage.cpp in Sources */,
|
||||
9A014999244091B200B37399 /* printlib-test.cpp in Sources */,
|
||||
@ -2156,7 +2145,7 @@
|
||||
9AC7807624176C04005CDD5C /* icns.cpp in Sources */,
|
||||
9A28CD32241BC0DF00F3D247 /* strcmp_test.cpp in Sources */,
|
||||
9AC7805524176C04005CDD5C /* nanosvgrast.cpp in Sources */,
|
||||
9AC77FBB24176C04005CDD5C /* XStringWArray_test.cpp in Sources */,
|
||||
9AC77FBB24176C04005CDD5C /* XStringArray_test.cpp in Sources */,
|
||||
9AC7808124176C04005CDD5C /* main.cpp in Sources */,
|
||||
9AC7803924176C04005CDD5C /* nvidia.cpp in Sources */,
|
||||
9A28CC93241AB33700F3D247 /* XString.cpp in Sources */,
|
||||
@ -2191,7 +2180,7 @@
|
||||
9ACFE6B824309AF80071CC93 /* hda.cpp in Sources */,
|
||||
9ACFE6B924309AF80071CC93 /* egemb_icons_dark.cpp in Sources */,
|
||||
9ACFE6BA24309AF80071CC93 /* scroll_images.cpp in Sources */,
|
||||
9ACFE6BB24309AF80071CC93 /* XStringWArray.cpp in Sources */,
|
||||
9ACFE6BB24309AF80071CC93 /* XStringArray.cpp in Sources */,
|
||||
9ACFE6BC24309AF80071CC93 /* PlatformDriverOverride.cpp in Sources */,
|
||||
9ACFE6BD24309AF80071CC93 /* HdaCodecDump.cpp in Sources */,
|
||||
9ACFE6BE24309AF80071CC93 /* Nvram.cpp in Sources */,
|
||||
@ -2244,7 +2233,6 @@
|
||||
9ACFE6EE24309AF80071CC93 /* REFIT_MENU_SCREEN.cpp in Sources */,
|
||||
9ACFE6EF24309AF80071CC93 /* LegacyBiosThunk.cpp in Sources */,
|
||||
9A09863424389A6A00826276 /* menu.cpp in Sources */,
|
||||
9A9AEB9F243F7B9200FBD7D8 /* XStringArray.cpp in Sources */,
|
||||
9ACFE6F324309AF80071CC93 /* lockedgraphics.cpp in Sources */,
|
||||
9A4185BD2439F29D00BEAFB8 /* LoadOptions_test.cpp in Sources */,
|
||||
9A4F68612449D4B5004B2F7E /* strlen.cpp in Sources */,
|
||||
@ -2270,7 +2258,7 @@
|
||||
9ACFE70624309AF80071CC93 /* icns.cpp in Sources */,
|
||||
9ACFE70724309AF80071CC93 /* strcmp_test.cpp in Sources */,
|
||||
9ACFE70824309AF80071CC93 /* nanosvgrast.cpp in Sources */,
|
||||
9ACFE70924309AF80071CC93 /* XStringWArray_test.cpp in Sources */,
|
||||
9ACFE70924309AF80071CC93 /* XStringArray_test.cpp in Sources */,
|
||||
9ACFE70A24309AF80071CC93 /* main.cpp in Sources */,
|
||||
9ACFE70B24309AF80071CC93 /* nvidia.cpp in Sources */,
|
||||
9ACFE70C24309AF80071CC93 /* XString.cpp in Sources */,
|
||||
@ -2305,7 +2293,7 @@
|
||||
9AF415EE242CD75C00D2644C /* hda.cpp in Sources */,
|
||||
9AF415EF242CD75C00D2644C /* egemb_icons_dark.cpp in Sources */,
|
||||
9AF415F0242CD75C00D2644C /* scroll_images.cpp in Sources */,
|
||||
9AF415F1242CD75C00D2644C /* XStringWArray.cpp in Sources */,
|
||||
9AF415F1242CD75C00D2644C /* XStringArray.cpp in Sources */,
|
||||
9AF415F2242CD75C00D2644C /* PlatformDriverOverride.cpp in Sources */,
|
||||
9AF415F3242CD75C00D2644C /* HdaCodecDump.cpp in Sources */,
|
||||
9AF415F4242CD75C00D2644C /* Nvram.cpp in Sources */,
|
||||
@ -2358,7 +2346,6 @@
|
||||
9AF41625242CD75C00D2644C /* LegacyBiosThunk.cpp in Sources */,
|
||||
9A09863224389A6A00826276 /* menu.cpp in Sources */,
|
||||
9AF41629242CD75C00D2644C /* lockedgraphics.cpp in Sources */,
|
||||
9A9AEB9D243F7B9000FBD7D8 /* XStringArray.cpp in Sources */,
|
||||
9AF4162A242CD75C00D2644C /* XString_test.cpp in Sources */,
|
||||
9A4185BB2439F29D00BEAFB8 /* LoadOptions_test.cpp in Sources */,
|
||||
9A4F685B2449D4B4004B2F7E /* strlen.cpp in Sources */,
|
||||
@ -2383,7 +2370,7 @@
|
||||
9AF4163C242CD75C00D2644C /* icns.cpp in Sources */,
|
||||
9AF4163D242CD75C00D2644C /* strcmp_test.cpp in Sources */,
|
||||
9AF4163E242CD75C00D2644C /* nanosvgrast.cpp in Sources */,
|
||||
9AF4163F242CD75C00D2644C /* XStringWArray_test.cpp in Sources */,
|
||||
9AF4163F242CD75C00D2644C /* XStringArray_test.cpp in Sources */,
|
||||
9AF41640242CD75C00D2644C /* main.cpp in Sources */,
|
||||
9AF41641242CD75C00D2644C /* nvidia.cpp in Sources */,
|
||||
9AF41642242CD75C00D2644C /* XString.cpp in Sources */,
|
||||
@ -2419,7 +2406,7 @@
|
||||
9AF416CB242CDA5800D2644C /* hda.cpp in Sources */,
|
||||
9AF416CC242CDA5800D2644C /* egemb_icons_dark.cpp in Sources */,
|
||||
9AF416CD242CDA5800D2644C /* scroll_images.cpp in Sources */,
|
||||
9AF416CE242CDA5800D2644C /* XStringWArray.cpp in Sources */,
|
||||
9AF416CE242CDA5800D2644C /* XStringArray.cpp in Sources */,
|
||||
9AF416CF242CDA5800D2644C /* PlatformDriverOverride.cpp in Sources */,
|
||||
9AF416D0242CDA5800D2644C /* HdaCodecDump.cpp in Sources */,
|
||||
9AF416D1242CDA5800D2644C /* Nvram.cpp in Sources */,
|
||||
@ -2472,7 +2459,6 @@
|
||||
9AF41702242CDA5800D2644C /* LegacyBiosThunk.cpp in Sources */,
|
||||
9A09863324389A6A00826276 /* menu.cpp in Sources */,
|
||||
9AF41706242CDA5800D2644C /* lockedgraphics.cpp in Sources */,
|
||||
9A9AEB9E243F7B9100FBD7D8 /* XStringArray.cpp in Sources */,
|
||||
9AF41707242CDA5800D2644C /* XString_test.cpp in Sources */,
|
||||
9A4185BC2439F29D00BEAFB8 /* LoadOptions_test.cpp in Sources */,
|
||||
9A4F685E2449D4B4004B2F7E /* strlen.cpp in Sources */,
|
||||
@ -2497,7 +2483,7 @@
|
||||
9AF41719242CDA5800D2644C /* icns.cpp in Sources */,
|
||||
9AF4171A242CDA5800D2644C /* strcmp_test.cpp in Sources */,
|
||||
9AF4171B242CDA5800D2644C /* nanosvgrast.cpp in Sources */,
|
||||
9AF4171C242CDA5800D2644C /* XStringWArray_test.cpp in Sources */,
|
||||
9AF4171C242CDA5800D2644C /* XStringArray_test.cpp in Sources */,
|
||||
9AF4171D242CDA5800D2644C /* main.cpp in Sources */,
|
||||
9AF4171E242CDA5800D2644C /* nvidia.cpp in Sources */,
|
||||
9AF4171F242CDA5800D2644C /* XString.cpp in Sources */,
|
||||
|
@ -12,6 +12,7 @@
|
||||
#define __XOBJARRAY_H__
|
||||
|
||||
#include <XToolsConf.h>
|
||||
#include "XToolsCommon.h"
|
||||
|
||||
|
||||
#if 1
|
||||
@ -35,8 +36,8 @@ class XObjArrayNC
|
||||
{
|
||||
public:
|
||||
XObjArrayEntry<TYPE> *_Data;
|
||||
xsize _Len;
|
||||
xsize m_allocatedSize;
|
||||
size_t _Len;
|
||||
size_t m_allocatedSize;
|
||||
|
||||
public:
|
||||
void Init();
|
||||
@ -58,16 +59,40 @@ class XObjArrayNC
|
||||
bool NotNull() const { return size() > 0; }
|
||||
bool IsNull() const { return size() == 0; }
|
||||
|
||||
const TYPE &ElementAt(xsize nIndex) const;
|
||||
TYPE &ElementAt(xsize nIndex);
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
const TYPE &ElementAt(IntegralType nIndex) const
|
||||
{
|
||||
if (nIndex < 0) {
|
||||
panic("XObjArrayNC::ElementAt() : i < 0. System halted\n");
|
||||
}
|
||||
if ( (unsigned_type(IntegralType))nIndex >= _Len ) {
|
||||
panic("XObjArrayNC::ElementAt() -> operator [] - index (%zu) greater than length (%zu)\n", (size_t)nIndex, _Len);
|
||||
}
|
||||
return *((TYPE *)(_Data[nIndex].Object));
|
||||
}
|
||||
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
TYPE &ElementAt(IntegralType nIndex)
|
||||
{
|
||||
if (nIndex < 0) {
|
||||
panic("XObjArrayNC::ElementAt() : i < 0. System halted\n");
|
||||
}
|
||||
if ( (unsigned_type(IntegralType))nIndex >= _Len ) {
|
||||
panic("XObjArrayNC::ElementAt() const -> operator [] - index (%zu) greater than length (%zu)\n", (size_t)nIndex, _Len);
|
||||
}
|
||||
return *((TYPE *)(_Data[nIndex].Object));
|
||||
}
|
||||
|
||||
// This was useful for realtime debugging with a debugger that do not recognise references. That was years and years ago. Probably not needed anymore.
|
||||
#ifdef _DEBUG_iufasdfsfk
|
||||
const TYPE *DbgAt(int i) const { if ( i >= 0 && (xsize)i < _Len ) return &ElementAt ((xsize) i); else return NULL; }
|
||||
#endif
|
||||
|
||||
const TYPE &operator[](xsize nIndex) const { return ElementAt(nIndex); }
|
||||
TYPE &operator[](xsize nIndex) { return ElementAt(nIndex); }
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
const TYPE &operator[](IntegralType nIndex) const { return ElementAt(nIndex); }
|
||||
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
TYPE &operator[](IntegralType nIndex) { return ElementAt(nIndex); }
|
||||
|
||||
xsize AddReference(TYPE *newElement, bool FreeIt);
|
||||
|
||||
@ -163,7 +188,7 @@ const XObjArray<TYPE> &XObjArray<TYPE>::operator =(const XObjArray<TYPE> &anObjA
|
||||
xsize ui;
|
||||
|
||||
XObjArrayNC<TYPE>::Empty();
|
||||
CheckSize(anObjArray.length(), 0);
|
||||
this->CheckSize(anObjArray.length(), 0);
|
||||
for ( ui=0 ; ui<anObjArray.size() ; ui+=1 ) AddCopy(anObjArray.ElementAt(ui));
|
||||
return *this;
|
||||
}
|
||||
@ -192,26 +217,6 @@ void XObjArrayNC<TYPE>::CheckSize(xsize nNewSize, xsize nGrowBy)
|
||||
}
|
||||
}
|
||||
|
||||
/* ElementAt() */
|
||||
template<class TYPE>
|
||||
TYPE &XObjArrayNC<TYPE>::ElementAt(xsize index)
|
||||
{
|
||||
if ( index >= _Len ) {
|
||||
panic("XObjArray<TYPE>::ElementAt(xsize) -> operator [] - index (%zu) greater than length (%zu)\n", index, _Len);
|
||||
}
|
||||
return *((TYPE *)(_Data[index].Object));
|
||||
}
|
||||
|
||||
/* ElementAt() */
|
||||
template<class TYPE>
|
||||
const TYPE &XObjArrayNC<TYPE>::ElementAt(xsize index) const
|
||||
{
|
||||
if ( index >= _Len ) {
|
||||
panic("XObjArray<TYPE>::ElementAt(xsize) const -> operator [] - index (%zu) greater than length (%zu)\n", index, _Len);
|
||||
}
|
||||
return *((TYPE *)(_Data[index].Object));
|
||||
}
|
||||
|
||||
///* Add() */
|
||||
//template<class TYPE>
|
||||
//TYPE &XObjArray<TYPE>::AddNew(bool FreeIt)
|
||||
|
@ -10,12 +10,13 @@
|
||||
#define __XSTRINGABSTRACT_H__
|
||||
|
||||
#include <XToolsConf.h>
|
||||
#include "XToolsCommon.h"
|
||||
#include "unicode_conversions.h"
|
||||
|
||||
#ifndef DEBUG_ALL
|
||||
#define DEBUG_XStringAbstract 0
|
||||
#else
|
||||
#define DEBUG_TEXT DEBUG_ALL
|
||||
#define DEBUG_XStringAbstract DEBUG_ALL
|
||||
#endif
|
||||
|
||||
#if DEBUG_XStringAbstract == 0
|
||||
@ -35,90 +36,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
struct XStringAbstract__false_type {
|
||||
static constexpr bool value = false;
|
||||
bool v() const { return false; }
|
||||
};
|
||||
|
||||
struct XStringAbstract__true_type {
|
||||
static constexpr bool value = true;
|
||||
bool v() const { return true; }
|
||||
};
|
||||
|
||||
/* make unsigned */
|
||||
template <class _Tp>
|
||||
struct XStringAbstract__make_unsigned {};
|
||||
|
||||
template <> struct XStringAbstract__make_unsigned< char> {typedef unsigned char type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed char> {typedef unsigned char type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned char> {typedef unsigned char type;};
|
||||
template <> struct XStringAbstract__make_unsigned< char16_t> {typedef char16_t type;};
|
||||
template <> struct XStringAbstract__make_unsigned< char32_t> {typedef char32_t type;};
|
||||
template <> struct XStringAbstract__make_unsigned< wchar_t> {typedef wchar_t type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed short> {typedef unsigned short type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned short> {typedef unsigned short type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed int> {typedef unsigned int type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned int> {typedef unsigned int type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed long> {typedef unsigned long type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned long> {typedef unsigned long type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed long long> {typedef unsigned long long type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned long long> {typedef unsigned long long type;};
|
||||
#define unsigned_type(x) typename XStringAbstract__make_unsigned<x>::type
|
||||
|
||||
/* enable_if */
|
||||
template <bool, typename T = void>
|
||||
struct XStringAbstract__enable_if_t
|
||||
{};
|
||||
|
||||
template <typename T>
|
||||
struct XStringAbstract__enable_if_t<true, T> {
|
||||
typedef T type;
|
||||
};
|
||||
//#define enable_if(x) XStringAbstract__enable_if_t(x, void)::type
|
||||
#define enable_if(x) typename enable_if_type = typename XStringAbstract__enable_if_t<x>::type
|
||||
//
|
||||
//template< bool B, class T = void >
|
||||
//using XStringAbstract__enable_if_t = typename XStringAbstract__enable_if<B,T>::type;
|
||||
|
||||
|
||||
// is_integral
|
||||
template <class _Tp> struct XStringAbstract__is_integral_st : public XStringAbstract__false_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<bool> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<signed char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<wchar_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<short> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned short> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<int> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned int> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<long> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned long> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<long long> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned long long> : public XStringAbstract__true_type {};
|
||||
#define is_integral(x) XStringAbstract__is_integral_st<x>::value
|
||||
|
||||
|
||||
// is_char
|
||||
template <class _Tp> struct XStringAbstract__is_char_st : public XStringAbstract__false_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_st<char[_Np]> : public XStringAbstract__true_type {};
|
||||
//template <> struct XStringAbstract__is_char_st<signed char> : public XStringAbstract__true_type {};
|
||||
//template <> struct XStringAbstract__is_char_st<unsigned char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char16_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char16_t[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_st<char16_t[_Np]> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char32_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char32_t[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_st<char32_t[_Np]> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<wchar_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<wchar_t[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_st<wchar_t[_Np]> : public XStringAbstract__true_type {};
|
||||
#define is_char(x) XStringAbstract__is_char_st<x>::value
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -126,6 +43,31 @@ template <size_t _Np> struct XStringAbstract__is_char_st<wchar_t[_Np]>
|
||||
#define asciiToLower(ch) (((ch >= L'A') && (ch <= L'Z')) ? ((ch - L'A') + L'a') : ch)
|
||||
#define asciiToUpper(ch) (((ch >= L'a') && (ch <= L'z')) ? ((ch - L'a') + L'A') : ch)
|
||||
|
||||
template<typename S, typename O>
|
||||
int XStringAbstract__startWith(const S* src, const O* other, bool ignoreCase)
|
||||
{
|
||||
size_t nb = 0;
|
||||
const S* src2 = src;
|
||||
const O* other2 = other;
|
||||
|
||||
char32_t src_char32;
|
||||
char32_t other_char32;
|
||||
other2 = get_char32_from_string(other2, &other_char32);
|
||||
if ( !other_char32 ) return true; // startWith with empty string is considered true
|
||||
src2 = get_char32_from_string(src2, &src_char32);
|
||||
while ( other_char32 ) {
|
||||
if ( ignoreCase ) {
|
||||
src_char32 = asciiToLower(src_char32);
|
||||
other_char32 = asciiToLower(other_char32);
|
||||
}
|
||||
if ( src_char32 != other_char32 ) return false;
|
||||
src2 = get_char32_from_string(src2, &src_char32);
|
||||
other2 = get_char32_from_string(other2, &other_char32);
|
||||
nb += 1;
|
||||
};
|
||||
return src_char32 != 0;
|
||||
}
|
||||
|
||||
template<typename S, typename O>
|
||||
int XStringAbstract__compare(const S* src, const O* other, bool ignoreCase)
|
||||
{
|
||||
@ -335,6 +277,7 @@ public:
|
||||
size_t length() const { return length_of_utf_string(m_data); }
|
||||
// size_t sizeZZ() const { return size_of_utf_string(m_data); }
|
||||
size_t sizeInBytes() const { return size_of_utf_string(m_data)*sizeof(T); }
|
||||
size_t sizeInBytesIncludingTerminator() const { return (size_of_utf_string(m_data)+1)*sizeof(T); } // usefull for unit tests
|
||||
size_t allocatedSize() const { return m_allocatedSize; }
|
||||
|
||||
|
||||
@ -369,6 +312,7 @@ public:
|
||||
do {
|
||||
p = get_char32_from_string(p, &char32);
|
||||
if (!char32) {
|
||||
if ( (unsigned_type(IntegralType))i == nb ) return 0; // no panic if we want to access the null terminator
|
||||
panic("XStringAbstract::char32At(size_t i) : i >= length(). System halted\n");
|
||||
}
|
||||
nb += 1;
|
||||
@ -392,23 +336,20 @@ public:
|
||||
char32_t lastChar() const { if ( length() > 0 ) return char32At(length()-1); else return 0; }
|
||||
|
||||
//--------------------------------------------------------------------- strcat, strcpy, operator =
|
||||
/* strncpy */
|
||||
template<typename O>
|
||||
void strncpy(const O* other, size_t other_len)
|
||||
|
||||
/* strcpy char */
|
||||
template<typename O, enable_if(is_char(O))>
|
||||
void strcpy(O otherChar)
|
||||
{
|
||||
if ( other && *other && other_len > 0 ) {
|
||||
size_t newSize = utf_size_of_utf_string_len(m_data, other, other_len);
|
||||
if ( otherChar != 0) {
|
||||
size_t newSize = utf_size_of_utf_string_len(m_data, &otherChar, 1);
|
||||
CheckSize(newSize+1, 0);
|
||||
utf_string_from_utf_string_len(m_data, m_allocatedSize, other, other_len);
|
||||
utf_string_from_utf_string_len(m_data, m_allocatedSize, &otherChar, 1);
|
||||
m_data[newSize] = 0;
|
||||
}else{
|
||||
setEmpty();
|
||||
}
|
||||
}
|
||||
// Old name. TODO remove
|
||||
template<typename O>
|
||||
void StrnCpy(const O* other, size_t other_len) { strncpy(other, other_len); }
|
||||
|
||||
/* strcpy */
|
||||
template<typename O>
|
||||
void strcpy(const O* other)
|
||||
@ -422,15 +363,29 @@ public:
|
||||
setEmpty();
|
||||
}
|
||||
}
|
||||
/* strncat */
|
||||
/* strncpy */
|
||||
template<typename O>
|
||||
void strncat(const O* other, size_t other_len)
|
||||
void strncpy(const O* other, size_t other_len)
|
||||
{
|
||||
if ( other && *other && other_len > 0 ) {
|
||||
size_t currentSize = size_of_utf_string(m_data);
|
||||
size_t newSize = currentSize + utf_size_of_utf_string_len(m_data, other, other_len);
|
||||
size_t newSize = utf_size_of_utf_string_len(m_data, other, other_len);
|
||||
CheckSize(newSize+1, 0);
|
||||
utf_string_from_utf_string_len(m_data+currentSize, m_allocatedSize, other, other_len);
|
||||
utf_string_from_utf_string_len(m_data, m_allocatedSize, other, other_len);
|
||||
m_data[newSize] = 0;
|
||||
}else{
|
||||
setEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
/* strcat char */
|
||||
template<typename O, enable_if(is_char(O))>
|
||||
void strcat(O otherChar)
|
||||
{
|
||||
if ( otherChar ) {
|
||||
size_t currentSize = size_of_utf_string(m_data);
|
||||
size_t newSize = currentSize + utf_size_of_utf_string_len(m_data, &otherChar, 1);
|
||||
CheckSize(newSize+1, 0);
|
||||
utf_string_from_utf_string_len(m_data+currentSize, m_allocatedSize, &otherChar, 1);
|
||||
m_data[newSize] = 0;
|
||||
}else{
|
||||
// nothing to do
|
||||
@ -450,6 +405,20 @@ public:
|
||||
// nothing to do
|
||||
}
|
||||
}
|
||||
/* strncat */
|
||||
template<typename O>
|
||||
void strncat(const O* other, size_t other_len)
|
||||
{
|
||||
if ( other && *other && other_len > 0 ) {
|
||||
size_t currentSize = size_of_utf_string(m_data);
|
||||
size_t newSize = currentSize + utf_size_of_utf_string_len(m_data, other, other_len);
|
||||
CheckSize(newSize+1, 0);
|
||||
utf_string_from_utf_string_len(m_data+currentSize, m_allocatedSize, other, other_len);
|
||||
m_data[newSize] = 0;
|
||||
}else{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
||||
/* takeValueFrom */
|
||||
template<typename O, class OtherXStringClass>
|
||||
ThisXStringClass& takeValueFrom(const XStringAbstract<O, OtherXStringClass>& S) { strcpy(S.s()); return *((ThisXStringClass*)this); }
|
||||
@ -479,19 +448,25 @@ public:
|
||||
/* += */
|
||||
template<typename O, class OtherXStringClass>
|
||||
ThisXStringClass& operator += (const XStringAbstract<O, OtherXStringClass>& S) { strcat(S.s()); return *((ThisXStringClass*)this); }
|
||||
template<typename O, enable_if(is_char(O))>
|
||||
ThisXStringClass& operator += (O S) { strcat(S); return *((ThisXStringClass*)this); }
|
||||
template<typename O>
|
||||
ThisXStringClass& operator += (const O* S) { strcat(S); return *((ThisXStringClass*)this); }
|
||||
|
||||
|
||||
template<typename O, class OtherXStringClass>
|
||||
ThisXStringClass operator + (const XStringAbstract<O, OtherXStringClass>& p2) const { XStringAbstract s; s=*this; s+=p2; return s; }
|
||||
template<typename O, enable_if(is_char(O))>
|
||||
ThisXStringClass operator + (O p1) const { XStringAbstract s; s=*this; s.strcat(p1); return s; }
|
||||
template<typename O>
|
||||
ThisXStringClass operator + (const O* p2) const { XStringAbstract s; s=*this; s+=p2; return s; }
|
||||
template<typename O, enable_if(is_char(O))>
|
||||
friend ThisXStringClass operator + (O p1, const ThisXStringClass& p2) { XStringAbstract s; s.strcat(p1); s.strcat(p2.s()); return s; }
|
||||
template<typename O>
|
||||
friend ThisXStringClass operator + (const O *p1, const ThisXStringClass& p2) { XStringAbstract s; s.strcat(p1); s.strcat(p2.s()); return s; }
|
||||
|
||||
|
||||
//--------------------------------------------------------------------- indexOf, rindexOf
|
||||
//--------------------------------------------------------------------- indexOf, rindexOf, contains, subString
|
||||
|
||||
/* indexOf */
|
||||
size_t indexOf(char32_t char32Searched, size_t Pos = 0) const
|
||||
@ -536,8 +511,43 @@ public:
|
||||
template<typename O, class OtherXStringClass>
|
||||
size_t rindexOfIC(const XStringAbstract<O, OtherXStringClass>& S, size_t Pos = MAX_XSIZE-1) const { return rindexOf(S.s(), Pos); }
|
||||
|
||||
template<typename O, class OtherXStringClass>
|
||||
bool contains(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOf(S) != MAX_XSIZE; }
|
||||
template<typename O>
|
||||
bool contains(const O* S) const { return indexOf(S) != MAX_XSIZE; }
|
||||
template<typename O, class OtherXStringClass>
|
||||
size_t containsIC(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOfIC(S) != MAX_XSIZE; }
|
||||
template<typename O>
|
||||
size_t containsIC(const O* S) const { return indexOfIC(S) != MAX_XSIZE; }
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
ThisXStringClass subString(size_t pos, size_t count) const
|
||||
{
|
||||
if ( pos > length() ) return ThisXStringClass();
|
||||
if ( count > length()-pos ) count = length()-pos;
|
||||
|
||||
ThisXStringClass ret;
|
||||
|
||||
const T* src = m_data;
|
||||
char32_t char32 = 1;
|
||||
while ( char32 && pos > 0 ) {
|
||||
src = get_char32_from_string(src, &char32);
|
||||
pos -= 1;
|
||||
};
|
||||
ret.strncat(src, count);
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<typename O, class OtherXStringClass>
|
||||
bool startWith(const XStringAbstract<O, OtherXStringClass>& otherS) const { return XStringAbstract__startWith(m_data, otherS.m_data, false); }
|
||||
template<typename O>
|
||||
bool startWith(const O* other) const { return XStringAbstract__startWith(m_data, other, false); }
|
||||
template<typename O, class OtherXStringClass>
|
||||
bool startWithIC(const XStringAbstract<O, OtherXStringClass>& otherS) const { return XStringAbstract__startWith(m_data, otherS.m_data, true); }
|
||||
template<typename O>
|
||||
bool startWithIC(const O* other) const { return XStringAbstract__startWith(m_data, other, true); }
|
||||
|
||||
//--------------------------------------------------------------------- String modification
|
||||
|
||||
void lowerAscii()
|
||||
{
|
||||
@ -593,34 +603,6 @@ public:
|
||||
// }
|
||||
//}
|
||||
|
||||
ThisXStringClass subString(size_t pos, size_t count) const
|
||||
{
|
||||
if ( pos > length() ) return ThisXStringClass();
|
||||
if ( count > length()-pos ) count = length()-pos;
|
||||
|
||||
ThisXStringClass ret;
|
||||
|
||||
const T* src = m_data;
|
||||
char32_t char32 = 1;
|
||||
while ( char32 && pos > 0 ) {
|
||||
src = get_char32_from_string(src, &char32);
|
||||
pos -= 1;
|
||||
};
|
||||
ret.strncat(src, count);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// todo rename to contains
|
||||
template<typename O, class OtherXStringClass>
|
||||
bool contains(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOf(S) != MAX_XSIZE; }
|
||||
template<typename O>
|
||||
bool contains(const O* S) const { return indexOf(S) != MAX_XSIZE; }
|
||||
template<typename O, class OtherXStringClass>
|
||||
size_t containsIC(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOfIC(S) != MAX_XSIZE; }
|
||||
template<typename O>
|
||||
size_t containsIC(const O* S) const { return indexOfIC(S) != MAX_XSIZE; }
|
||||
|
||||
|
||||
// void ToLower(bool FirstCharIsCap = false);
|
||||
// bool IsLetters() const;
|
||||
// bool IsLettersNoAccent() const;
|
||||
@ -765,46 +747,6 @@ T XStringAbstract<T, ThisXStringClass>::nullChar = 0;
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
|
||||
//
|
||||
//template<class T, class SubType, size_t growBy>
|
||||
//void XStringAbstract<T>::RemoveLastEspCtrl()
|
||||
//{
|
||||
// T *p;
|
||||
//
|
||||
// if ( size() > 0 ) {
|
||||
// p = s() + size() - 1;
|
||||
// #if __WCHAR_MIN__ < 0
|
||||
// if ( *p >= 0 && *p <= ' ' ) {
|
||||
// #else
|
||||
// if ( *p <= ' ' ) {
|
||||
// #endif
|
||||
// p -= 1;
|
||||
// #if __WCHAR_MIN__ < 0
|
||||
// while ( p>data() && *p >= 0 && *p <= ' ' ) p -= 1;
|
||||
// #else
|
||||
// while ( p>data() && *p <= ' ' ) p -= 1;
|
||||
// #endif
|
||||
// if ( p>data() ) {
|
||||
// setSize( (size_t)(p-data())+1);
|
||||
// }else{
|
||||
// #if __WCHAR_MIN__ < 0
|
||||
// if ( *p >= 0 && *p <= ' ' ) setSize(0);
|
||||
// #else
|
||||
// if ( *p <= ' ' ) setSize(0);
|
||||
// #endif
|
||||
// else setSize(1);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -814,10 +756,6 @@ T XStringAbstract<T, ThisXStringClass>::nullChar = 0;
|
||||
|
||||
#undef DBG_XSTRING
|
||||
#undef asciiToLower
|
||||
#undef unsigned_type
|
||||
#undef is_integral
|
||||
#undef is_char
|
||||
#undef enable_if
|
||||
|
||||
|
||||
|
||||
|
@ -9,131 +9,4 @@
|
||||
|
||||
|
||||
const XStringArray NullXStringArray;
|
||||
|
||||
|
||||
XStringArray::XStringArray() : XStringArraySuper()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
void XStringArray::AddStrings(const wchar_t *Val1, ...)
|
||||
{
|
||||
va_list va;
|
||||
const wchar_t *p;
|
||||
|
||||
{
|
||||
XString* newS = new XString;
|
||||
newS->takeValueFrom(Val1);
|
||||
AddReference(newS, true);
|
||||
}
|
||||
va_start(va, Val1);
|
||||
p = VA_ARG(va, const wchar_t *);
|
||||
while ( p != nullptr ) {
|
||||
XString* newS = new XString;
|
||||
newS->takeValueFrom(Val1);
|
||||
AddReference(newS, true);
|
||||
p = VA_ARG(va, const wchar_t *);
|
||||
}
|
||||
va_end(va);
|
||||
}
|
||||
|
||||
XString XStringArray::ConcatAll(const XString& Separator, const XString& Prefix, const XString& Suffix) const
|
||||
{
|
||||
xsize i;
|
||||
XString s;
|
||||
|
||||
if ( size() > 0 ) {
|
||||
s = Prefix;
|
||||
s += ElementAt(0);
|
||||
for ( i=1 ; i<size() ; i+=1 ) {
|
||||
s += Separator;
|
||||
s += ElementAt(i);
|
||||
}
|
||||
s += Suffix;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
bool XStringArray::Equal(const XStringArray &aStrings) const
|
||||
{
|
||||
xsize ui;
|
||||
|
||||
if ( size() != aStrings.size() ) return false;
|
||||
for ( ui=0 ; ui<size() ; ui+=1 ) {
|
||||
if ( ElementAt(ui) != aStrings[ui] ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool XStringArray::Same(const XStringArray &aStrings) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<size() ; i+=1 ) {
|
||||
if ( !aStrings.Contains(ElementAt(i)) ) return false;
|
||||
}
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
if ( !Contains(aStrings.ElementAt(i)) ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool XStringArray::Contains(const XString &S) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<size() ; i+=1 ) {
|
||||
if ( ElementAt(i) == S ) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Add
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
void XStringArray::Add(const XStringArray &aStrings)
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
AddCopy(aStrings[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void XStringArray::AddID(const XString &aString)
|
||||
{
|
||||
if ( !Contains(aString) ) AddCopy(aString);
|
||||
}
|
||||
|
||||
void XStringArray::AddID(const XStringArray &aStrings)
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
if ( !Contains(aStrings[i]) ) AddCopy(aStrings[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
// Divers
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
XStringArray Split(const XString &S, const XString &Separator)
|
||||
{
|
||||
XStringArray Ss;
|
||||
size_t idxB, idxE;
|
||||
|
||||
idxB = 0;
|
||||
idxE = S.indexOf(Separator, idxB);
|
||||
while ( idxE != MAX_XSIZE ) {
|
||||
Ss.AddCopy(S.subString(idxB, idxE-idxB));
|
||||
idxB = idxE + Separator.length();
|
||||
idxE = S.indexOf(Separator, idxB);
|
||||
}
|
||||
if ( idxB < S.length() ) Ss.AddCopy(S.subString(idxB, S.length()-idxB));
|
||||
return Ss;
|
||||
}
|
||||
|
||||
const XStringWArray NullXStringWArray;
|
||||
|
@ -10,45 +10,260 @@
|
||||
#define __XSTRINGARRAY_H__
|
||||
|
||||
#include <XToolsConf.h>
|
||||
#include "XStringWArray.h"
|
||||
#include "XToolsCommon.h"
|
||||
#include "XObjArray.h"
|
||||
#include "XString.h"
|
||||
|
||||
|
||||
#define XStringArraySuper XObjArray<XString>
|
||||
class XStringArray : public XStringArraySuper
|
||||
#define XStringArraySuper XObjArray<XStringClass>
|
||||
|
||||
template<class XStringClass_>
|
||||
class XStringArray_/* : public XStringArraySuper*/
|
||||
{
|
||||
protected:
|
||||
XObjArray<XStringClass_> array;
|
||||
|
||||
public:
|
||||
typedef XStringClass_ XStringClass;
|
||||
|
||||
XStringArray();
|
||||
XStringArray_() {};
|
||||
|
||||
size_t size() const { return array.size(); }
|
||||
void setEmpty() { array.Empty(); }
|
||||
bool isEmpty() const { return this->size() == 0 ; }
|
||||
bool notEmpty() const { return this->size() > 0 ; }
|
||||
|
||||
// #define enable_if XStringAbstract__enable_if_t
|
||||
/* [] */
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
const XStringClass& operator [](IntegralType i) const { return array[i]; }
|
||||
|
||||
|
||||
void SetNull() { Empty(); }
|
||||
bool IsNull() const { return size() == 0 ; }
|
||||
bool NotNull() const { return size() > 0 ; }
|
||||
XStringClass ConcatAll(const XStringClass& Separator = ", "_XS, const XStringClass& Prefix = NullXString, const XStringClass& Suffix = NullXString) const
|
||||
{
|
||||
xsize i;
|
||||
XString s;
|
||||
|
||||
XString ConcatAll(const XString& Separator = ", "_XS, const XString& Prefix = NullXString, const XString& Suffix = NullXString) const;
|
||||
if ( array.size() > 0 ) {
|
||||
s = Prefix;
|
||||
s += array.ElementAt(0);
|
||||
for ( i=1 ; i<array.size() ; i+=1 ) {
|
||||
s += Separator;
|
||||
s += array.ElementAt(i);
|
||||
}
|
||||
s += Suffix;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
bool Equal(const XStringArray &aStrings) const;
|
||||
bool operator ==(const XStringArray &aXStrings) const { return Equal(aXStrings); }
|
||||
bool operator !=(const XStringArray& aXStrings) const { return !Equal(aXStrings); }
|
||||
bool Contains(const XString &S) const;
|
||||
bool Same(const XStringArray &aStrings) const;
|
||||
|
||||
template<class OtherXStringArrayClass>
|
||||
bool Equal(const OtherXStringArrayClass &aStrings) const
|
||||
{
|
||||
xsize ui;
|
||||
|
||||
if ( array.size() != aStrings.size() ) return false;
|
||||
for ( ui=0 ; ui<array.size() ; ui+=1 ) {
|
||||
if ( array.ElementAt(ui) != aStrings[ui] ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
template<class OtherXStringArrayClass>
|
||||
bool operator ==(const OtherXStringArrayClass &aXStrings) const { return Equal(aXStrings); }
|
||||
template<class OtherXStringArrayClass>
|
||||
bool operator !=(const OtherXStringArrayClass& aXStrings) const { return !Equal(aXStrings); }
|
||||
|
||||
template<class OtherXStringClass>
|
||||
bool contains(const OtherXStringClass &S) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<array.size() ; i+=1 ) {
|
||||
if ( array.ElementAt(i) == S ) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
template<class OtherXStringClass>
|
||||
bool containsIC(const OtherXStringClass &S) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<XStringArraySuper::size() ; i+=1 ) {
|
||||
if ( this->ElementAt(i).EqualIC(S) ) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template<class OtherXStringClass>
|
||||
bool ContainsStartWithIC(const OtherXStringClass &S) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<XStringArraySuper::size() ; i+=1 ) {
|
||||
if ( this->ElementAt(i).startWith(S) ) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
template<class OtherXStringArrayClass>
|
||||
bool Same(const OtherXStringArrayClass &aStrings) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<this->size() ; i+=1 ) {
|
||||
if ( !aStrings.contains(array.ElementAt(i)) ) return false;
|
||||
}
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
if ( !contains(aStrings[i]) ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Add
|
||||
void AddStrings(const wchar_t *Val1, ...);
|
||||
template<typename CharType>
|
||||
void AddStrings(const CharType* Val1, ...)
|
||||
{
|
||||
va_list va;
|
||||
const wchar_t *p;
|
||||
|
||||
void AddNoNull(const XString &aString) { if ( !aString.isEmpty() ) AddCopy(aString); }
|
||||
void AddEvenNull(const XString &aString) { AddCopy(aString); }
|
||||
{
|
||||
XStringClass* newS = new XStringClass;
|
||||
newS->takeValueFrom(Val1);
|
||||
XStringArraySuper::AddReference(newS, true);
|
||||
}
|
||||
va_start(va, Val1);
|
||||
p = VA_ARG(va, const CharType*);
|
||||
while ( p != nullptr ) {
|
||||
XStringClass* newS = new XStringClass;
|
||||
newS->takeValueFrom(Val1);
|
||||
XStringArraySuper::AddReference(newS, true);
|
||||
p = VA_ARG(va, const CharType*);
|
||||
}
|
||||
va_end(va);
|
||||
}
|
||||
|
||||
void Add(const XString &aString) { AddCopy(aString); }
|
||||
void Add(const XStringArray &aStrings);
|
||||
void AddNoNull(const XStringClass &aString) { if ( !aString.isEmpty() ) array.AddCopy(aString); }
|
||||
void AddEvenNull(const XStringClass &aString) { array.AddCopy(aString); }
|
||||
|
||||
void Add(const XStringClass &aString) { array.AddCopy(aString); }
|
||||
void AddReference(XStringClass *newElement, bool FreeIt) { array.AddReference(newElement, FreeIt); }
|
||||
template<class OtherXStringClass>
|
||||
void Add(const XStringArray_<OtherXStringClass> &aStrings)
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
AddCopy(aStrings[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void AddID(const XStringClass &aString) /* ignore Duplicate */
|
||||
{
|
||||
if ( !contains(aString) ) array.AddCopy(aString);
|
||||
}
|
||||
void AddID(const XStringArray_ &aStrings) /* ignore Duplicate */
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
if ( !Contains(aStrings[i]) ) AddCopy(aStrings[i]);
|
||||
}
|
||||
}
|
||||
void remove(const XStringClass &aString)
|
||||
{
|
||||
if ( array.size() > 0 )
|
||||
{
|
||||
size_t i = array.size();
|
||||
do {
|
||||
i--;
|
||||
if ( array[i] == aString ) {
|
||||
array.RemoveAtIndex(i);
|
||||
break;
|
||||
}
|
||||
} while ( i > 0 );
|
||||
}
|
||||
}
|
||||
void removeIC(const XStringClass &aString)
|
||||
{
|
||||
if ( array.size() > 0 )
|
||||
{
|
||||
size_t i = array.size();
|
||||
do {
|
||||
i--;
|
||||
if ( array[i].equalIC(aString) ) {
|
||||
array.RemoveAtIndex(i);
|
||||
break;
|
||||
}
|
||||
} while ( i > 0 );
|
||||
}
|
||||
}
|
||||
|
||||
void AddID(const XString &aString); /* ignore Duplicate */
|
||||
void AddID(const XStringArray &aStrings); /* ignore Duplicate */
|
||||
};
|
||||
|
||||
class XStringArray : public XStringArray_<XString>
|
||||
{
|
||||
};
|
||||
extern const XStringArray NullXStringArray;
|
||||
XStringArray Split(const XString &S, const XString &Separator = ", "_XS);
|
||||
|
||||
class XString16Array : public XStringArray_<XString16>
|
||||
{
|
||||
};
|
||||
extern const XString16Array NullXString16Array;
|
||||
|
||||
class XString32Array : public XStringArray_<XString32>
|
||||
{
|
||||
};
|
||||
extern const XString32Array NullXString32Array;
|
||||
|
||||
class XStringWArray : public XStringArray_<XStringW>
|
||||
{
|
||||
};
|
||||
extern const XStringWArray NullXStringWArray;
|
||||
|
||||
|
||||
//
|
||||
//template<class XStringArrayClass, class XStringClass1, enable_if(!is_char(XStringClass1) && !is_char_ptr(XStringClass1))>
|
||||
//XStringArrayClass Split(const XStringClass1& S)
|
||||
//{
|
||||
// return Split<XStringArrayClass>(S, ", "_XS);
|
||||
//};
|
||||
|
||||
|
||||
template<class XStringArrayClass, class XStringClass1, class XStringClass2, enable_if(!is_char(XStringClass1) && !is_char_ptr(XStringClass1) && !is_char(XStringClass2))>
|
||||
XStringArrayClass Split(const XStringClass1& S, const XStringClass2& Separator)
|
||||
{
|
||||
XStringArrayClass Ss;
|
||||
size_t idxB, idxE;
|
||||
|
||||
idxB = 0;
|
||||
idxE = S.indexOf(Separator, idxB);
|
||||
while ( idxE != MAX_XSIZE ) {
|
||||
Ss.Add(S.subString(idxB, idxE-idxB));
|
||||
idxB = idxE + Separator.length();
|
||||
idxE = S.indexOf(Separator, idxB);
|
||||
}
|
||||
if ( idxB < S.length() ) Ss.Add(S.subString(idxB, S.length()-idxB));
|
||||
return Ss;
|
||||
};
|
||||
|
||||
|
||||
template<class XStringArrayClass, class XStringClass1, enable_if(!is_char(XStringClass1) && !is_char_ptr(XStringClass1))>
|
||||
XStringArrayClass Split(const XStringClass1& S)
|
||||
{
|
||||
return Split<XStringArrayClass>(S, ", "_XS);
|
||||
};
|
||||
|
||||
|
||||
template<class XStringArrayClass, typename CharType1, typename CharType2, enable_if(is_char(CharType1) && is_char(CharType2))>
|
||||
XStringArrayClass Split(const CharType1* S, const CharType2* Separator)
|
||||
{
|
||||
// TODO : Allocating temporary strings could be avoided by using low level function from unicode_conversions
|
||||
typename XStringArrayClass::XStringClass SS;
|
||||
SS.takeValueFrom(S);
|
||||
typename XStringArrayClass::XStringClass XSeparator;
|
||||
SS.takeValueFrom(Separator);
|
||||
return Split<XStringArrayClass>(SS, XSeparator);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1,145 +0,0 @@
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
//
|
||||
// STRINGS
|
||||
//
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
#if !defined(__XSTRINGWS_CPP__)
|
||||
#define __XSTRINGWS_CPP__
|
||||
|
||||
#include <Platform.h> // Only use angled for Platform, else, xcode project won't compile
|
||||
#include "XStringWArray.h"
|
||||
|
||||
|
||||
const XStringWArray NullXStrings;
|
||||
|
||||
|
||||
XStringWArray::XStringWArray() : XStringWArraySuper()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
void XStringWArray::AddStrings(const wchar_t *Val1, ...)
|
||||
{
|
||||
va_list va;
|
||||
const wchar_t *p;
|
||||
|
||||
{
|
||||
XStringW* newS = new XStringW;
|
||||
newS->takeValueFrom(Val1);
|
||||
AddReference(newS, true);
|
||||
}
|
||||
va_start(va, Val1);
|
||||
p = VA_ARG(va, const wchar_t *);
|
||||
while ( p != nullptr ) {
|
||||
XStringW* newS = new XStringW;
|
||||
newS->takeValueFrom(Val1);
|
||||
AddReference(newS, true);
|
||||
p = VA_ARG(va, const wchar_t *);
|
||||
}
|
||||
va_end(va);
|
||||
}
|
||||
|
||||
XStringW XStringWArray::ConcatAll(const XStringW& Separator, const XStringW& Prefix, const XStringW& Suffix) const
|
||||
{
|
||||
xsize i;
|
||||
XStringW s;
|
||||
|
||||
if ( size() > 0 ) {
|
||||
s = Prefix;
|
||||
s += ElementAt(0);
|
||||
for ( i=1 ; i<size() ; i+=1 ) {
|
||||
s += Separator;
|
||||
s += ElementAt(i);
|
||||
}
|
||||
s += Suffix;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
bool XStringWArray::Equal(const XStringWArray &aStrings) const
|
||||
{
|
||||
xsize ui;
|
||||
|
||||
if ( size() != aStrings.size() ) return false;
|
||||
for ( ui=0 ; ui<size() ; ui+=1 ) {
|
||||
if ( ElementAt(ui) != aStrings[ui] ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool XStringWArray::Same(const XStringWArray &aStrings) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<size() ; i+=1 ) {
|
||||
if ( !aStrings.Contains(ElementAt(i)) ) return false;
|
||||
}
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
if ( !Contains(aStrings.ElementAt(i)) ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool XStringWArray::Contains(const XStringW &S) const
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<size() ; i+=1 ) {
|
||||
if ( ElementAt(i) == S ) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
// Add
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
void XStringWArray::Add(const XStringWArray &aStrings)
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
AddCopy(aStrings[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void XStringWArray::AddID(const XStringW &aString)
|
||||
{
|
||||
if ( !Contains(aString) ) AddCopy(aString);
|
||||
}
|
||||
|
||||
void XStringWArray::AddID(const XStringWArray &aStrings)
|
||||
{
|
||||
xsize i;
|
||||
|
||||
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||
if ( !Contains(aStrings[i]) ) AddCopy(aStrings[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
// Divers
|
||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
XStringWArray Split(const XStringW &S, const XStringW &Separator)
|
||||
{
|
||||
XStringWArray Ss;
|
||||
xsize idxB, idxE;
|
||||
|
||||
idxB = 0;
|
||||
idxE = S.indexOf(Separator, idxB);
|
||||
while ( idxE != MAX_XSIZE ) {
|
||||
Ss.AddCopy(S.subString(idxB, idxE-idxB));
|
||||
idxB = idxE + Separator.length();
|
||||
idxE = S.indexOf(Separator, idxB);
|
||||
}
|
||||
if ( idxB < S.length() ) Ss.AddCopy(S.subString(idxB, S.length()-idxB));
|
||||
return Ss;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -1,54 +0,0 @@
|
||||
//*************************************************************************************************
|
||||
//*************************************************************************************************
|
||||
//
|
||||
// STRINGS
|
||||
//
|
||||
//*************************************************************************************************
|
||||
//*************************************************************************************************
|
||||
|
||||
#if !defined(__XSTRINGWARRAY_H__)
|
||||
#define __XSTRINGWARRAY_H__
|
||||
|
||||
#include <XToolsConf.h>
|
||||
#include "XObjArray.h"
|
||||
#include "XString.h"
|
||||
|
||||
|
||||
#define XStringWArraySuper XObjArray<XStringW>
|
||||
class XStringWArray : public XStringWArraySuper
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
XStringWArray();
|
||||
|
||||
|
||||
void SetNull() { Empty(); }
|
||||
bool IsNull() const { return size() == 0 ; }
|
||||
bool NotNull() const { return size() > 0 ; }
|
||||
|
||||
XStringW ConcatAll(const XStringW& Separator = L", "_XSW, const XStringW& Prefix = NullXStringW, const XStringW& Suffix = NullXStringW) const;
|
||||
|
||||
bool Equal(const XStringWArray &aStrings) const;
|
||||
bool operator ==(const XStringWArray &aXStrings) const { return Equal(aXStrings); }
|
||||
bool operator !=(const XStringWArray& aXStrings) const { return !Equal(aXStrings); }
|
||||
bool Contains(const XStringW &S) const;
|
||||
bool Same(const XStringWArray &aStrings) const;
|
||||
|
||||
// Add
|
||||
void AddStrings(const wchar_t *Val1, ...);
|
||||
|
||||
void AddNoNull(const XStringW &aString) { if ( !aString.isEmpty() ) AddCopy(aString); }
|
||||
void AddEvenNull(const XStringW &aString) { AddCopy(aString); }
|
||||
|
||||
void Add(const XStringW &aString) { AddCopy(aString); }
|
||||
void Add(const XStringWArray &aStrings);
|
||||
|
||||
void AddID(const XStringW &aString); /* ignore Duplicate */
|
||||
void AddID(const XStringWArray &aStrings); /* ignore Duplicate */
|
||||
};
|
||||
|
||||
extern const XStringWArray NullXStringws;
|
||||
XStringWArray Split(const XStringW &S, const XStringW &Separator = L", "_XSW);
|
||||
|
||||
#endif
|
137
rEFIt_UEFI/cpp_foundation/XToolsCommon.h
Normal file
137
rEFIt_UEFI/cpp_foundation/XToolsCommon.h
Normal file
@ -0,0 +1,137 @@
|
||||
//
|
||||
// XToolsCommon.h
|
||||
// cpp_tests
|
||||
//
|
||||
// Created by jief on 25.04.20.
|
||||
// Copyright © 2020 JF Knudsen. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef XToolsCommon_h
|
||||
#define XToolsCommon_h
|
||||
|
||||
|
||||
struct XStringAbstract__false_type {
|
||||
static constexpr bool value = false;
|
||||
bool v() const { return false; }
|
||||
};
|
||||
|
||||
struct XStringAbstract__true_type {
|
||||
static constexpr bool value = true;
|
||||
bool v() const { return true; }
|
||||
};
|
||||
|
||||
/* make unsigned */
|
||||
template <class _Tp>
|
||||
struct XStringAbstract__make_unsigned {};
|
||||
|
||||
template <> struct XStringAbstract__make_unsigned< char> {typedef unsigned char type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed char> {typedef unsigned char type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned char> {typedef unsigned char type;};
|
||||
template <> struct XStringAbstract__make_unsigned< char16_t> {typedef char16_t type;};
|
||||
template <> struct XStringAbstract__make_unsigned< char32_t> {typedef char32_t type;};
|
||||
template <> struct XStringAbstract__make_unsigned< wchar_t> {typedef wchar_t type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed short> {typedef unsigned short type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned short> {typedef unsigned short type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed int> {typedef unsigned int type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned int> {typedef unsigned int type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed long> {typedef unsigned long type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned long> {typedef unsigned long type;};
|
||||
template <> struct XStringAbstract__make_unsigned< signed long long> {typedef unsigned long long type;};
|
||||
template <> struct XStringAbstract__make_unsigned<unsigned long long> {typedef unsigned long long type;};
|
||||
#define unsigned_type(x) typename XStringAbstract__make_unsigned<x>::type
|
||||
|
||||
/* enable_if */
|
||||
template <bool, typename T = void>
|
||||
struct XStringAbstract__enable_if_t
|
||||
{};
|
||||
|
||||
template <typename T>
|
||||
struct XStringAbstract__enable_if_t<true, T> {
|
||||
typedef T type;
|
||||
};
|
||||
//#define enable_if(x) XStringAbstract__enable_if_t(x, void)::type
|
||||
#define enable_if(x) typename enable_if_type = typename XStringAbstract__enable_if_t<x>::type
|
||||
|
||||
//
|
||||
//template< bool B, class T = void >
|
||||
//using XStringAbstract__enable_if_t = typename XStringAbstract__enable_if<B,T>::type;
|
||||
|
||||
|
||||
// is_integral
|
||||
template <class _Tp> struct XStringAbstract__is_integral_st : public XStringAbstract__false_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<bool> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<signed char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<wchar_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<short> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned short> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<int> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned int> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<long> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned long> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<long long> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_integral_st<unsigned long long> : public XStringAbstract__true_type {};
|
||||
#define is_integral(x) XStringAbstract__is_integral_st<x>::value
|
||||
|
||||
|
||||
// is_char
|
||||
template <class _Tp> struct XStringAbstract__is_char_st : public XStringAbstract__false_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<signed char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<unsigned char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char16_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<char32_t> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_st<wchar_t> : public XStringAbstract__true_type {};
|
||||
#define is_char(x) XStringAbstract__is_char_st<x>::value
|
||||
|
||||
//
|
||||
//// STRUCT TEMPLATE remove_reference
|
||||
//template<class _Ty>
|
||||
// struct remove_ref
|
||||
// { // remove reference
|
||||
// using type = _Ty;
|
||||
// };
|
||||
//
|
||||
//template<class _Ty>
|
||||
// struct remove_ref<_Ty&>
|
||||
// { // remove reference
|
||||
// using type = _Ty;
|
||||
// };
|
||||
|
||||
// STRUCT TEMPLATE remove_const
|
||||
template<class _Ty>
|
||||
struct remove_const
|
||||
{ // remove const
|
||||
using type = _Ty;
|
||||
};
|
||||
|
||||
template<class _Ty>
|
||||
struct remove_const<const _Ty>
|
||||
{ // remove const
|
||||
using type = _Ty;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// is_char_ptr
|
||||
template <class _Tp> struct XStringAbstract__is_char_ptr_st : public XStringAbstract__false_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<char*> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<char[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_ptr_st<char[_Np]> : public XStringAbstract__true_type {};
|
||||
//template <> struct XStringAbstract__is_char_ptr_st<signed char> : public XStringAbstract__true_type {};
|
||||
//template <> struct XStringAbstract__is_char_ptr_st<unsigned char> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<char16_t*> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<char16_t[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_ptr_st<char16_t[_Np]> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<char32_t*> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<char32_t[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_ptr_st<char32_t[_Np]> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<wchar_t*> : public XStringAbstract__true_type {};
|
||||
template <> struct XStringAbstract__is_char_ptr_st<wchar_t[]> : public XStringAbstract__true_type {};
|
||||
template <size_t _Np> struct XStringAbstract__is_char_ptr_st<wchar_t[_Np]> : public XStringAbstract__true_type {};
|
||||
#define is_char_ptr(x) XStringAbstract__is_char_ptr_st<typename remove_const<x>::type>::value
|
||||
|
||||
|
||||
|
||||
#endif /* XToolsCommon_h */
|
@ -269,22 +269,6 @@ const char* get_char32_from_utf8_string(const char* s, char32_t* char32)
|
||||
return s;
|
||||
}
|
||||
|
||||
/*
|
||||
* get nth char32 of an utf8 string
|
||||
* Return value : pointer to the end of string or at the error
|
||||
*/
|
||||
char32_t get_char32_from_utf8_string_at_pos(const char* s, size_t pos)
|
||||
{
|
||||
if ( !s ) return 0;
|
||||
char32_t char32;
|
||||
s = get_char32_from_utf8_string(s, &char32);
|
||||
while ( char32 && pos > 0 ) {
|
||||
s = get_char32_from_utf8_string(s, &char32);
|
||||
pos--;
|
||||
}
|
||||
return char32;
|
||||
}
|
||||
|
||||
|
||||
/************************************************************* utf8 - char32 *********************************************************/
|
||||
|
||||
@ -412,6 +396,22 @@ size_t utf8_string_from_utf32_string_len(char* dst, size_t dst_max_size, const c
|
||||
return (size_t)(p-dst);
|
||||
}
|
||||
|
||||
/*
|
||||
* get nth char32 of an utf8 string
|
||||
* Return value : pointer to the end of string or at the error
|
||||
*/
|
||||
char32_t get_char32_from_utf8_string_at_pos(const char* s, size_t pos)
|
||||
{
|
||||
if ( !s ) return 0;
|
||||
char32_t char32;
|
||||
s = get_char32_from_utf8_string(s, &char32);
|
||||
while ( char32 && pos > 0 ) {
|
||||
s = get_char32_from_utf8_string(s, &char32);
|
||||
pos--;
|
||||
}
|
||||
return char32;
|
||||
}
|
||||
|
||||
|
||||
/************************************************************* utf8 - char16 *********************************************************/
|
||||
|
||||
@ -761,6 +761,22 @@ size_t utf32_string_from_utf16_string_len(char32_t* dst, size_t dst_max_size, co
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* get nth char32 of an utf16 string
|
||||
* Return value : pointer to the end of string or at the error
|
||||
*/
|
||||
char32_t get_char32_from_utf16_string_at_pos(const char16_t* s, size_t pos)
|
||||
{
|
||||
if ( !s ) return 0;
|
||||
char32_t char32;
|
||||
s = get_char32_from_utf16_string(s, &char32);
|
||||
while ( char32 && pos > 0 ) {
|
||||
s = get_char32_from_utf16_string(s, &char32);
|
||||
pos--;
|
||||
}
|
||||
return char32;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/************************************************************* utf8 - wchar_t *********************************************************/
|
||||
@ -972,6 +988,19 @@ size_t wchar_string_from_utf32_string(wchar_t* dst, size_t dst_max_size, const c
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get nth char32 of an utf16 string
|
||||
* Return value : pointer to the end of string or at the error
|
||||
*/
|
||||
char32_t get_char32_from_wchar_string_at_pos(const char16_t* s, size_t pos)
|
||||
{
|
||||
#if __WCHAR_MAX__ <= 0xFFFFu
|
||||
return get_char32_from_utf16_string_at_pos((char16_t*)s, pos);
|
||||
#else
|
||||
return get_char32_from_utf32_string_at_pos((char32_t*)s, pos);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1194,6 +1223,20 @@ size_t wchar_string_from_wchar_string_len(wchar_t* dst, size_t dst_max_size, con
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* get nth char32 of an utf32 string
|
||||
* Return value : pointer to the end of string or at the error
|
||||
*/
|
||||
char32_t get_char32_from_utf32_string_at_pos(const char32_t* s, size_t pos)
|
||||
{
|
||||
if ( !s ) return 0;
|
||||
while ( *s && pos > 0 ) {
|
||||
s++;
|
||||
pos--;
|
||||
}
|
||||
return *s;
|
||||
}
|
||||
|
||||
/****** convenience *****/
|
||||
|
||||
size_t length_of_wchar_string(const wchar_t* s)
|
||||
|
@ -108,6 +108,8 @@ size_t utf32_string_from_utf8_string_len(char32_t* dst, size_t dst_max_size, con
|
||||
size_t utf8_string_from_utf32_string(char* dst, size_t dst_max_size, const char32_t *s);
|
||||
size_t utf8_string_from_utf32_string_len(char* dst, size_t dst_max_size, const char32_t *s, size_t len);
|
||||
|
||||
char32_t get_char32_from_utf8_string_at_pos(const char* s, size_t pos);
|
||||
|
||||
|
||||
/****** utf8 - utf16 *****/
|
||||
|
||||
@ -148,6 +150,13 @@ size_t utf32_string_from_utf16_string(char32_t* dst, size_t dst_max_size, const
|
||||
size_t utf32_string_from_utf16_string_len(char32_t* dst, size_t dst_max_size, const char16_t *s, size_t len);
|
||||
|
||||
|
||||
/*
|
||||
* get nth char32 of an utf16 string
|
||||
* Return value : pointer to the end of string or at the error
|
||||
*/
|
||||
char32_t get_char32_from_utf16_string_at_pos(const char16_t* s, size_t pos);
|
||||
|
||||
|
||||
/****** utf8 - wchar_t *****/
|
||||
|
||||
size_t utf8_size_of_wchar_string(const wchar_t* s);
|
||||
@ -184,6 +193,8 @@ size_t utf32_string_from_wchar_string_len(char32_t* dst, size_t dst_max_size, co
|
||||
size_t wchar_string_from_utf32_string(wchar_t* dst, size_t dst_max_size, const char32_t* s);
|
||||
size_t wchar_string_from_utf32_string_len(wchar_t* dst, size_t dst_max_size, const char32_t* s, size_t len);
|
||||
|
||||
char32_t get_char32_from_wchar_string_at_pos(const char16_t* s, size_t pos);
|
||||
|
||||
|
||||
/****** no conversion *****/
|
||||
|
||||
@ -205,6 +216,8 @@ size_t utf32_string_from_utf32_string_len(char32_t* dst, size_t dst_max_size, c
|
||||
size_t wchar_string_from_wchar_string(wchar_t* dst, size_t dst_max_size, const wchar_t *s);
|
||||
size_t wchar_string_from_wchar_string_len(wchar_t* dst, size_t dst_max_size, const wchar_t *s, size_t len);
|
||||
|
||||
char32_t get_char32_from_utf32_string_at_pos(const char32_t* s, size_t pos);
|
||||
|
||||
/****** convenience *****/
|
||||
|
||||
inline size_t length_of_utf8_string(const char* s) {return utf32_size_of_utf8_string(s); }
|
||||
@ -220,6 +233,13 @@ inline const char16_t* get_char32_from_string(const char16_t* s, char32_t* char3
|
||||
inline const char32_t* get_char32_from_string(const char32_t* s, char32_t* char32) { *char32 = *s; return s+1; }
|
||||
inline const wchar_t* get_char32_from_string(const wchar_t* s, char32_t* char32) { return (wchar_t*)get_char32_from_string((wchar_cast*)s, char32); }
|
||||
|
||||
inline char32_t get_char32_from_utf_string_at_pos(const char* s, size_t pos) { return get_char32_from_utf8_string_at_pos(s, pos); }
|
||||
inline char32_t get_char32_from_utf_string_at_pos(const char16_t* s, size_t pos) { return get_char32_from_utf16_string_at_pos(s, pos); }
|
||||
inline char32_t get_char32_from_utf_string_at_pos(const char32_t* s, size_t pos) { return get_char32_from_utf32_string_at_pos(s, pos); }
|
||||
inline char32_t get_char32_from_utf_string_at_pos(const wchar_t* s, size_t pos) { return get_char32_from_utf_string_at_pos((wchar_cast*)s, pos); }
|
||||
|
||||
|
||||
|
||||
inline char* store_utf_from_char32(char* dst, size_t* dst_max_size, char32_t utf32_char) { return get_utf8_from_char32(dst, dst_max_size, utf32_char); }
|
||||
inline char16_t* store_utf_from_char32(char16_t* dst, size_t* dst_max_size, char32_t utf32_char) { return get_utf16_from_char32(dst, dst_max_size, utf32_char); }
|
||||
inline char32_t* store_utf_from_char32(char32_t* dst, size_t* dst_max_size, char32_t utf32_char) { return get_utf32_from_char32(dst, dst_max_size, utf32_char); }
|
||||
|
@ -85,21 +85,22 @@ CHAR16 *Old1_RemoveLoadOption(IN CONST CHAR16 *LoadOptions, IN CONST CHAR16 *Loa
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
//static XString AddLoadOption(IN CONST XString& LoadOptions, IN CONST XString& LoadOption)
|
||||
//{
|
||||
// // LoadOptions assumed out
|
||||
// // If either option strings are null nothing to do
|
||||
// if (LoadOptions.isEmpty())
|
||||
// if (LoadOptions.isEmpty()) //initially empty so return new option even if empty
|
||||
// {
|
||||
// // return LoadOption as nothing to add
|
||||
// // return LoadOption
|
||||
// return LoadOption;
|
||||
// }
|
||||
// // If there is no option or it is already present duplicate original
|
||||
// else {
|
||||
// if ( LoadOptions.contains(LoadOption) ) return LoadOptions;
|
||||
// if ( LoadOptions.contains(LoadOption) ) return LoadOptions; //good
|
||||
// // Otherwise add option
|
||||
// return SPrintf("%s %s", LoadOptions.c_str(), LoadOption.c_str()); //LoadOptions + LoadOption
|
||||
//// return SPrintf("%s %s", LoadOptions.c_str(), LoadOption.c_str()); //LoadOptions + LoadOption
|
||||
// return LoadOptions + " "_XS + LoadOption; //why not?
|
||||
// }
|
||||
//}
|
||||
//
|
||||
@ -146,25 +147,22 @@ CHAR16 *Old1_RemoveLoadOption(IN CONST CHAR16 *LoadOptions, IN CONST CHAR16 *Loa
|
||||
// XString NewLoadOptions;
|
||||
// if (Offset == 0) {
|
||||
// // Simple case - we just need substring after OptionLength position
|
||||
// NewLoadOptions = LoadOptions.SubString(OptionLength, MAX_XSIZE);
|
||||
// NewLoadOptions = LoadOptions.subString(OptionLength, MAX_XSIZE);
|
||||
// } else {
|
||||
// // Copy preceeding substring
|
||||
// NewLoadOptions = LoadOptions.SubString(0, Offset);
|
||||
// NewLoadOptions = LoadOptions.subString(0, Offset);
|
||||
//// CopyMem(NewLoadOptions, LoadOptions, Offset * sizeof(CHAR16));
|
||||
// if ((Offset + OptionLength) < Length) {
|
||||
// // Copy following substring, but include one space also
|
||||
// OptionLength--;
|
||||
// NewLoadOptions += LoadOptions.SubString(Offset + OptionLength, MAX_XSIZE);
|
||||
// NewLoadOptions += LoadOptions.subString(Offset + OptionLength, MAX_XSIZE);
|
||||
//// CopyMem(NewLoadOptions + Offset, LoadOptions + Offset + OptionLength, (Length - OptionLength - Offset) * sizeof(CHAR16));
|
||||
// }
|
||||
// }
|
||||
// return NewLoadOptions;
|
||||
//}
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
||||
|
||||
|
||||
@ -201,14 +199,14 @@ int BootOptions_tests()
|
||||
// LoadOptions = AddLoadOption(LoadOptions, "opt2"_XS);
|
||||
// LoadOptions = AddLoadOption(LoadOptions, "opt3"_XS);
|
||||
//
|
||||
// if ( LoadOptions != "opt1 opt2 opt3"_XS ) return 1;
|
||||
// if ( LoadOptions != "opt1 opt2 opt3"_XS ) return 10;
|
||||
//
|
||||
// XString LoadOptions1 = RemoveLoadOption(LoadOptions, "opt1"_XS);
|
||||
// if ( LoadOptions1 != "opt2 opt3"_XS ) return 1;
|
||||
// if ( LoadOptions1 != "opt2 opt3"_XS ) return 11;
|
||||
// XString LoadOptions2 = RemoveLoadOption(LoadOptions, "opt2"_XS);
|
||||
// if ( LoadOptions2 != "opt1 opt3"_XS ) return 1;
|
||||
// if ( LoadOptions2 != "opt1 opt3"_XS ) return 12;
|
||||
// XString LoadOptions3 = RemoveLoadOption(LoadOptions, "opt3"_XS);
|
||||
// if ( LoadOptions3 != "opt1 opt2"_XS ) return 1;
|
||||
// if ( LoadOptions3 != "opt1 opt2"_XS ) return 13;
|
||||
// }
|
||||
{
|
||||
XStringArray LoadOptions;
|
||||
@ -220,13 +218,13 @@ int BootOptions_tests()
|
||||
if ( LoadOptions.ConcatAll(" "_XS) != "opt1 opt2 opt3"_XS ) return 30;
|
||||
|
||||
XStringArray LoadOptions1 = LoadOptions;
|
||||
LoadOptions1.Remove("opt1"_XS);
|
||||
LoadOptions1.remove("opt1"_XS);
|
||||
if ( LoadOptions1.ConcatAll(" "_XS) != "opt2 opt3"_XS ) return 31;
|
||||
XStringArray LoadOptions2 = LoadOptions;
|
||||
LoadOptions2.Remove("opt2"_XS);
|
||||
LoadOptions2.remove("opt2"_XS);
|
||||
if ( LoadOptions2.ConcatAll(" "_XS) != "opt1 opt3"_XS ) return 32;
|
||||
XStringArray LoadOptions3 = LoadOptions;
|
||||
LoadOptions3.Remove("opt3"_XS);
|
||||
LoadOptions3.remove("opt3"_XS);
|
||||
if ( LoadOptions3.ConcatAll(" "_XS) != "opt1 opt2"_XS ) return 33;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <Platform.h>
|
||||
#include "../cpp_foundation/XStringWArray.h"
|
||||
#include "../cpp_foundation/XStringArray.h"
|
||||
|
||||
int XStringWArray_tests()
|
||||
int XStringArray_tests()
|
||||
{
|
||||
|
||||
#ifdef JIEF_DEBUG
|
||||
@ -10,16 +10,16 @@ int XStringWArray_tests()
|
||||
|
||||
XStringWArray array1;
|
||||
|
||||
if ( !array1.IsNull() ) return 1;
|
||||
if ( !array1.isEmpty() ) return 1;
|
||||
|
||||
array1.Add(L"1"_XSW);
|
||||
if ( array1.IsNull() ) return 2;
|
||||
if ( array1.isEmpty() ) return 2;
|
||||
array1.Add(L"2"_XSW);
|
||||
|
||||
if ( array1[0] != L"1"_XSW ) return 3;
|
||||
if ( array1[1] != L"2"_XSW ) return 4;
|
||||
|
||||
if ( !array1.Contains(L"2"_XSW) ) return 5;
|
||||
if ( !array1.contains(L"2"_XSW) ) return 5;
|
||||
|
||||
// Test == and !=
|
||||
{
|
||||
@ -39,8 +39,16 @@ int XStringWArray_tests()
|
||||
// Split doesn't handle prefix and suffix yet.
|
||||
c = array1.ConcatAll(L", "_XSW);
|
||||
|
||||
XStringWArray array1bis = Split(c);
|
||||
XStringWArray array1bis = Split<XStringWArray>(c);
|
||||
if ( array1 != array1bis ) return 20;
|
||||
XStringWArray array2bis = Split<XStringWArray>(c);
|
||||
if ( array1 != array2bis ) return 20;
|
||||
XStringArray array3bis = Split<XStringArray>(c);
|
||||
if ( array1 != array3bis ) return 20;
|
||||
|
||||
char* c2;// = "a, b, c";
|
||||
XStringArray array4 = Split<XStringArray>(c2, " ");
|
||||
|
||||
}
|
||||
|
||||
XStringWArray array2;
|
2
rEFIt_UEFI/cpp_unit_test/XStringArray_test.h
Normal file
2
rEFIt_UEFI/cpp_unit_test/XStringArray_test.h
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
int XStringArray_tests();
|
@ -1,2 +0,0 @@
|
||||
|
||||
int XStringWArray_tests();
|
@ -163,6 +163,8 @@ struct TestString : public AbstractTestString
|
||||
const CharType* cha;
|
||||
TestString(size_t _size, const CharType* _cha, size_t _utf32_length, const char32_t* _utf32) : AbstractTestString(_size, _utf32_length, _utf32), cha(_cha) {
|
||||
}
|
||||
size_t getSizeInBytes() const { return size*sizeof(CharType); }
|
||||
size_t getSizeInBytesIncludingTerminator() const { return (size+1)*sizeof(CharType); }
|
||||
};
|
||||
|
||||
|
||||
@ -484,98 +486,106 @@ SimpleString testDefaultCtor_()
|
||||
testDefaultCtor_<XStringClass>();
|
||||
|
||||
|
||||
/***************************** takeValueFrom(char type) *****************************/
|
||||
/***************************** Assignement : ctor, strcpy, takeValueFrom *****************************/
|
||||
|
||||
#define CHECK_XSTRING_EQUAL_TESTSTRING(xstr, expectedResult) \
|
||||
/* We don't use XString::operator == to check xstr == xstr because operator == is not tested yet. */ \
|
||||
CHECK_RESULT(xstr.sizeInBytes() == expectedResult.getSizeInBytes(), \
|
||||
ssprintf("xstr.sizeInBytes() == expectedResult.getSizeInBytes() (%zu)", expectedResult.getSizeInBytes()), \
|
||||
ssprintf("xstr.sizeInBytes() != expectedResult.getSizeInBytes() (%zu!=%zu)", xstr.sizeInBytes(), expectedResult.getSizeInBytes()) \
|
||||
); \
|
||||
CHECK_RESULT(memcmp(xstr.s(), expectedResult.cha, expectedResult.getSizeInBytesIncludingTerminator()) == 0, \
|
||||
ssprintf("memcmp(xstr.s(), expectedResult.cha, expectedResult.getSizeInBytesIncludingTerminator()) == 0"), \
|
||||
ssprintf("memcmp(xstr.s(), expectedResult.cha, expectedResult.getSizeInBytesIncludingTerminator()) != 0") \
|
||||
); \
|
||||
|
||||
|
||||
template<class XStringClass, class TestStringSrc, class TestStringExpectedResult>
|
||||
SimpleString testTakeValueFrom_(const TestStringSrc& src, const TestStringExpectedResult& expectedResult)
|
||||
{
|
||||
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::testTakeValueFrom(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<TestStringSrc>::prefix, SimpleString(src.cha).c_str()));
|
||||
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(src.cha);
|
||||
typedef typename XStringClassInfo<XStringClass>::ch_t ch_t;
|
||||
ch_t c; (void)c; // dummy for call utf function
|
||||
|
||||
size_t expectedSize = expectedResult.size*sizeof(expectedResult.cha[0]);
|
||||
CHECK_RESULT(xstr.sizeInBytes() == expectedSize,
|
||||
ssprintf("xstr.sizeInBytes() == expectedSize (%zu)", expectedSize),
|
||||
ssprintf("xstr.sizeInBytes() != expectedSize (%zu!=%zu)", xstr.sizeInBytes(), expectedSize)
|
||||
);
|
||||
CHECK_RESULT(memcmp(xstr.s(), expectedResult.cha, expectedSize) == 0,
|
||||
ssprintf("memcmp(xstr.s(), expectedResult.cha, expectedSize) == 0"),
|
||||
ssprintf("memcmp(xstr.s(), expectedResult.cha, expectedSize) != 0")
|
||||
);
|
||||
// takeValueFrom(native char type)
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(src.cha);
|
||||
|
||||
CHECK_XSTRING_EQUAL_TESTSTRING(xstr, expectedResult);
|
||||
}
|
||||
// strcpy(native char type)
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom("blabla");
|
||||
xstr.strcpy(src.cha);
|
||||
CHECK_XSTRING_EQUAL_TESTSTRING(xstr, expectedResult);
|
||||
}
|
||||
// strcpy one native char
|
||||
{
|
||||
if ( src.utf32_length > 0 )
|
||||
{
|
||||
XStringClass xstr;
|
||||
for ( size_t pos = 0 ; pos < src.utf32_length - 1 ; pos++ )
|
||||
{
|
||||
char32_t char32 = get_char32_from_utf_string_at_pos(src.cha, pos);
|
||||
xstr.takeValueFrom("foobar");
|
||||
xstr.strcpy(char32);
|
||||
//printf("%s\n", SimpleString(xstr.s()).c_str());
|
||||
size_t expectedSize = utf_size_of_utf_string_len(&c, &char32, 1) * sizeof(c);
|
||||
CHECK_RESULT(xstr.sizeInBytes() == expectedSize,
|
||||
ssprintf("xstr.sizeInBytes() == expectedSize (%zu)", expectedSize),
|
||||
ssprintf("xstr.sizeInBytes() != expectedSize (%zu!=%zu)", xstr.sizeInBytes(), expectedSize)
|
||||
);
|
||||
ch_t buf[8];
|
||||
utf_string_from_utf_string_len(buf, sizeof(buf)/sizeof(buf[0]), &char32, 1);
|
||||
size_t expectedSizeIncludingTerminator = expectedSize+sizeof(buf[0]);
|
||||
CHECK_RESULT(memcmp(xstr.s(), buf, expectedSizeIncludingTerminator) == 0, // +1 char
|
||||
ssprintf("memcmp(xstr.s(), buf, expectedSizeIncludingTerminator) == 0"),
|
||||
ssprintf("memcmp(xstr.s(), buf, expectedSizeIncludingTerminator) != 0")
|
||||
);
|
||||
//xstr.takeValueFrom("foobar");
|
||||
//xstr.strcpy(src.cha[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typename XStringClassInfo<TestStringSrc>::xs_t srcXString;
|
||||
srcXString.takeValueFrom(src.cha);
|
||||
|
||||
// takeValueFrom(XString)
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(srcXString);
|
||||
CHECK_XSTRING_EQUAL_TESTSTRING(xstr, expectedResult);
|
||||
}
|
||||
// ctor XString
|
||||
{
|
||||
XStringClass xstr(srcXString);
|
||||
CHECK_XSTRING_EQUAL_TESTSTRING(xstr, expectedResult);
|
||||
}
|
||||
// = XString
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr = srcXString;
|
||||
CHECK_XSTRING_EQUAL_TESTSTRING(xstr, expectedResult);
|
||||
}
|
||||
|
||||
// TODO test ctor with litteral
|
||||
// XStringClass xstr2;
|
||||
// xstr2 = src.cha;
|
||||
// XStringClass xstr;
|
||||
// xstr = src.cha;
|
||||
|
||||
return SimpleString();
|
||||
}
|
||||
|
||||
#define testTakeValueFrom(XStringClass, classEncoding, encoding1) \
|
||||
printf("Test %s::testTakeValueFrom(%s)\n", STRINGIFY(XStringClass), STRINGIFY(encoding1)); \
|
||||
printf("Test %s::testTakeValueFrom, strcpy(%s)\n", STRINGIFY(XStringClass), STRINGIFY(encoding1)); \
|
||||
for ( size_t i = 0 ; i < nbTestStringMultiCoded ; i++ ) { \
|
||||
testTakeValueFrom_<XStringClass>(testStringMultiCodedArray[i].encoding1, testStringMultiCodedArray[i].classEncoding); \
|
||||
} \
|
||||
|
||||
|
||||
/***************************** takeValueFrom(XString), ctor(XString), operator =(XString) *****************************/
|
||||
template<class XStringClass, class TestStringSrc, class TestStringExpectedResult>
|
||||
SimpleString testTakeValueFromXString_(const TestStringSrc& src, const TestStringExpectedResult& expectedResult)
|
||||
{
|
||||
// TODO test ctor with litteral
|
||||
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::testTakeValueFrom(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<TestStringSrc>::prefix, SimpleString(src.cha).c_str()));
|
||||
|
||||
typename XStringClassInfo<TestStringSrc>::xs_t srcXString;
|
||||
srcXString.takeValueFrom(src.cha);
|
||||
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(srcXString);
|
||||
|
||||
size_t expectedSize = expectedResult.size*sizeof(expectedResult.cha[0]);
|
||||
CHECK_RESULT(xstr.sizeInBytes() == expectedSize,
|
||||
ssprintf("xstr.sizeInBytes() == expectedSize (%zu)", expectedSize),
|
||||
ssprintf("xstr.sizeInBytes() != expectedSize (%zu!=%zu)", xstr.sizeInBytes(), expectedSize)
|
||||
);
|
||||
CHECK_RESULT(memcmp(xstr.s(), expectedResult.cha, expectedSize+sizeof(expectedResult.cha[0])) == 0,
|
||||
ssprintf("memcmp(xstr.s(), expectedResult.cha, expectedResult.size) == 0"),
|
||||
ssprintf("memcmp(xstr.s(), expectedResult.cha, expectedResult.size) != 0")
|
||||
);
|
||||
{
|
||||
XStringClass xstr2(srcXString);
|
||||
// We don't use operator == to check xstr == xstr2 because operator == is not tested yet.
|
||||
CHECK_RESULT(xstr2.sizeInBytes() == xstr.sizeInBytes(),
|
||||
ssprintf("xstr2.sizeInBytes() == xstr.sizeInBytes() (%zu)", xstr.sizeInBytes()),
|
||||
ssprintf("xstr2.sizeInBytes() != xstr.sizeInBytes() (%zu!=%zu)", xstr2.sizeInBytes(), xstr.sizeInBytes())
|
||||
);
|
||||
CHECK_RESULT(memcmp(xstr2.s(), xstr.s(), xstr.sizeInBytes()+sizeof(xstr.s()[0])) == 0,
|
||||
ssprintf("memcmp(xstr2.s(), xstr.s(), xstr.sizeInBytes()) == 0"),
|
||||
ssprintf("memcmp(xstr2.s(), xstr.s(), xstr.sizeInBytes()) != 0")
|
||||
);
|
||||
}
|
||||
{
|
||||
XStringClass xstr2;
|
||||
xstr2 = srcXString;
|
||||
// We don't use operator == to check xstr == xstr2 because operator == is not tested yet.
|
||||
CHECK_RESULT(xstr2.sizeInBytes() == xstr.sizeInBytes(),
|
||||
ssprintf("xstr2.sizeInBytes() == xstr.sizeInBytes() (%zu)", xstr.sizeInBytes()),
|
||||
ssprintf("xstr2.sizeInBytes() != xstr.sizeInBytes() (%zu!=%zu)", xstr2.sizeInBytes(), xstr.sizeInBytes())
|
||||
);
|
||||
CHECK_RESULT(memcmp(xstr2.s(), xstr.s(), xstr.sizeInBytes()+sizeof(xstr.s()[0])) == 0,
|
||||
ssprintf("memcmp(xstr2.s(), xstr.s(), xstr.sizeInBytes()) == 0"),
|
||||
ssprintf("memcmp(xstr2.s(), xstr.s(), xstr.sizeInBytes()) != 0")
|
||||
);
|
||||
}
|
||||
return SimpleString();
|
||||
}
|
||||
|
||||
#define testTakeValueFromXString(XStringClass, classEncoding, encoding1) \
|
||||
printf("Test %s::testTakeValueFromXString(%s)\n", STRINGIFY(XStringClass), STRINGIFY(encoding1)); \
|
||||
for ( size_t i = 0 ; i < nbTestStringMultiCoded ; i++ ) { \
|
||||
testTakeValueFromXString_<XStringClass>(testStringMultiCodedArray[i].encoding1, testStringMultiCodedArray[i].classEncoding); \
|
||||
} \
|
||||
|
||||
|
||||
|
||||
/***************************** Default isEmpty, SetEmpty *****************************/
|
||||
template<class XStringClass>
|
||||
@ -663,36 +673,6 @@ SimpleString testdataSized_()
|
||||
|
||||
|
||||
|
||||
/***************************** strcpy *****************************/
|
||||
template<class XStringClass, class TestStringSameAsClass, class TestStringSrc>
|
||||
SimpleString teststrcpy_(const TestStringSameAsClass& encodedSameAsClass, const TestStringSrc& src)
|
||||
{
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::strcpy(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<TestStringSrc>::prefix, SimpleString(src.cha).c_str()));
|
||||
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom("foobar");
|
||||
xstr.strcpy(src.cha);
|
||||
|
||||
size_t expectedSize = encodedSameAsClass.size*sizeof(encodedSameAsClass.cha[0]);
|
||||
CHECK_RESULT(xstr.sizeInBytes() == expectedSize,
|
||||
ssprintf("xstr.sizeInBytes() == dst.size (%zu)", expectedSize),
|
||||
ssprintf("xstr.sizeInBytes() != dst.size (%zu!=%zu)", xstr.sizeInBytes(), expectedSize)
|
||||
);
|
||||
CHECK_RESULT(memcmp(xstr.s(), encodedSameAsClass.cha, expectedSize+sizeof(encodedSameAsClass.cha[0])) == 0,
|
||||
ssprintf("memcmp(xstr.s(), dst.cha, dst.size) == 0"),
|
||||
ssprintf("memcmp(xstr.s(), dst.cha, dst.size) != 0")
|
||||
);
|
||||
return SimpleString();
|
||||
}
|
||||
|
||||
#define teststrcpy(XStringClass, classEncoding, encoding1) \
|
||||
printf("Test %s::teststrcpy(%s)\n", STRINGIFY(XStringClass), STRINGIFY(encoding1)); \
|
||||
for ( size_t i = 0 ; i < nbTestStringMultiCoded ; i++ ) { \
|
||||
teststrcpy_<XStringClass>(testStringMultiCodedArray[i].classEncoding, testStringMultiCodedArray[i].encoding1); \
|
||||
} \
|
||||
|
||||
|
||||
|
||||
/***************************** strncpy *****************************/
|
||||
template<class XStringClass, class TestStringSameAsClass, class TestStringSrc>
|
||||
SimpleString teststrncpy_(const TestStringSameAsClass& encodedSameAsClass, const TestStringSrc& src)
|
||||
@ -705,13 +685,15 @@ SimpleString teststrncpy_(const TestStringSameAsClass& encodedSameAsClass, const
|
||||
xstr.takeValueFrom("foobar");
|
||||
xstr.strncpy(src.cha, i);
|
||||
|
||||
CHECK_RESULT((length_of_utf_string(encodedSameAsClass.cha) >= i && xstr.length() == i) || (xstr.length() == length_of_utf_string(encodedSameAsClass.cha)),
|
||||
ssprintf("xstr.sizeInBytes() == dst.size (%zu)", xstr.sizeInBytes()),
|
||||
ssprintf("xstr.sizeInBytes() != dst.size (%zu!=%zu)", xstr.sizeInBytes(), encodedSameAsClass.size)
|
||||
size_t expectedLength = length_of_utf_string(encodedSameAsClass.cha);
|
||||
if ( expectedLength > i ) expectedLength = i;
|
||||
CHECK_RESULT(xstr.length() == expectedLength,
|
||||
ssprintf("xstr.length() == expectedLength (%zu)", expectedLength),
|
||||
ssprintf("xstr.length() != expectedLength (%zu!=%zu)", xstr.length(), expectedLength)
|
||||
);
|
||||
CHECK_RESULT(memcmp(xstr.s(), encodedSameAsClass.cha, xstr.sizeInBytes()) == 0,
|
||||
ssprintf("memcmp(xstr.s(), dst.cha, dst.size) == 0"),
|
||||
ssprintf("memcmp(xstr.s(), dst.cha, dst.size) != 0")
|
||||
CHECK_RESULT(memcmp(xstr.s(), encodedSameAsClass.cha, xstr.sizeInBytes()) == 0, // cannot include terminator as xstr is a substring of encodedSameAsClass. But length() test shows that xstr is really a substring.
|
||||
ssprintf("memcmp(xstr.s(), encodedSameAsClass.cha, xstr.sizeInBytes()) == 0"),
|
||||
ssprintf("memcmp(xstr.s(), encodedSameAsClass.cha, xstr.sizeInBytes()) != 0")
|
||||
);
|
||||
}
|
||||
return SimpleString();
|
||||
@ -747,10 +729,10 @@ static void teststrcatCheckResult(size_t expectedLength, size_t expectedSize, ch
|
||||
);
|
||||
}
|
||||
|
||||
template<class XStringClass, class InitialValue, class ValueToCat>
|
||||
SimpleString teststrcat_(const InitialValue& initialValue, const ValueToCat& valueToCat)
|
||||
template<class XStringClass, class InitialValue, typename TestStringCharType>
|
||||
SimpleString teststrcat_(const InitialValue& initialValue, const TestString<TestStringCharType>& valueToCat)
|
||||
{
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::strcpy(%s\"%s\") strcat(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str(), XStringClassInfo<ValueToCat>::prefix, SimpleString(valueToCat.cha).c_str()));
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::strcpy(%s\"%s\") strcat(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str(), XStringClassInfo<TestStringCharType>::prefix, SimpleString(valueToCat.cha).c_str()));
|
||||
|
||||
typedef typename XStringClassInfo<XStringClass>::ch_t ch_t;
|
||||
ch_t c; // dummy for call utf function
|
||||
@ -761,14 +743,31 @@ SimpleString teststrcat_(const InitialValue& initialValue, const ValueToCat& val
|
||||
utf_string_from_utf_string(expectedString, expectedSize*sizeof(ch_t) + 1, initialValue.cha);
|
||||
utf_string_from_utf_string(expectedString + size_of_utf_string(expectedString), expectedSize*sizeof(ch_t) + 1 - size_of_utf_string(expectedString), valueToCat.cha);
|
||||
|
||||
// strcat native type
|
||||
// strcat(native char)
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(initialValue.cha);
|
||||
|
||||
for ( size_t i = 0 ; i < valueToCat.utf32_length ; i++) xstr.strcat(valueToCat.utf32[i]);
|
||||
teststrcatCheckResult(expectedLength, expectedSize, expectedString, xstr);
|
||||
}
|
||||
// += native char
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(initialValue.cha);
|
||||
|
||||
for ( size_t i = 0 ; i < valueToCat.utf32_length ; i++) xstr += valueToCat.utf32[i];
|
||||
teststrcatCheckResult(expectedLength, expectedSize, expectedString, xstr);
|
||||
}
|
||||
|
||||
// strcat(native char*)
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(initialValue.cha);
|
||||
xstr.strcat(valueToCat.cha);
|
||||
teststrcatCheckResult(expectedLength, expectedSize, expectedString, xstr);
|
||||
}
|
||||
// += native type
|
||||
// += native char*
|
||||
{
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(initialValue.cha);
|
||||
@ -777,14 +776,14 @@ SimpleString teststrcat_(const InitialValue& initialValue, const ValueToCat& val
|
||||
}
|
||||
// strcat XString
|
||||
{
|
||||
typename XStringClassInfo<ValueToCat>::xs_t valueToCatXString;
|
||||
typename XStringClassInfo<TestStringCharType>::xs_t valueToCatXString;
|
||||
valueToCatXString.takeValueFrom(valueToCat.cha);
|
||||
XStringClass xstr;
|
||||
xstr.takeValueFrom(initialValue.cha);
|
||||
xstr += valueToCatXString;
|
||||
teststrcatCheckResult(expectedLength, expectedSize, expectedString, xstr);
|
||||
}
|
||||
// XString + native type
|
||||
// XString + native char*
|
||||
{
|
||||
XStringClass xinitialValue;
|
||||
xinitialValue.takeValueFrom(initialValue.cha);
|
||||
@ -796,15 +795,15 @@ SimpleString teststrcat_(const InitialValue& initialValue, const ValueToCat& val
|
||||
{
|
||||
XStringClass xinitialValue;
|
||||
xinitialValue.takeValueFrom(initialValue.cha);
|
||||
typename XStringClassInfo<ValueToCat>::xs_t valueToCatXString;
|
||||
typename XStringClassInfo<TestStringCharType>::xs_t valueToCatXString;
|
||||
valueToCatXString.takeValueFrom(valueToCat.cha);
|
||||
XStringClass xstr;
|
||||
xstr = xinitialValue + valueToCatXString;
|
||||
teststrcatCheckResult(expectedLength, expectedSize, expectedString, xstr);
|
||||
}
|
||||
// native type + XString
|
||||
// native char* + XString
|
||||
{
|
||||
typename XStringClassInfo<ValueToCat>::xs_t valueToCatXString;
|
||||
typename XStringClassInfo<TestStringCharType>::xs_t valueToCatXString;
|
||||
valueToCatXString.takeValueFrom(valueToCat.cha);
|
||||
XStringClass xstr;
|
||||
xstr = initialValue.cha + valueToCatXString;
|
||||
@ -888,7 +887,7 @@ SimpleString teststrncat_(const InitialValue& initialValue, const ValueToCat& va
|
||||
template<class XStringClass, class InitialValue>
|
||||
SimpleString testSubString_(const InitialValue& initialValue)
|
||||
{
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::subString(%s\"%s\"", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::subString(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
|
||||
typedef typename XStringClassInfo<XStringClass>::ch_t ch_t;
|
||||
ch_t c; // dummy for call utf function
|
||||
@ -1322,7 +1321,7 @@ SimpleString testindexOf_(const InitialValue& initialValue)
|
||||
template<class XStringClass, class InitialValue>
|
||||
SimpleString testlastChar_(const InitialValue& initialValue)
|
||||
{
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::lastChar(%s\"%s\"", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::lastChar(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
|
||||
// typedef typename XStringClassInfo<XStringClass>::ch_t ch_t;
|
||||
// ch_t c; // dummy for call utf function
|
||||
@ -1355,7 +1354,7 @@ SimpleString testlastChar_(const InitialValue& initialValue)
|
||||
template<class XStringClass, class InitialValue, class ExpectedValue>
|
||||
SimpleString testtrim_(const InitialValue& initialValue, const ExpectedValue& expectedValue)
|
||||
{
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::trim(%s\"%s\"", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::trim(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
|
||||
// typedef typename XStringClassInfo<XStringClass>::ch_t ch_t;
|
||||
// ch_t c; // dummy for call utf function
|
||||
@ -1385,6 +1384,58 @@ SimpleString testtrim_(const InitialValue& initialValue, const ExpectedValue& ex
|
||||
} \
|
||||
|
||||
|
||||
/***************************** startWith *****************************/
|
||||
template<class XStringClass, class InitialValue>
|
||||
SimpleString teststartWith_(const InitialValue& initialValue)
|
||||
{
|
||||
TEST_TITLE(displayOnlyFailed, ssprintf("Test %s::startWith(%s\"%s\")", XStringClassInfo<XStringClass>::xStringClassName, XStringClassInfo<InitialValue>::prefix, SimpleString(initialValue.cha).c_str()));
|
||||
|
||||
// typedef typename XStringClassInfo<XStringClass>::ch_t ch_t;
|
||||
// ch_t c; // dummy for call utf function
|
||||
|
||||
XStringClass initialString;
|
||||
initialString.takeValueFrom(initialValue.cha);
|
||||
|
||||
char32_t expectedChar = 0;
|
||||
if ( initialValue.utf32_length > 0) expectedChar = initialValue.utf32[initialValue.utf32_length-1];
|
||||
|
||||
for ( size_t count = 0 ; count < initialValue.utf32_length+3 ; count+=1 )
|
||||
{
|
||||
XStringClass subStr = initialString.subString(0, count);
|
||||
|
||||
bool expectedResult = true;
|
||||
if ( subStr.length() > 0 && count >= initialValue.utf32_length ) expectedResult = false;
|
||||
|
||||
CHECK_RESULT(initialString.startWith(subStr) == expectedResult,
|
||||
ssprintf("\"%s\".startWith(\"%s\") == %d", SimpleString(initialString.s()).c_str(), SimpleString(subStr.s()).c_str(), expectedResult),
|
||||
ssprintf("\"%s\".startWith(\"%s\") != %d", SimpleString(initialString.s()).c_str(), SimpleString(subStr.s()).c_str(), expectedResult)
|
||||
);
|
||||
//initialString.startWith(subStr);
|
||||
|
||||
subStr = initialString.subString(0, count-1) + ((char32_t)(initialValue.utf32[count-1]+1));
|
||||
expectedResult = false;
|
||||
CHECK_RESULT(initialString.startWith(subStr) == expectedResult,
|
||||
ssprintf("\"%s\".startWith(\"%s\") == %d", SimpleString(initialString.s()).c_str(), SimpleString(subStr.s()).c_str(), expectedResult),
|
||||
ssprintf("\"%s\".startWith(\"%s\") != %d", SimpleString(initialString.s()).c_str(), SimpleString(subStr.s()).c_str(), expectedResult)
|
||||
);
|
||||
//subStr = initialString.subString(0, count-1);
|
||||
//subStr = subStr + ((char32_t)(initialValue.utf32[count-1]+1));
|
||||
//initialString.startWith(subStr);
|
||||
|
||||
}
|
||||
//str.takeValueFrom(initialValue.cha);
|
||||
//str.startWith();
|
||||
|
||||
return SimpleString();
|
||||
}
|
||||
|
||||
#define teststartWith(XStringClass, classEncoding) \
|
||||
printf("Test %s::teststartWith\n", STRINGIFY(XStringClass)); \
|
||||
for ( size_t i = 0 ; i < nbTestStringMultiCoded ; i++ ) { \
|
||||
teststartWith_<XStringClass>(testStringMultiCodedArray[i].classEncoding); \
|
||||
} \
|
||||
|
||||
|
||||
|
||||
/***************************** *****************************/
|
||||
#undef realloc
|
||||
@ -1482,14 +1533,12 @@ size_t utf32_size = sizeof(U"ギ") - 1; (void)utf32_size; // this char is 6 b
|
||||
|
||||
// TEST_ALL_CLASSES(testDefaultCtor, __TEST0);
|
||||
// TEST_ALL_CLASSES(testEmpty, __TEST0);
|
||||
// TEST_ALL_CLASSES(testTakeValueFrom, TEST_ALL_UTF);
|
||||
// TEST_ALL_CLASSES(testTakeValueFromXString, TEST_ALL_UTF);
|
||||
TEST_ALL_CLASSES(testTakeValueFrom, TEST_ALL_UTF);
|
||||
// TEST_ALL_CLASSES(testchar32At, TEST_ALL_INTEGRAL);
|
||||
// TEST_ALL_CLASSES(testdataSized, TEST_ALL_INTEGRAL);
|
||||
//
|
||||
// TEST_ALL_CLASSES(teststrcpy, TEST_ALL_UTF);
|
||||
// TEST_ALL_CLASSES(teststrncpy, TEST_ALL_UTF); // 26944 tests
|
||||
// TEST_ALL_CLASSES(teststrcat, TEST_ALL_UTF_ALL_UTF);
|
||||
TEST_ALL_CLASSES(teststrncpy, TEST_ALL_UTF); // 26944 tests
|
||||
TEST_ALL_CLASSES(teststrcat, TEST_ALL_UTF_ALL_UTF);
|
||||
// TEST_ALL_CLASSES(teststrncat, TEST_ALL_UTF_ALL_UTF); // 2101632 tests
|
||||
//
|
||||
// TEST_ALL_CLASSES(testSubString, __TEST0);
|
||||
@ -1498,6 +1547,7 @@ size_t utf32_size = sizeof(U"ギ") - 1; (void)utf32_size; // this char is 6 b
|
||||
//
|
||||
// TEST_ALL_CLASSES(testlastChar, __TEST0);
|
||||
TEST_ALL_CLASSES(testtrim, __TEST0);
|
||||
TEST_ALL_CLASSES(teststartWith, __TEST0);
|
||||
|
||||
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "XArray_tests.h"
|
||||
#include "XObjArray_tests.h"
|
||||
#include "XStringWArray_test.h"
|
||||
#include "XStringArray_test.h"
|
||||
#include "XString_test.h"
|
||||
#include "strcmp_test.h"
|
||||
#include "strncmp_test.h"
|
||||
@ -91,7 +91,7 @@ bool all_tests()
|
||||
printf("XObjArray_tests() failed at test %d\n", ret);
|
||||
all_ok = false;
|
||||
}
|
||||
ret = XStringWArray_tests();
|
||||
ret = XStringArray_tests();
|
||||
if ( ret != 0 ) {
|
||||
printf("XStringWArray_tests() failed at test %d\n", ret);
|
||||
all_ok = false;
|
||||
|
@ -271,7 +271,7 @@ STATIC void CreateInfoLines(IN CONST XStringW& Message, OUT XStringWArray* Infor
|
||||
if (Message.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Information->Empty();
|
||||
Information->setEmpty();
|
||||
//TODO will fill later
|
||||
}
|
||||
|
||||
@ -328,7 +328,7 @@ VOID AlertMessage(IN XStringW& Title, IN CONST XStringW& Message)
|
||||
CreateInfoLines(Message, &AlertMessageMenu.InfoLines);
|
||||
AlertMessageMenu.Title = Title;
|
||||
AlertMessageMenu.RunMenu(NULL);
|
||||
AlertMessageMenu.InfoLines.Empty();
|
||||
AlertMessageMenu.InfoLines.setEmpty();
|
||||
}
|
||||
|
||||
#define TAG_YES 1
|
||||
@ -357,7 +357,7 @@ BOOLEAN YesNoMessage(IN XStringW& Title, IN CONST XStringW& Message)
|
||||
MenuExit = MENU_EXIT_ENTER;
|
||||
}
|
||||
} while (MenuExit != MENU_EXIT_ENTER);
|
||||
YesNoMessageMenu.InfoLines.Empty();
|
||||
YesNoMessageMenu.InfoLines.setEmpty();
|
||||
return Result;
|
||||
}
|
||||
// Ask user for file path from directory menu
|
||||
|
@ -474,7 +474,7 @@ VOID REFIT_MENU_SCREEN::FreeMenu()
|
||||
}
|
||||
Entries.Empty();
|
||||
}
|
||||
InfoLines.Empty();
|
||||
InfoLines.setEmpty();
|
||||
}
|
||||
|
||||
INTN REFIT_MENU_SCREEN::FindMenuShortcutEntry(IN CHAR16 Shortcut)
|
||||
@ -1422,15 +1422,15 @@ VOID REFIT_MENU_SCREEN::DrawBCSText(IN CONST CHAR16 *Text, IN INTN XPos, IN INTN
|
||||
|
||||
XStringW BCSTextX;
|
||||
if (StrLen(Text) <= MaxTextLen) { // if the text exceeds the given limit
|
||||
BCSTextX.StrnCpy(Text, MaxTextLen);
|
||||
BCSTextX.strncpy(Text, MaxTextLen);
|
||||
} else {
|
||||
BCSTextX.StrnCpy(Text, MaxTextLen - 2); // EllipsisLen=2
|
||||
BCSTextX.strncpy(Text, MaxTextLen - 2); // EllipsisLen=2
|
||||
BCSTextX += L"..";
|
||||
}
|
||||
DrawTextXY(BCSTextX, XPos, YPos, XAlign);
|
||||
}
|
||||
|
||||
VOID REFIT_MENU_SCREEN::DrawMenuText(IN XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN UINTN Cursor)
|
||||
VOID REFIT_MENU_SCREEN::DrawMenuText(IN const XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN UINTN Cursor)
|
||||
{
|
||||
XImage TextBufferX(UGAWidth-XPos, ThemeX.TextHeight);
|
||||
XImage SelectionBar(UGAWidth-XPos, ThemeX.TextHeight);
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
#include "../cpp_foundation/XObjArray.h"
|
||||
#include "../cpp_foundation/XString.h"
|
||||
#include "../cpp_foundation/XStringWArray.h"
|
||||
#include "../cpp_foundation/XStringArray.h"
|
||||
#include "../libeg/XPointer.h"
|
||||
#include "../libeg/XCinema.h"
|
||||
#include "menu_items/menu_items.h"
|
||||
@ -194,7 +194,7 @@ public:
|
||||
INTN DrawTextXY(IN CONST XStringW& Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign);
|
||||
void EraseTextXY();
|
||||
VOID DrawTextCorner(UINTN TextC, UINT8 Align);
|
||||
VOID DrawMenuText(IN XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN UINTN Cursor);
|
||||
VOID DrawMenuText(IN const XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN UINTN Cursor);
|
||||
VOID DrawBCSText(IN CONST CHAR16 *Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign);
|
||||
VOID CountItems();
|
||||
VOID InitAnime();
|
||||
|
@ -41,7 +41,7 @@
|
||||
#ifdef __cplusplus
|
||||
#include "../../cpp_foundation/XObjArray.h"
|
||||
#include "../../cpp_foundation/XString.h"
|
||||
#include "../../cpp_foundation/XStringWArray.h"
|
||||
#include "../../cpp_foundation/XStringArray.h"
|
||||
#include "../../libeg/XPointer.h"
|
||||
#endif
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
#include "../../refit/lib.h"
|
||||
#ifdef __cplusplus
|
||||
#include "../../cpp_foundation/XObjArray.h"
|
||||
#include "../../cpp_foundation/XStringWArray.h"
|
||||
#include "../../cpp_foundation/XStringArray.h"
|
||||
#include "../../cpp_foundation/XString.h"
|
||||
#include "../../libeg/XPointer.h"
|
||||
#endif
|
||||
|
@ -247,8 +247,7 @@
|
||||
cpp_foundation/XString.h
|
||||
cpp_foundation/XStringArray.cpp
|
||||
cpp_foundation/XStringArray.h
|
||||
cpp_foundation/XStringWArray.cpp
|
||||
cpp_foundation/XStringWArray.h
|
||||
cpp_foundation/XStringArray.cpp
|
||||
# cpp_foundation/XUINTN.cpp
|
||||
# cpp_foundation/XUINTN.h
|
||||
cpp_unit_test/all_tests.h
|
||||
@ -274,8 +273,8 @@
|
||||
cpp_unit_test/XObjArray_tests.h
|
||||
cpp_unit_test/XString_test.cpp
|
||||
cpp_unit_test/XString_test.h
|
||||
cpp_unit_test/XStringWArray_test.cpp
|
||||
cpp_unit_test/XStringWArray_test.h
|
||||
cpp_unit_test/XStringArray_test.cpp
|
||||
cpp_unit_test/XStringArray_test.h
|
||||
# cpp_unit_test/XUINTN_test.cpp
|
||||
# cpp_unit_test/XUINTN_test.h
|
||||
|
||||
|
@ -61,7 +61,6 @@
|
||||
#ifdef __cplusplus
|
||||
#include "../cpp_foundation/XObjArray.h"
|
||||
#include "../cpp_foundation/XString.h"
|
||||
#include "../cpp_foundation/XStringWArray.h"
|
||||
#include "../libeg/XTheme.h"
|
||||
extern XTheme ThemeX; //global variable defined in lib.cpp
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user