本文整理汇总了C++中StringPool::get方法的典型用法代码示例。如果您正苦于以下问题:C++ StringPool::get方法的具体用法?C++ StringPool::get怎么用?C++ StringPool::get使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StringPool
的用法示例。
在下文中一共展示了StringPool::get方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: runFile
int VirtualMachine::runFile(ByteCodeFileReader& reader){
int header = reader.readHeader();
if(header != ('E' + 'D' + 'D' + 'I')){
cout << "Not an EDDI compiled file" << endl;
return 1;
}
StringPool pool;
int strings = reader.readInt();
cout << "String pool size = " << strings << endl;
for(int i = 0; i < strings; i++){
int index = reader.readInt();
string value = reader.readLitteral();
pool.add(index, value);
}
vector<Instruction> instructions;
int current = 0;
map<int, int> branches;
while(reader.hasMore()){
ByteCode bytecode = reader.readByteCode();
if(bytecode == LABEL){
int branche = reader.readInt();
branches[branche] = current;
} else {
Instruction instruction;
instruction.bytecode = bytecode;
if(instruction.bytecode > LABEL && instruction.bytecode <= JUMP_IF_NOT){
instruction.operand = reader.readInt();
}
instructions.push_back(instruction);
++current;
}
}
Stack stack;
Variables variables;
int programCounter = 0;
while(true){
Instruction instruction = instructions[programCounter];
ByteCode bytecode = instruction.bytecode;
programCounter++;
switch(bytecode){
case LDCS:
case LDCI:
stack.push(instruction.operand);
break;
case PRINTI:
cout << stack.pop() << endl;
break;
case PRINTS:
cout << pool.get(stack.pop()) << endl;
break;
case SSTORE:
case ISTORE:{
unsigned int variable = (unsigned int) instruction.operand;
variables.assign(variable, stack.pop());
break;
}
case SLOAD:
case ILOAD:{
unsigned int variable = (unsigned int) instruction.operand;
stack.push(variables.get(variable));
break;
}
case IADD:{
int rhs = stack.pop();
int lhs = stack.pop();
stack.push(lhs + rhs);
break;
}
case ISUB:{
int rhs = stack.pop();
int lhs = stack.pop();
stack.push(lhs - rhs);
//.........这里部分代码省略.........