std::string vmTypeLibrary::DescribeVariable (std::string name, vmValType& type) { if (!TypeValid (type)) return (std::string) "INVALID TYPE " + name; // Return a string describing what the variable stores std::string result; // Variable type if (type.m_basicType >= 0) result = m_structures [type.m_basicType].m_name + " "; // Structure type else result = vmBasicValTypeName (type.m_basicType) + " "; // Basic type // Append pointer prefix int i; for (i = 0; i < type.VirtualPointerLevel (); i++) result += "&"; // Variable name result += name; // Append array indices for (i = type.m_arrayLevel - 1; i >= 0; i--) { result += "("; if (type.VirtualPointerLevel () == 0) result += IntToString (type.m_arrayDims [i] - 1); result += ")"; } return result; }
bool vmTypeLibrary::DataSizeBiggerThan (vmValType& type, int size) { // Return true if data size > size. // This is logically equivalent to: DataSize (type) > size, // except it correctly handles integer overflow for really big types. assert (TypeValid (type)); if (type.PhysicalPointerLevel () == 0 && type.m_arrayLevel > 0) { vmValType element = type; element.m_arrayLevel = 0; return type.ArraySizeBiggerThan (size, DataSize (element)); } else return DataSize (type) > size; }
bool CCardOperator::BiggerThanBefore(list<CCardSprite*>& perCards, list<CCardSprite*>& nowCards){ cardtype perType = getCardsType(perCards); cardtype nowType = getCardsType(nowCards); if (!TypeValid(perType, nowType)) return false; if (perType == unknow) return true; int perval = getLittestCardRval(perCards); int nowval = getLittestCardRval(nowCards); if (perType == boom) { if (nowType == kingboom || nowType == tenboom) return true; if (nowval <= perval || perCards.size() > nowCards.size()) { return false; } }else if (perType == straight) { if (nowType != boom && nowType != kingboom && nowType != tenboom){ if (straightVal(nowCards) <= straightVal(perCards) || nowCards.size() != perCards.size()) { return false; } } } else { if (nowType != boom && nowType != kingboom && nowType != tenboom) { if (nowval <= perval || nowCards.size() != perCards.size()) return false; } } return true; }
inline bool TblIndexAndTypeInsertValid(JNIEnv* env, T* pTable, jlong columnIndex, jlong rowIndex, int expectColType) { return TblIndexInsertValid(env, pTable, columnIndex, rowIndex) && TypeValid(env, pTable, columnIndex, rowIndex, expectColType, false); }
inline bool IndexAndTypeValid(JNIEnv* env, T* pTable, jlong columnIndex, jlong rowIndex, int expectColType, bool allowMixed) { return IndexValid(env, pTable, columnIndex, rowIndex) && TypeValid(env, pTable, columnIndex, rowIndex, expectColType, allowMixed); }
inline bool ColIndexAndTypeValid(JNIEnv* env, T* pTable, jlong columnIndex, int expectColType) { return ColIndexValid(env, pTable, columnIndex) && TypeValid(env, pTable, columnIndex, 0, expectColType, false); }