gpt4 book ai didi

Haxe – 使用可序列化的 Int64 键实现 Map 的正确方法( native 目标)

转载 作者:行者123 更新时间:2023-12-01 16:59:01 24 4
gpt4 key购买 nike

我需要知道使用 64 位 key 实现 map 的正确方法是什么。其中不会有那么多项目,我只需要使用 key 的各个位来处理具有足够大地址空间的各种内容,并且我需要它非常快,因此 String 键可能是太慢了。到目前为止我尝试过:

import haxe.Int64;
import haxe.Unserializer;
import haxe.Serializer;

class Test {
static function main () {

var key:Int64 = 1 << 63 | 0x00000001;

var omap:Map<Int64, String> = new Map<Int64, String>();
omap.set(key, "test");

var smap:Map<Int64, String> = Unserializer.run(Serializer.run(omap));

var key2:Int64 = 1 << 63 | 0x00000001;
trace(key+" "+smap.get(key2));
}
}

http://try.haxe.org/#7CDb2

这显然不起作用,因为 haxe.Int64 创建了一个对象实例。使用 cpp.Int64 可以工作,因为由于某种原因它在我的 cpp 代码中回落到 32 位整数,并且我不知道我做错了什么。我怎样才能强制它“保持”64 位,或者我应该采取其他方式?

最佳答案

编辑:由于 hxcpp 中的错误/当前实现,这目前不适用于 native 目标:https://github.com/HaxeFoundation/hxcpp/issues/523

我想出了这个解决方法/包装器,这可能不是最有效的解决方案,但它似乎有效。

import haxe.Int64;
import haxe.Unserializer;
import haxe.Serializer;

class Test {
static function main () {

var key:Int64 = Int64.make(1000,1);

var omap:Int64Map<String> = new Int64Map();
omap.set(key, "test");

var smap:Int64Map<String> = Unserializer.run(Serializer.run(omap));

var key2:Int64 = Int64.make(1000,1);
trace(key+" "+smap.get(key2));
}
}

class Int64Map<V> {

private var map:Map<Int64,V>;

public function new() : Void {
this.map = new Map<Int64,V>();
}

public function set(key:Int64, value:V):Void {
this.map.set(key, value);
}

public inline function get(key:Int64):Null<V> {
var skey:Null<Int64> = getMapKey(key);
if (skey != null) return this.map.get(skey);
return null;
}

public inline function exists(key:Int64):Bool {
return (getMapKey(key) != null);
}

public function remove( key : Int64 ) : Bool {
var skey:Null<Int64> = getMapKey(key);
if (skey != null) return this.map.remove(skey);
return false;
}

public function keys() : Iterator<Int64> {
return this.map.keys();
}

public function toString() : String {
return this.map.toString();
}

public function iterator() : Iterator<V> {
return this.map.iterator();
}



private function getMapKey(key:Int64):Null<Int64> {
for (ikey in this.map.keys()){
if (Int64.eq(key, ikey)){
return ikey;
}
}
return null;
}

}

http://try.haxe.org/#57686

关于Haxe – 使用可序列化的 Int64 键实现 Map 的正确方法( native 目标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40071064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com