本文整理汇总了C++中BitField::toggle方法的典型用法代码示例。如果您正苦于以下问题:C++ BitField::toggle方法的具体用法?C++ BitField::toggle怎么用?C++ BitField::toggle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BitField
的用法示例。
在下文中一共展示了BitField::toggle方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: editField
void BTSerializedEditor::editField(BTDisplay &d, ObjectSerializer &serial, const char *text, XMLAction *curField, int modField, int where)
{
int key;
switch (curField->getType())
{
case XMLTYPE_STDSTRING:
{
std::string val = curField->createString();
d.addReadString(std::string(text) + ": ", 100, val);
key = d.process();
if ('\r' == key)
*(reinterpret_cast<std::string*>(curField->object)) = val;
break;
}
case XMLTYPE_STRING:
{
std::string val = curField->createString();
d.addReadString(std::string(text) + ": ", 100, val);
key = d.process();
if ('\r' == key)
{
char *str = *(reinterpret_cast<char**>(curField->object));
if (str)
{
delete [] str;
}
int len = val.length();
str = new char[len + 1];
strncpy(str, val.c_str(), len);
str[len] = 0;
*(reinterpret_cast<char**>(curField->object)) = str;
}
break;
}
case XMLTYPE_BOOL:
{
BTDisplay::selectItem vals[2];
vals[0].name = "false";
vals[1].name = "true";
int lookupStart(0);
int lookupCurrent((*(reinterpret_cast<bool*>(curField->object)) ? 1 : 0));
d.addSelection(vals, 2, lookupStart, lookupCurrent);
if (27 != d.process())
{
*(reinterpret_cast<bool*>(curField->object)) = lookupCurrent;
}
break;
}
case XMLTYPE_BITFIELD:
{
ValueLookup *lookup = reinterpret_cast<ValueLookup*>(curField->data);
BitField *bits = reinterpret_cast<BitField*>(curField->object);
BTDisplay::selectItem lookupItem[lookup->size()];
for (int i = 0; i < lookup->size(); ++i)
{
lookupItem[i].name = lookup->getName(i);
if (bits->isSet(i))
lookupItem[i].first = '*';
}
int lookupStart(0);
int lookupCurrent(0);
d.addSelection(lookupItem, lookup->size(), lookupStart, lookupCurrent);
int key;
while (27 != (key = d.process()))
{
if (bits->toggle(lookupCurrent))
lookupItem[lookupCurrent].first = '*';
else
lookupItem[lookupCurrent].first = 0;
}
break;
}
case XMLTYPE_INT:
{
if (curField->data)
{
ValueLookup *lookup = reinterpret_cast<ValueLookup*>(curField->data);
bool extra = ((curField->extra == EXTRA_NONE) ? false : true);
BTDisplay::selectItem lookupItem[lookup->size() + (extra ? 1 : 0)];
int i = 0;
if (extra)
{
lookupItem[0].name = curField->extraText;
lookupItem[0].value = -1;
++i;
}
int endIndex = lookup->getEndIndex();
int lookupCurrent(0);
int valIndex((*(reinterpret_cast<int*>(curField->object))) + (extra ? 1 : 0));
for (int curIndex = lookup->getFirstIndex(); curIndex != endIndex; curIndex = lookup->getNextIndex(curIndex))
{
lookupItem[i].name = lookup->getName(curIndex);
lookupItem[i].value = curIndex;
if (curIndex == valIndex)
lookupCurrent = i;
++i;
}
int lookupStart(0);
d.addSelection(lookupItem, lookup->size() + (extra ? 1 : 0), lookupStart, lookupCurrent);
if (27 != d.process())
//.........这里部分代码省略.........
示例2: editSpecial
void BTEditor::editSpecial(BTDisplay &d, BTSpecial *special)
{
if (NULL == special)
{
special = new BTSpecial;
levelMap->addSpecial(special);
}
BTDisplayConfig *oldConfig = d.getConfig();
BTDisplayConfig config;
XMLSerializer parser;
config.serialize(&parser);
parser.parse(BTDisplay::applyDisplayDir("data/specialedit.xml").c_str(), true);
d.setConfig(&config);
int start(0);
int current(0);
BTSpecialBody *body = special->getBody();
std::vector<operationList> ops;
std::vector<BTDisplay::selectItem> list(2);
list[0].name = std::string("Name: ") + special->getName();
list[1].name = "Flags: " + special->printFlags(false);
buildOperationList(d, body, list, ops);
d.addSelection(list.data(), list.size(), start, current);
int key;
char extra[6] = {BTKEY_INS, BTKEY_DEL, BTKEY_CTRL_C, BTKEY_CTRL_V, BTKEY_CTRL_X, 0};
while (27 != (key = d.process(extra)))
{
d.clearText();
if (current == 0)
{
std::string name = special->getName();
d.addReadString("Name: ", 25, name);
key = d.process();
if ('\r' == key)
special->setName(name);
d.clearText();
list[0].name = std::string("Name: ") + special->getName();
}
else if (current == 1)
{
BTSpecialFlagList &lookup = getSpecialFlagList();
BitField bits = special->getFlag();
BTDisplay::selectItem lookupItem[lookup.size()];
for (size_t i = 0; i < lookup.size(); ++i)
{
lookupItem[i].name = lookup.getName(i);
if (bits.isSet(i))
lookupItem[i].first = '*';
}
int lookupStart(0);
int lookupCurrent(0);
d.addSelection(lookupItem, lookup.size(), lookupStart, lookupCurrent);
int key;
while (27 != (key = d.process()))
{
if (bits.toggle(lookupCurrent))
lookupItem[lookupCurrent].first = '*';
else
lookupItem[lookupCurrent].first = 0;
}
special->setFlag(bits);
d.clearText();
list[1].name = "Flags: " + special->printFlags(false);
}
else
{
if (BTKEY_INS == key)
{
if ((ops[list[current].value].op != NULL) && (ops[list[current].value].parent != NULL))
{
ops[list[current].value].parent->insertOperation(ops[list[current].value].op, new BTSpecialCommand(BTSPECIALCOMMAND_NOTHING));
}
}
else if (BTKEY_DEL == key)
{
if ((ops[list[current].value].op != NULL) && (ops[list[current].value].parent != NULL))
{
ops[list[current].value].parent->eraseOperation(ops[list[current].value].op);
}
}
else if (BTKEY_CTRL_X == key)
{
if ((ops[list[current].value].op != NULL) && (ops[list[current].value].parent != NULL))
{
if (clipboard)
delete clipboard;
clipboard = ops[list[current].value].op->clone();
ops[list[current].value].parent->eraseOperation(ops[list[current].value].op);
}
}
else if (BTKEY_CTRL_C == key)
{
if ((ops[list[current].value].op != NULL) && (ops[list[current].value].parent != NULL))
{
if (clipboard)
delete clipboard;
clipboard = ops[list[current].value].op->clone();
}
}
else if (BTKEY_CTRL_V == key)
{
//.........这里部分代码省略.........