Git Product home page Git Product logo

zstring's People

Contributors

871041532 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zstring's Issues

大佬,打包Android IL2CPP会有报错

运行环境:Unity2018.3.9f1
Scripting Runtime Version:.NET 4.x Equivalent

部分Log:

Failed running C:\Program Files\Unity2018.3.9f1\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile="unityaot" --compile-cpp --libil2cpp-static --platform="Android" --architecture="ARM64" --configuration="Release" --outputpath="F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\assets\bin\Data\Native\arm64-v8a\libil2cpp.so" --cachedirectory="F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Assets..\Library\il2cpp_android_arm64-v8a/il2cpp_cache" --additional-include-directories="C:\Program Files\Unity2018.3.9f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include" --additional-include-directories="C:\Program Files\Unity2018.3.9f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include" --tool-chain-path="E:/Workspace/Android/android-ndk-r16b" --map-file-parser="C:\Program Files\Unity2018.3.9f1\Editor\Data\Tools\MapFileParser\MapFileParser.exe" --directory="F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\assets\bin\Data\Managed" --generatedcppdir="F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput"

stdout:
Building libil2cpp.so with AndroidToolChain
Output directory: F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\assets\bin\Data\Native\arm64-v8a
Cache directory: F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Library\il2cpp_android_arm64-v8a\il2cpp_cache
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31352:5: error: use of undeclared identifier 'Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA'
*(Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA )L_4 = ((Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA *)L_5);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31352:57: error: expected expression
*(Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA )L_4 = ((Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA *)L_5);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31389:5: error: use of undeclared identifier 'Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C'
*(Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C )L_13 = ((Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C *)L_14);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31389:57: error: expected expression
*(Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C )L_13 = ((Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C *)L_14);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31416:5: error: use of undeclared identifier 'Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE'
*(Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE )L_20 = ((Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE *)L_21);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31416:57: error: expected expression
*(Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE )L_20 = ((Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE *)L_21);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31443:5: error: use of undeclared identifier 'Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301'
*(Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 )L_27 = ((Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 *)L_28);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31443:57: error: expected expression
*(Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 )L_27 = ((Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 *)L_28);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31470:5: error: use of undeclared identifier 'Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C'
*(Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C )L_34 = ((Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C *)L_35);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31470:56: error: expected expression
*(Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C )L_34 = ((Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C *)L_35);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31497:5: error: use of undeclared identifier 'Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69'
*(Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 )L_41 = ((Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 *)L_42);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31497:56: error: expected expression
*(Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 )L_41 = ((Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 *)L_42);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31524:5: error: use of undeclared identifier 'Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4'
*(Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4 )L_48 = ((Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4 *)L_49);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31524:56: error: expected expression
*(Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4 )L_48 = ((Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4 *)L_49);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31551:5: error: use of undeclared identifier 'Byte64_t94D3F74EF7C4D4E51931CD696F4678EC94FDFE16'
*(Byte64_t94D3F74EF7C4D4E51931CD696F4678EC94FDFE16 )L_55 = ((Byte64_t94D3F74EF7C4D4E51931CD696F4678EC94FDFE16 *)L_56);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31551:55: error: expected expression
*(Byte64_t94D3F74EF7C4D4E51931CD696F4678EC94FDFE16 )L_55 = ((Byte64_t94D3F74EF7C4D4E51931CD696F4678EC94FDFE16 *)L_56);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31578:5: error: use of undeclared identifier 'Byte32_t75FF90FC74499EFA15159627ADBA12242AC192D0'
*(Byte32_t75FF90FC74499EFA15159627ADBA12242AC192D0 )L_62 = ((Byte32_t75FF90FC74499EFA15159627ADBA12242AC192D0 *)L_63);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31578:55: error: expected expression
*(Byte32_t75FF90FC74499EFA15159627ADBA12242AC192D0 )L_62 = ((Byte32_t75FF90FC74499EFA15159627ADBA12242AC192D0 *)L_63);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31605:5: error: use of undeclared identifier 'Byte16_t8C0FAC8165912C33164D9719DA6BFE12D06DFDEF'
*(Byte16_t8C0FAC8165912C33164D9719DA6BFE12D06DFDEF )L_69 = ((Byte16_t8C0FAC8165912C33164D9719DA6BFE12D06DFDEF *)L_70);
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

Invocation was: Executable: "E:\Workspace\Android\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++"
Arguments: -DNET_4_0 -DUNITY_AOT -DGC_NOT_DLL -DRUNTIME_IL2CPP -DLINUX -DANDROID -DPLATFORM_ANDROID -D__linux__ -D__STDC_FORMAT_MACROS -DTARGET_ARM64 -I"C:\Program Files\Unity2018.3.9f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\bdwgc\include" -I"C:\Program Files\Unity2018.3.9f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\libil2cpp\include" -I"C:\Program Files\Unity2018.3.9f1\Editor\Data\il2cpp\libil2cpp" -I"C:\Program Files\Unity2018.3.9f1\Editor\Data\il2cpp\external\boehmgc\include" -I"F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput" -I"." -I"E:\Workspace\Android\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\include" -I"E:\Workspace\Android\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\include\backward" -I"E:\Workspace\Android\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\arm64-v8a\include" -c -g -DNDEBUG -funwind-tables -fno-limit-debug-info -fdata-sections -ffunction-sections -Wa,--noexecstack -fno-rtti -std=c++98 -fno-strict-aliasing -fvisibility=hidden -fvisibility-inlines-hidden -fno-strict-overflow -fPIC -Os --sysroot "E:\Workspace\Android\android-ndk-r16b\sysroot" -gcc-toolchain "E:\Workspace\Android\android-ndk-r16b\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64" -target aarch64-none-linux-android -isystem "E:\Workspace\Android\android-ndk-r16b\sysroot\usr\include\aarch64-linux-android" -D__ANDROID_API__=21 -march=armv8-a -Wno-unused-value "F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp" -o "F:/My/Unity/Project/TrustFramework/client/Unity/TrustFramework/Library/il2cpp_android_arm64-v8a/il2cpp_cache/1084D6449E9D3B1F950C3DF201B25368.o"

�� Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector)
�� Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
�� il2cpp.Program.DoRun(String[] args)
�� il2cpp.Program.Run(String[] args)
�� il2cpp.Program.Main(String[] args)
stderr:

δ��������쳣: Unity.IL2CPP.Building.BuilderFailedException: F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31352:5: error: use of undeclared identifier 'Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA'
*(Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA )L_4 = ((Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA *)L_5);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31352:57: error: expected expression
*(Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA )L_4 = ((Byte8192_t859D083D49C0C1A52B1796E8E2EFFA0BF9A466BA *)L_5);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31389:5: error: use of undeclared identifier 'Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C'
*(Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C )L_13 = ((Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C *)L_14);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31389:57: error: expected expression
*(Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C )L_13 = ((Byte4096_tBD6CE6ABF553314AC5B27C97D2F9692C61365E5C *)L_14);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31416:5: error: use of undeclared identifier 'Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE'
*(Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE )L_20 = ((Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE *)L_21);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31416:57: error: expected expression
*(Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE )L_20 = ((Byte2048_t3BCFE5D5DF98ECC0B13477DFC6128A0B6C839ABE *)L_21);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31443:5: error: use of undeclared identifier 'Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301'
*(Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 )L_27 = ((Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 *)L_28);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31443:57: error: expected expression
*(Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 )L_27 = ((Byte1024_t0BBBB4EC3D1A9026D36FE8A837171263B47F8301 *)L_28);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31470:5: error: use of undeclared identifier 'Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C'
*(Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C )L_34 = ((Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C *)L_35);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31470:56: error: expected expression
*(Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C )L_34 = ((Byte512_t4F4640E213B59685AD82B74250D784210BC5B99C *)L_35);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31497:5: error: use of undeclared identifier 'Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69'
*(Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 )L_41 = ((Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 *)L_42);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31497:56: error: expected expression
*(Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 )L_41 = ((Byte256_t1348DFC1B1E3AE428A9E58A8E5637B8EA3782C69 *)L_42);
^
F:\My\Unity\Project\TrustFramework\client\Unity\TrustFramework\Temp\StagingArea\Il2Cpp\il2cppOutput\Bulk_Assembly-CSharp_5.cpp:31524:5: error: use of undeclared identifier 'Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4'
*(Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4 )L_48 = ((Byte128_t47693D60AA2F2BD06AB8D0A40E0230876B91E9E4 *)L_49);
^
F:\My\Unity

Unity 设置两个文本 不同字符串, 有可能设置错误

Unity 设置两个文本 不同字符串, 有可能设置错误:
第一个文本字符串设置“abc” 第二个文本设置“123” (每次设置都在一个block 且 设置完都改变颜色以重置网格显示)
打印时,两个都输出正确的值,
但是会出现 第二个文本显示了"abc"的错误,第二个文本在组件上显示第一个文本的字符串"abc"
即设置给第一个文本的字符串"abc",同时赋值给了第一个文本和第二个文本,感觉像是第二个文本的字符串被引用住了

请教get(int length)为何要在length<=0时抛异常,及异常内容

//获取特定长度zstring private static zstring get(int length) { if (g_current_block == null || length <= 0) throw new InvalidOperationException("zstring 操作必须在一个zstring_block块中。");
如代码所示,在获取指定长度的zstring的get方法内,当length<=0时则抛出内容为“zstring 操作必须在一个zstring_block块中。”的异常,这里有两点不是太理解:一是空字符串为何要直接抛异常,二是异常的内容为何会和Block共用

internal_format在处理空字符串时会抛出IndexOutOfRangeException异常

rt,当Format传空字符串作为参数时,会导致抛出越界异常。看上去是下面ptr_result[i++] = arg[k++]的部分,由于arg.Length为0,因此只要进到这里就会由于调用arg[k++]导致异常。
看起来在处理字符串之前先针对arg.Length为0的情况做个处理就可以了。

` for (int i = 0, j = 0, x = 0; ; x++) // x < num_args
{
brace_idx = internal_index_of(input, '{', brace_idx + 3);
if (brace_idx == -1)
{
break;
}
next_input_idx = brace_idx;
int arg_idx = input[brace_idx + 1] - '0';
string arg = g_format_args[arg_idx]._value;
if (brace_idx == -1)
throw new InvalidOperationException("没有发现大括号{ for argument " + arg);
if (brace_idx + 2 >= input.Length || input[brace_idx + 2] != '}')
throw new InvalidOperationException("没有发现大括号} for argument " + arg);

            fixed (char* ptr_input = input)
            {
                fixed (char* ptr_result = res_value)
                {
                    for (int k = 0; i < new_len;)
                    {
                        if (j < brace_idx)
                        {
                            ptr_result[i++] = ptr_input[j++];
                            ++next_output_idx;
                        }
                        else
                        {
                            ptr_result[i++] = arg[k++];  // throw exception here if arg.Length == 0
                            ++next_output_idx;
                            if (k == arg.Length)
                            {
                                j += 3;
                                break;
                            }
                        }
                    }
                }
            }
        }`

__intern 没考虑hasecode碰撞

` private static string __intern(string value)
{

        int hash = value.GetHashCode();
        if (g_intern_table.ContainsKey(hash))
        {
            return g_intern_table[hash];
        }
        else
        {
            string interned = new string(NEW_ALLOC_CHAR, value.Length);
            memcpy(interned, value);
            g_intern_table.Add(hash, interned);
            return interned;
        }
    }

`

建议设计符合Unity

using(zstring.Block()){ ... }并不适合游戏结构,建议以每帧为一个block进行回收再利用,否则UGUI或者TextMeshPro会造成文字显示不正确

internal_index_of 匹配错误

int found = 0; 位置是不是有问题 放在for 循环里面

//获取value在input中自start起始下标

      private unsafe static int internal_index_of(string input, string value, int start, int count)
      {
          int input_len = input.Length;

          if (start < 0 || start >= input_len)
              throw new ArgumentOutOfRangeException("start");

          if (count < 0 || start + count > input_len)
              throw new ArgumentOutOfRangeException("count=" + count + " start+count=" + (start + count));

          if (count == 0)
              return -1;

          fixed (char* ptr_input = input)
          {
              fixed (char* ptr_value = value)
              {
                  int found = 0;
                  int end = start + count;
                  for (int i = start; i < end; i++)
                  {

正确的是不是应该是

      //获取value在input中自start起始下标

 private unsafe static int internal_index_of(string input, string value, int start, int count)
       {
           int input_len = input.Length;

           if (start < 0 || start >= input_len)
               throw new ArgumentOutOfRangeException("start");

           if (count < 0 || start + count > input_len)
               throw new ArgumentOutOfRangeException("count=" + count + " start+count=" + (start + count));

           if (count == 0)
               return -1;

           fixed (char* ptr_input = input)
           {
               fixed (char* ptr_value = value)
               {                
                   int end = start + count;
                   for (int i = start; i < end; i++)
                   {
                           int found = 0;

float -> zstring 精度问题

如果输入0.06,DecimalAccuracy设为2,则原来的只会输出0.6,是不对的,建议修改如下

            int mul = (int)Math.Pow(10, DecimalAccuracy); // 2
            int number = (int)(value * mul); // gets the number as a whole, e.g. 6
            int left_num = number / mul; // left part of the decimal point, e.g. 0
            int right_num = number % mul; // right part of the decimal pnt, e.g. 6
            int left_digit_count = get_digit_count(left_num); // e.g. 1
            int right_digit_count = DecimalAccuracy; // e.g. 2
            int total = left_digit_count + right_digit_count + 1; // +1 for '.'

使用Equals会抛空异常

rt,zstring类对象在调用Equals与非空对象比较时会抛空。看起来是由于Equals内会将obj转为zstring类并进行非空判定,但重写的!=运算符号直接尝试获取left与right的value导致的

` public override bool Equals(object obj)
{
if (obj == null)
return ReferenceEquals(this, null);

        var gstr = obj as zstring;
        if (gstr != null)
            return gstr._value == this._value;

        var str = obj as string;
        if (str != null)
            return str == this._value;

        return false;
    }`

public static bool operator !=(zstring left, zstring right) { return !(left._value == right._value); }

LastIndexOf赋值循序有误

public int LastIndexOf(string value)
{
int idx = -1;
int last_find = -1;
while (true)
{
idx = internal_index_of(this._value, value, idx + value.Length);
last_find = idx;
if (idx == -1 || idx + value.Length >= this._value.Length)
break;
}
return last_find;
}
当internal_index_of() 返回-1时, last_find = idx;会覆盖上次的值,导致最终返回-1,
应该调整至if判断之后:
public int LastIndexOf(string value)
{
int idx = -1;
int last_find = -1;
while (true)
{
idx = internal_index_of(this._value, value, idx + value.Length);
if (idx == -1 || idx + value.Length >= this._value.Length)
break;
last_find = idx;
}
return last_find;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.