Files
lserp_cs_5.0/插件库/Cef3.24/Interop/Base/cef_string_multimap.cs
T
2026-07-10 15:25:05 +08:00

62 lines
1.9 KiB
C#

namespace Cef3.Interop
{
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
[StructLayout(LayoutKind.Sequential, Pack = libcef.ALIGN)]
internal unsafe struct cef_string_multimap
{
public static NameValueCollection ToNameValueCollection(cef_string_multimap* multimap)
{
var result = new NameValueCollection(StringComparer.InvariantCultureIgnoreCase);
if (multimap == null) return result;
var size = libcef.string_multimap_size(multimap);
var n_key = new cef_string_t();
var n_value = new cef_string_t();
for (var i = 0; i < size; i++)
{
libcef.string_multimap_key(multimap, i, &n_key);
libcef.string_multimap_value(multimap, i, &n_value);
result.Add(cef_string_t.ToString(&n_key), cef_string_t.ToString(&n_value));
}
libcef.string_clear(&n_key);
libcef.string_clear(&n_value);
return result;
}
public static cef_string_multimap* From(NameValueCollection collection)
{
var result = libcef.string_multimap_alloc();
foreach (string key in collection)
{
fixed (char* key_ptr = key)
{
var n_key = new cef_string_t(key_ptr, key.Length);
foreach (var value in collection.GetValues(key))
{
fixed (char* value_ptr = value)
{
var n_value = new cef_string_t(value_ptr, value.Length);
libcef.string_multimap_append(result, &n_key, &n_value);
}
}
}
}
return result;
}
}
}