예제 #1
0
 vector<string> ipToCIDR(string ip, int range) {
     auto start = ipToInt(ip);
     vector<string> result;
     while (range > 0) {
         auto mask = max(33 - bitLength(start & ~(start - 1)),
                         33 - bitLength(range));
         result.emplace_back(intToIP(start) + "/" + to_string(mask));
         start += 1 << (32 - mask);
         range -= 1 << (32 - mask);
     }
     return result;
 }
예제 #2
0
bool PreflateDecoderTask::encode() {
  PreflatePredictionEncoder pcodec;
  unsigned modelId = handler.setModel(counter, params);
  if (!handler.beginEncoding(metaBlockId, pcodec, modelId)) {
    return false;
  }
  for (unsigned i = 0, n = tokenData.size(); i < n; ++i) {
    tokenPredictor->encodeBlock(&pcodec, i);
    treePredictor->encodeBlock(&pcodec, i);
    if (tokenPredictor->predictionFailure || treePredictor->predictionFailure) {
      return false;
    }
    if (lastMetaBlock) {
      tokenPredictor->encodeEOF(&pcodec, i, i + 1 == tokenData.size());
    }
  }
  if (lastMetaBlock) {
    pcodec.encodeNonZeroPadding(paddingBits != 0);
    if (paddingBits != 0) {
      unsigned bitsToSave = bitLength(paddingBits);
      pcodec.encodeValue(bitsToSave, 3);
      if (bitsToSave > 1) {
        pcodec.encodeValue(paddingBits & ((1 << (bitsToSave - 1)) - 1), bitsToSave - 1);
      }
    }
  }
  return handler.endEncoding(metaBlockId, pcodec, uncompressedData.size() - uncompressedOffset);
}
예제 #3
0
파일: 201.cpp 프로젝트: aaahexing/cheer
//time complexity: O(1)
//space complexity: O(1)
//2A : missing the recursive part in line 24 caused the first failure
int rangeBitwiseAnd(int m, int n) {
	if (m == 0) {
		return 0;
	}

	if (m == n) {
		return m;
	}

	int len1 = bitLength(m);
	int len2 = bitLength(n);
	if (len1 == len2) {
		int leastNum = 1 << (len1 - 1);
		return leastNum + rangeBitwiseAnd(m - leastNum, n - leastNum);
	} else {
		return 0;
	}
}