コード例 #1
0
ファイル: TDebugProtocol.cpp プロジェクト: Bklyn/fbthrift
uint32_t TDebugProtocol::endItem() {
  //uint32_t size;

  switch (write_state_.back()) {
    case UNINIT:
      // XXX figure out what to do here.
      //throw TProtocolException(TProtocolException::INVALID_DATA);
      //return writeIndented(str);
      return 0;
    case STRUCT:
      return writePlain(",\n");
    case SET:
      return writePlain(",\n");
    case MAP_KEY:
      write_state_.back() = MAP_VALUE;
      return 0;
    case MAP_VALUE:
      write_state_.back() = MAP_KEY;
      return writePlain(",\n");
    case LIST:
      return writePlain(",\n");
    default:
      throw std::logic_error("Invalid enum value.");
  }
}
コード例 #2
0
ファイル: TDebugProtocol.cpp プロジェクト: Bklyn/fbthrift
uint32_t TDebugProtocol::startItem() {
  uint32_t size;

  switch (write_state_.back()) {
    case UNINIT:
      // XXX figure out what to do here.
      //throw TProtocolException(TProtocolException::INVALID_DATA);
      //return writeIndented(str);
      return 0;
    case STRUCT:
      return 0;
    case SET:
      return writeIndented("");
    case MAP_KEY:
      return writeIndented("");
    case MAP_VALUE:
      return writePlain(" -> ");
    case LIST:
      size = writeIndented(
          "[" + boost::lexical_cast<string>(list_idx_.back()) + "] = ");
      list_idx_.back()++;
      return size;
    default:
      throw std::logic_error("Invalid enum value.");
  }
}
コード例 #3
0
ファイル: TDebugProtocol.cpp プロジェクト: Bklyn/fbthrift
uint32_t TDebugProtocol::writeItem(const std::string& str) {
  uint32_t size = 0;
  size += startItem();
  size += writePlain(str);
  size += endItem();
  return size;
}
コード例 #4
0
ファイル: TDebugProtocol.cpp プロジェクト: Bklyn/fbthrift
uint32_t TDebugProtocol::writeStructBegin(const char* name) {
  uint32_t size = 0;
  size += startItem();
  size += writePlain(string(name) + " {\n");
  indentUp();
  write_state_.push_back(STRUCT);
  return size;
}
コード例 #5
0
ファイル: DebugProtocol.cpp プロジェクト: 343829084/fbthrift
uint32_t DebugProtocolWriter::writeMapBegin(TType keyType,
                                            TType valueType,
                                            uint32_t size) {
  startItem();
  writePlain("map<{},{}>[{}] {{\n",
             fieldTypeName(keyType),
             fieldTypeName(valueType),
             size);
  pushState(MAP_KEY);
  return 0;
}
コード例 #6
0
ファイル: DebugProtocol.cpp プロジェクト: 343829084/fbthrift
void DebugProtocolWriter::endItem() {
  if (writeState_.empty()) {  // top level
    return;
  }
  auto& ws = writeState_.back();
  ++ws.index;
  switch (ws.type) {
  case LIST:
  case STRUCT:
  case SET:
    writePlain(",\n");
    break;
  case MAP_KEY:
    ws.type = MAP_VALUE;
    break;
  case MAP_VALUE:
    ws.type = MAP_KEY;
    writePlain(",\n");
  }
}
コード例 #7
0
ファイル: TDebugProtocol.cpp プロジェクト: Bklyn/fbthrift
uint32_t TDebugProtocol::writeSetBegin(const TType elemType,
                                       const uint32_t size) {
  // TODO(dreiss): Optimize short sets.
  uint32_t bsize = 0;
  bsize += startItem();
  bsize += writePlain(
      "set<" + fieldTypeName(elemType) + ">"
      "[" + boost::lexical_cast<string>(size) + "] {\n");
  indentUp();
  write_state_.push_back(SET);
  return bsize;
}
コード例 #8
0
ファイル: TDebugProtocol.cpp プロジェクト: Bklyn/fbthrift
uint32_t TDebugProtocol::writeMapBegin(const TType keyType,
                                       const TType valType,
                                       const uint32_t size) {
  // TODO(dreiss): Optimize short maps?
  uint32_t bsize = 0;
  bsize += startItem();
  bsize += writePlain(
      "map<" + fieldTypeName(keyType) + "," + fieldTypeName(valType) + ">"
      "[" + boost::lexical_cast<string>(size) + "] {\n");
  indentUp();
  write_state_.push_back(MAP_KEY);
  return bsize;
}
コード例 #9
0
ファイル: DebugProtocol.cpp プロジェクト: 343829084/fbthrift
void DebugProtocolWriter::startItem() {
  if (writeState_.empty()) {  // top level
    return;
  }
  auto& ws = writeState_.back();
  switch (ws.type) {
  case STRUCT:
    break;
  case SET:
  case MAP_KEY:
    writeIndent();
    break;
  case MAP_VALUE:
    writePlain(" -> ");
    break;
  case LIST:
    writeIndented("[{}] = ", ws.index);
    break;
  }
}
コード例 #10
0
ファイル: DebugProtocol.cpp プロジェクト: 343829084/fbthrift
uint32_t DebugProtocolWriter::writeSetBegin(TType elemType, uint32_t size) {
  startItem();
  writePlain("set<{}>[{}] {{\n", fieldTypeName(elemType), size);
  pushState(SET);
  return 0;
}
コード例 #11
0
ファイル: DebugProtocol.cpp プロジェクト: 343829084/fbthrift
uint32_t DebugProtocolWriter::writeStructBegin(const char* name) {
  startItem();
  writePlain("{} {{\n", name);
  pushState(STRUCT);
  return 0;
}