小编Joh*_*ice的帖子

C++中的分层枚举

我正在研究消息解析器/生成器子系统.我正在创建一个自动生成器,它使用包含有关此协议的所有信息的数据库,包括枚举列表,以生成代码.我遇到的一件事是需要分层枚举.

更新

(我试图通过不描述完整的问题来简化事情,但下面的评论显然我错误地简化了太多.)

正在使用的数据库将存储为简化字符串(客户决策),但协议仅说"字节三元组"(又名Hierarchical Enum).完整的问题可以这样描述:

给定一组唯一的字符串,其各自对应一个独特的三重的,1)找到任何给定的字符串三重, 2)找到任何给定的三元组的字符串.确保考虑"Undefined"和"No Statement"枚举(没有与之关联的字符串).[正如一张海报所说,是的,这疯了.]

(警告:我已经做了十多年的C++,但去年我一直在做Java - 我的C++可能已"损坏"了.)

因此,使用一个公认的人为例子,给出:

// There is only one category
// POP= "P", COUNTRY= "K", CLASSICAL= "C"
enum Category {POP, COUNTRY, CLASSICAL};

// There is one Type enum for each Category.
// ROCK= "R", BIG_BAND = "B", COUNTRY_POP= "C" 
enum PopType {ROCK, BIG_BAND, COUNTRY_POP};
enum CountryType {CLASSICAL_COUNTRY, MODERN_COUNTRY, BLUEGRASS, COUNTRY_AND_WESTERN};
// ...

// There is one Subtype for each Type
// EIGHTIES= "E", HEAVY_METAL= "H", SOFT_ROCK= "S" …
Run Code Online (Sandbox Code Playgroud)

c++ enums templates design-patterns cross-platform

13
推荐指数
2
解决办法
1894
查看次数

Java整数类型原语是否在转换类型的MAX_INT处"加盖"?

我试图找出一些非常奇怪的Java行为.我有一个涉及double的公式,但是"保证"给出一个整数答案 - 具体来说,是一个无符号的32位整数(唉,Java不能很好).不幸的是,我的答案有时不正确.

最后,我发现了问题,但其行为非常奇怪的对我说:一double,直接投给一个int似乎在被加盖MAX_INT了一个有符号整数,而double要转换成long然后转换为一个int给了我预期的应答( -1;无符号32位整数的MAX INT,表示为带符号的32位整数).

我写了一个小测试程序:

public static void main(String[] args) {
    // This is the Max Int for a 32-bit unsigned integer
    double maxUIntAsDouble = 4294967295.00;
    long maxUintFromDoubleAsLong = (long)maxUIntAsDouble;
    long maxUintFromDoubleAsInt = (int)maxUIntAsDouble;
    int formulaTest = (int) (maxUintFromDoubleAsLong * 1.0);
    int testFormulaeWithDoubleCast =  (int)((long) (maxUintFromDoubleAsLong * 1.0));
    // This is a more-or-less random "big number"
    long longUnderTest = 4123456789L;
    // Max …
Run Code Online (Sandbox Code Playgroud)

java double int casting

8
推荐指数
1
解决办法
2731
查看次数

还有什么我可以做的事情来处理运行Ant(命令行)的"GC Overhead Limit Exceeded"吗?

我正在尝试使用命令行Ant 编译一个非常大的多项目Android项目.我最初使用Ant 1.8.3,但后来升级到1.8.4(结果是徒劳).虽然我安装了Eclipse(Indigo,今天更新),但是这个项目的性质阻止了在Eclipse中使用Ant.

代码似乎生成正常,但当它到达操作的"dex"阶段时,它会得到两个错误之一,具体取决于我ANT_OPTS:"GC Overhead Limit Exceeded"或"Java Heap Space".

我用Google搜索并检查了Stack.发现各个环节后(参见这里,这里,该协议栈的问题,而这个问题堆栈,以及),我修改了蚂蚁的选择.(许多链接涵盖了在执行Java代码时发生的情况;我的问题实际上是在Ant进程中创建Android APK以进行上载).

我的ANT_OPTS环境变量目前是:

-Xms4g -Xmx4g -Xmn256m -XX:PermSize=256m -XX:MaxPermSize=1024m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=8
Run Code Online (Sandbox Code Playgroud)

我尝试完全关闭GC Overhead Limit -XX:-UseGCOverheadLimit ,但所有这一切都是给我一个Java Heap Space错误而不是GC Overhead Limit错误.我曾经问过我的同事,但他们也没有想法.

哦,还有一个"细节":我可以使用Eclipse来编译和加载项目,这看起来似乎"很好"; 然而,这个"元项目"所需的大量项目表明我试图让Ant脚本工作.

系统信息:

  • 操作系统:Windows 7 64位
  • Java:Sun,1.6,64位
  • 物理内存:8Gb
  • Android:SDK工具:R20; 平台工具:R12(今天更新,6月28日)

我还能做些什么吗?另一个要搜索的关键字?别的地方看?

java ant android

5
推荐指数
1
解决办法
5673
查看次数

标签 统计

java ×2

android ×1

ant ×1

c++ ×1

casting ×1

cross-platform ×1

design-patterns ×1

double ×1

enums ×1

int ×1

templates ×1