我想将垃圾收集语言(具体来说,它使用古老的Boehm libgc)与glib系列API接口.
glib和gobject在内部使用引用计数来管理对象的生命周期.包装它们的常规方法是使用垃圾收集的对等对象,该对象保存对glib对象的引用,并在对等方最终确定时删除引用; 这意味着当应用程序使用对等时,glib对象保持活动状态.我以前做过这个,但它确实有效,但它很痛苦并且有自己的问题(例如生成同一个底层对象的两个对等体).
鉴于我无论如何都有垃圾收集器的所有开销,理想情况下我想做的只是关闭glib的引用计数并使用垃圾收集器来处理所有事情.这样可以简化界面,无疑可以提高性能.
从表面看来,这似乎相当简单 - 将一个垃圾收集器终结器连接到glib对象终结器,并将ref和unref函数覆盖为noops ---但进一步的调查显示它还有更多:glib例如,他非常喜欢保留自己的分配器池,当然我让它这样做垃圾收集器假设池中的所有东西都是活的并且它会泄漏.
说服glib使用libgc实际上是否可行?如果是这样,我可能面临的其他问题是什么?什么样的glib性能影响会强制所有分配通过libgc产生(而不是使用当前在glib中的优化分配器)?
(glib文档确实说它应该干净地与垃圾收集器接口......)
我有一个有四列的表.第一列需要是适合内容的最小大小,其他三列需要大小相等,并占用表中的其余空间.我的桌子和我的内容都没有已知的大小.(这是一个非常标准的可变大小标签和固定大小的数据布局.)
在HTML4的旧时代,我可以通过使用"相对大小"功能指定每列的大小作为整体的比例来实现此目的:
<colgroup>
<col width="0*"/>
<col width="1*"/>
<col width="1*"/>
<col width="1*"/>
</colgroup>
Run Code Online (Sandbox Code Playgroud)
但是,width属性现在已弃用,我们应该使用CSS代替.但我还没有找到任何方法用CSS复制它; CSS大小说明符只允许我将宽度指定为固定大小或整体的一小部分,其中我实际需要的是第一列被删除后剩余的一小部分.
有没有办法用现代技术做到这一点?(请注意,我不能使用CSS3.)
我有一个C++应用程序,其内存数据集由一组对象组成,每个对象都附加一个键/值集.对象和键由int id引用,值始终是单个类的实例.关键ID在对象中是唯一的,对象ID在Universe中是唯一的.
这几乎是一个,map<pair<int, int>, value>除了我有额外的要求,我需要能够枚举附加到特定对象的键.这一切都需要是事务性的,所以如果出现问题我可以回滚更改.
这一切都让我觉得这是一个完全标准的问题,我应该能够获得现成的代码,但我一直无法找到任何东西.谁能:
(a)告诉我这个问题究竟叫什么,所以我知道要找什么;
(b)建议我应该看的任何代码.
请注意,我希望这只是一个内存中的数据存储,因此像Berkeley DB这样的NoSQL方法并不合适 - 我不想继续读取和写入值对象(它们是中等复杂的).
到目前为止,我发现了不做事务的简单方法(如boost_multi_index,甚至只是嵌套的STL映射),或使用持久存储的复杂方法,但两者之间没有任何内容.我可以在基本存储上实现自己的事务层,但说实话,我宁愿不这样做.
我错过了什么?
编辑:好吧,似乎没有人能够建议一个; 所以我写了自己的.这是令人惊讶的,但实际上并不是很多代码.现在它只是一个使用嵌套映射进行存储的模板类,但我正在考虑改为使用boost :: multi_index_container来简化.它没有抛光,可能充满了虫子,但如果有人认为他们可以使用它,请告诉我.
更多编辑:作为参考,事实证明,我正在寻找的Googleable名称是实体/属性/值数据库(EAV).
我有一个基于curses的应用程序(WordGrinder).我刚刚收到用户的错误报告,说某些键在键盘上无法正常工作.在调查中,他是对的.
有问题的键是SHIFT +光标键和一些键盘导航键,例如END.调查正在发生的事情,似乎诅咒并没有向我发送这些密钥的事件.在SHIFT +光标键的情况下,我根本没有得到任何东西,而对于END,我得到一个原始的转义序列.
这让我感到惊讶.所有其他键正在被解释并正确地转换为键盘.我期望得到KEY_SLEFT和KEY_END.为什么不是我?
我已经看了一些其他应用程序,这些键可以工作,但没有发现任何明显的我做错了; 和像nano这样的应用程序做了很多邪恶的事情,比如处理他们自己的转义键解析,所以我不知道它们是否是一个很好的源代码候选者.
我正在初始化ncurses如下:
initscr();
raw();
noecho();
meta(NULL, TRUE);
nonl();
idlok(stdscr, TRUE);
idcok(stdscr, TRUE);
scrollok(stdscr, FALSE);
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
Run Code Online (Sandbox Code Playgroud)
我使用gnome-terminal作为终端模拟器,xterm作为终端类型.Locale是UTF-8,我有这个库的ncursesw变体.
有任何想法吗?
更新:
好吧,几个月后,我尝试使用Gnome 3的gnome-terminal的Wordgrinder,并发现所有这些古怪的密钥生成有效的ncurses密钥代码.例如,SHIFT + LEFT现在生成键码393.xterm产生完全相同的结果.不幸的是,CTRL + LEFT生成密钥代码539,并且Curses文档明确指出有效密钥代码在KEY_MIN到KEY_MAX --- 257到511的范围内......
所以至少事情现在起作用,但这些奇怪的新密钥代码如何工作?他们在任何地方定义?他们肯定不在标题中.
我有一个使用NativeActivity的应用程序.我想调用Java来做一些需要Context的事情(例如,访问TelephonyManager来查询IMEI).
如何为我的活动获得有效的上下文?
ANativeActivity结构包含我的应用程序的各种有用数据,例如JavaVM和JNI环境等.它还包含指向NativeActivity的类对象的jobject.它不包含的是指向NativeActivity 实例的jobject .我也没有看到任何有用的东西struct android_app.
必须有可能这样做; 任何想法怎么样?
我正在尝试在Java中找到一个用于存储字节向量的类,它支持:随机访问(所以我可以在任何地方获取或设置一个字节),调整大小(所以我可以将内容附加到最后,或者手动更改大小),合理的效率(我可能在这些东西中存储兆字节的数据),都在内存中(我没有文件系统).有什么建议?
到目前为止候选人是:
byte[].不可调整大小.java.util.Vector<Byte>.邪恶.也痛苦无效.java.io.ByteArrayOutputStream.不是随机访问.java.nio.ByteBuffer.不可调整大小.org.apache.commons.collections.primitives.ArrayByteList.不可调整大小.这很奇怪,因为它会自动调整大小,如果你添加东西,你就不能明确地改变大小!java.nio.channels.FileChannel.找不到一个.(记住我没有文件系统.)这似乎是一个奇怪的遗漏,我相信我肯定错过了某个地方.我只想弄清楚什么.我错过了什么?
当电池电量不足时,Android 将发送 ACTION_BATTERY_LOW 意图。然后,当再次正常时,它会发送 ACTION_BATTERY_OKAY。
不幸的是,如果我的应用程序在电池电量低时启动,那么我不会收到意图;它不粘,所以我无法检测当前是否存在电池警报。ACTION_BATTERY_CHANGED是粘性的,但它只告诉我当前的电池充电状态,而不告诉我系统是否已声明低电池警报。
有什么方法可以检测任意给定时刻电池电量是否低吗?
我有一个可以连接游戏手柄的Android设备(它是一个完全标准的XBox 360控制器,但我也需要支持其他品种).游戏手柄显示为带有一些模拟轴和一些按钮的InputDevice.
我需要能够查询Android以找出游戏手柄支持的按钮.有谁知道如何做到这一点?
我知道系统有这个信息,因为如果我编写一个打开的命令行应用程序/dev/input/event...并使用EVIOCGBITioctl 查询按钮,我会从内核中获得一个很好的支持按钮列表.但我无法从Android应用程序执行此操作,因为我无权直接访问输入设备.
看起来应该可以获取InputDevice的KeyCharacterMap对象并进行查询; 但看起来Android已将默认的QWERTY键盘键映射附加到游戏手柄,而不是构建一个实际匹配游戏手柄支持的键盘.这将很高兴地告诉我游戏手柄有一个Q键,它没有,并且它没有BUTTON_X键,它所做的,并且我正在接收关键事件.所以这没有帮助.
有没有办法做到这一点?
我正在编写一个生成LLVM IR指令的编译器.我正在广泛地使用矢量.
我希望能够将向量中的所有元素相加.现在我只是单独提取每个元素并手动添加它们,但它让我觉得这正是硬件应该能够帮助的东西(因为它听起来像一个非常常见的操作).但似乎并没有做到这一点.
最好的方法是什么?我正在使用LLVM 3.2.
所以我有一件事.
type Thing is new record
...elements...
end record;
Run Code Online (Sandbox Code Playgroud)
我有一个字符串化的功能.
function ToString(t: Thing) returns string;
Run Code Online (Sandbox Code Playgroud)
我希望能够告诉Ada使用此功能Thing'image,以便我的库的用户不必考虑他们是使用内置类型还是Thing.
但是,明显的语法:
for Thing'image use ToString;
Run Code Online (Sandbox Code Playgroud)
......不起作用.
有没有办法做到这一点?
android ×3
ada ×1
android-ndk ×1
attributes ×1
battery ×1
bytearray ×1
c ×1
c++ ×1
collections ×1
css ×1
curses ×1
database ×1
gamepad-api ×1
glib ×1
html-table ×1
html5 ×1
java ×1
key-value ×1
llvm ×1
llvm-3.2 ×1
llvm-ir ×1
ncurses ×1
syntax ×1
terminal ×1
unix ×1