//LuminesRobot::LuminesRobot(){} //LuminesRobot::~LuminesRobot(){} void LuminesRobot::thinkNextBlockI( Sets &baseSet, ::std::vector< int > &tops, ::std::vector< Sets > &sets, int level, btype *map, int width, int height, const BlockSet coming[3]) { int i, r, t; int top1, top2, score; BlockSet bs; top2 = tops[0]; for (i=0; i < width-1; i++) { top1 = tops[i]; top2 = tops[i+1]; tops[i] = max(0, top1 - 2); tops[i+1] = max(0, top2 - 2); for (r = 0; r < 4; r++) { score = 0; bs = s_rotmap[coming[level]][r]; // rotate by y times if (top1>=0) { score += getlink(map, width, height, i, top1, s_posbt[bs][2]); t = i+top1*width; assert(t >=0 && t < width*height); map[t] = s_posbt[bs][2]; if (top1>0) { score += getlink(map, width, height, i, top1-1, s_posbt[bs][0]); t = i+(top1-1)*width; assert(t >=0 && t < width*height); map[t] = s_posbt[bs][0]; } } if (top2>=0) { score += getlink(map, width, height, i+1, top2, s_posbt[bs][3]); t = i+1+top2*width; assert(t >=0 && t < width*height); map[t] = s_posbt[bs][3]; if (top2>0) { score += getlink(map, width, height, i+1, top2-1, s_posbt[bs][1]); t = i+1+(top2-1)*width; assert(t >=0 && t < width*height); map[t] = s_posbt[bs][1]; } } if (level < MAX_LEVEL - 1) { thinkNextBlockI( Sets(baseSet, i, r, score, max(0, min(top1,top2)-1)), tops, sets, level+1, map, width, height, coming); } else { sets.push_back( Sets(baseSet, i, r, score, max(0, min(top1,top2)-1)) ); } if (top1>=0) { map[i+top1*width] = BT_NONE; if (top1>0) map[i+(top1-1)*width] = BT_NONE; } if (top2>=0) { map[i+1+top2*width] = BT_NONE; if (top2>0) map[i+1+(top2-1)*width] = BT_NONE; } } tops[i] = top1; tops[i+1] = top2; } }
ActivityAttributeType LiftingActivity::QueryActivityAttribute(const std::string& attributeName) const { ActivityAttributeType result; result.startTime = 0; result.endTime = 0; result.unitSystem = UnitMgr::GetUnitSystem(); if (attributeName.compare(ACTIVITY_ATTRIBUTE_REPS) == 0) { result.value.intVal = Total(); result.valueType = TYPE_INTEGER; result.measureType = MEASURE_COUNT; result.valid = result.value.intVal > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_REPS_COMPUTED) == 0) { result.value.intVal = ComputedTotal(); result.valueType = TYPE_INTEGER; result.measureType = MEASURE_COUNT; result.valid = result.value.intVal > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_REPS_CORRECTED) == 0) { result.value.intVal = CorrectedTotal(); result.valueType = TYPE_INTEGER; result.measureType = MEASURE_COUNT; result.valid = result.value.intVal > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_CURRENT_PACE) == 0) { uint16_t total = Total(); result.value.timeVal = Pace(); result.valueType = TYPE_TIME; result.measureType = MEASURE_TIME; result.valid = total > 0; } else if (attributeName.compare(ACTIVITY_ATTRIBUTE_SETS) == 0) { uint16_t total = Total(); result.value.intVal = Sets(); result.valueType = TYPE_INTEGER; result.measureType = MEASURE_COUNT; result.valid = total > 0; } else if (attributeName.find(ACTIVITY_ATTRIBUTE_GRAPH_PEAK) == 0) { if (m_analyzer) { const char* numStr = attributeName.c_str() + strlen(ACTIVITY_ATTRIBUTE_GRAPH_PEAK); uint16_t num = atol(numStr); if ((num > 0) && (num <= m_computedRepList.size())) { GraphPeak peak = m_computedRepList.at(num - 1); result.valueType = TYPE_INTEGER; result.measureType = MEASURE_INDEX; result.value.intVal = peak.peak.index; result.valid = true; } else { result.valid = false; } } else { result.valid = false; } } else if (attributeName.find(ACTIVITY_ATTRIBUTE_MEAN_PEAK_AREA) == 0) { uint16_t total = Total(); result.value.doubleVal = GetPeakAreaMean(); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_NOT_SET; result.valid = total > 0; } else if (attributeName.find(ACTIVITY_ATTRIBUTE_STDDEV_PEAK_AREA) == 0) { uint16_t total = Total(); result.value.doubleVal = GetPeakAreaStdDev(); result.valueType = TYPE_DOUBLE; result.measureType = MEASURE_NOT_SET; result.valid = total > 0; } else { result = Activity::QueryActivityAttribute(attributeName); } return result; }