bool encode(tbnet::DataBuffer *output)
    {
      if (values.size() > RESPONSE_VALUES_MAXSIZE)
      {
        log_warn("zrange withscore values_size = %zu, larger than RESPONSE_VALUES_MAXSZIE", values.size());
        return false;
      }

      PUT_INT32_TO_BUFFER(output, config_version);
      PUT_INT16_TO_BUFFER(output, version);
      PUT_INT32_TO_BUFFER(output, code);
      PUT_INT32_TO_BUFFER(output, values.size());

      double score = 0.0;
      for (size_t i = 0; i < values.size(); i++)
      {
        PUT_PDATAENTRY_TO_BUFFER(output, values[i]);

        score = 0;
        if (i < scores.size()) {
          score = scores[i];
        }

        PUT_DOUBLE_TO_BUFFER(output, score);
      }

      return true;
    }
    bool encode (tbnet::DataBuffer * output)
    {
      CREATE_HEADER;

      PUT_INT16_TO_BUFFER (output, version);
      PUT_INT32_TO_BUFFER (output, expire);
      PUT_DATAENTRY_TO_BUFFER (output, key);
      PUT_DATAENTRY_TO_BUFFER (output, value);

      return true;
    }
    bool encode(tbnet::DataBuffer *output)
    {
      if (values.size() > RESPONSE_VALUES_MAXSIZE)
      {
        log_warn("zrange values_size = %zu, larger than RESPONSE_VALUES_MAXSZIE", values.size());
        return false;
      }

      PUT_INT32_TO_BUFFER(output, config_version);
      PUT_INT16_TO_BUFFER(output, version);
      PUT_INT32_TO_BUFFER(output, code);
      PUT_DATAVECTOR_TO_BUFFER(output, values);

      return true;
    }