text: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: standard_cyborg/proto/sc3d/triangle_mesh.proto
  
  #include "standard_cyborg/proto/sc3d/triangle_mesh.pb.h"
  
  #include <algorithm>
  
  #include <google/protobuf/io/coded_stream.h>
  #include <google/protobuf/extension_set.h>
  #include <google/protobuf/wire_format_lite.h>
  #include <google/protobuf/descriptor.h>
  #include <google/protobuf/generated_message_reflection.h>
  #include <google/protobuf/reflection_ops.h>
  #include <google/protobuf/wire_format.h>
  // @@protoc_insertion_point(includes)
  #include <google/protobuf/port_def.inc>
  extern PROTOBUF_INTERNAL_EXPORT_standard_5fcyborg_2fproto_2fmath_2ftensor_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Tensor_standard_5fcyborg_2fproto_2fmath_2ftensor_2eproto;
  extern PROTOBUF_INTERNAL_EXPORT_standard_5fcyborg_2fproto_2fsc3d_2fimage_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Image_standard_5fcyborg_2fproto_2fsc3d_2fimage_2eproto;
  namespace standard_cyborg {
  namespace proto {
  namespace sc3d {
  class TriangleMeshDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<TriangleMesh> _instance;
  } _TriangleMesh_default_instance_;
  }  // namespace sc3d
  }  // namespace proto
  }  // namespace standard_cyborg
  static void InitDefaultsscc_info_TriangleMesh_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_;
      new (ptr) ::standard_cyborg::proto::sc3d::TriangleMesh();
      ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
    }
    ::standard_cyborg::proto::sc3d::TriangleMesh::InitAsDefaultInstance();
  }
  
  ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_TriangleMesh_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto =
      {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, 0, InitDefaultsscc_info_TriangleMesh_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto}, {
        &scc_info_Tensor_standard_5fcyborg_2fproto_2fmath_2ftensor_2eproto.base,
        &scc_info_Image_standard_5fcyborg_2fproto_2fsc3d_2fimage_2eproto.base,}};
  
  static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto[1];
  static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto = nullptr;
  static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto = nullptr;
  
  const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
    ~0u,  // no _has_bits_
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, frame_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, positions_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, normals_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, colors_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, tex_coords_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, faces_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, distance_values_),
    PROTOBUF_FIELD_OFFSET(::standard_cyborg::proto::sc3d::TriangleMesh, texture_),
  };
  static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
    { 0, -1, sizeof(::standard_cyborg::proto::sc3d::TriangleMesh)},
  };
  
  static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_),
  };
  
  const char descriptor_table_protodef_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
    "\n.standard_cyborg/proto/sc3d/triangle_me"
    "sh.proto\022\032standard_cyborg.proto.sc3d\032\'st"
    "andard_cyborg/proto/math/tensor.proto\032&s"
    "tandard_cyborg/proto/sc3d/image.proto\"\231\003"
    "\n\014TriangleMesh\022\r\n\005frame\030\001 \001(\t\0225\n\tpositio"
    "ns\030\002 \001(\0132\".standard_cyborg.proto.math.Te"
    "nsor\0223\n\007normals\030\003 \001(\0132\".standard_cyborg."
    "proto.math.Tensor\0222\n\006colors\030\004 \001(\0132\".stan"
    "dard_cyborg.proto.math.Tensor\0226\n\ntex_coo"
    "rds\030\005 \001(\0132\".standard_cyborg.proto.math.T"
    "ensor\0221\n\005faces\030\006 \001(\0132\".standard_cyborg.p"
    "roto.math.Tensor\022;\n\017distance_values\030\t \001("
    "\0132\".standard_cyborg.proto.math.Tensor\0222\n"
    "\007texture\030\007 \001(\0132!.standard_cyborg.proto.s"
    "c3d.Imageb\006proto3"
    ;
  static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_deps[2] = {
    &::descriptor_table_standard_5fcyborg_2fproto_2fmath_2ftensor_2eproto,
    &::descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2fimage_2eproto,
  };
  static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_sccs[1] = {
    &scc_info_TriangleMesh_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto.base,
  };
  static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_once;
  static bool descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_initialized = false;
  const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto = {
    &descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_initialized, descriptor_table_protodef_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto, "standard_cyborg/proto/sc3d/triangle_mesh.proto", 577,
    &descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_once, descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_sccs, descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto_deps, 1, 2,
    schemas, file_default_instances, TableStruct_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto::offsets,
    file_level_metadata_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto, 1, file_level_enum_descriptors_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto, file_level_service_descriptors_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto,
  };
  
  // Force running AddDescriptors() at dynamic initialization time.
  static bool dynamic_init_dummy_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto = (  ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto), true);
  namespace standard_cyborg {
  namespace proto {
  namespace sc3d {
  
  // ===================================================================
  
  void TriangleMesh::InitAsDefaultInstance() {
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->positions_ = const_cast< ::standard_cyborg::proto::math::Tensor*>(
        ::standard_cyborg::proto::math::Tensor::internal_default_instance());
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->normals_ = const_cast< ::standard_cyborg::proto::math::Tensor*>(
        ::standard_cyborg::proto::math::Tensor::internal_default_instance());
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->colors_ = const_cast< ::standard_cyborg::proto::math::Tensor*>(
        ::standard_cyborg::proto::math::Tensor::internal_default_instance());
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->tex_coords_ = const_cast< ::standard_cyborg::proto::math::Tensor*>(
        ::standard_cyborg::proto::math::Tensor::internal_default_instance());
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->faces_ = const_cast< ::standard_cyborg::proto::math::Tensor*>(
        ::standard_cyborg::proto::math::Tensor::internal_default_instance());
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->distance_values_ = const_cast< ::standard_cyborg::proto::math::Tensor*>(
        ::standard_cyborg::proto::math::Tensor::internal_default_instance());
    ::standard_cyborg::proto::sc3d::_TriangleMesh_default_instance_._instance.get_mutable()->texture_ = const_cast< ::standard_cyborg::proto::sc3d::Image*>(
        ::standard_cyborg::proto::sc3d::Image::internal_default_instance());
  }
  class TriangleMesh::_Internal {
   public:
    static const ::standard_cyborg::proto::math::Tensor& positions(const TriangleMesh* msg);
    static const ::standard_cyborg::proto::math::Tensor& normals(const TriangleMesh* msg);
    static const ::standard_cyborg::proto::math::Tensor& colors(const TriangleMesh* msg);
    static const ::standard_cyborg::proto::math::Tensor& tex_coords(const TriangleMesh* msg);
    static const ::standard_cyborg::proto::math::Tensor& faces(const TriangleMesh* msg);
    static const ::standard_cyborg::proto::math::Tensor& distance_values(const TriangleMesh* msg);
    static const ::standard_cyborg::proto::sc3d::Image& texture(const TriangleMesh* msg);
  };
  
  const ::standard_cyborg::proto::math::Tensor&
  TriangleMesh::_Internal::positions(const TriangleMesh* msg) {
    return *msg->positions_;
  }
  const ::standard_cyborg::proto::math::Tensor&
  TriangleMesh::_Internal::normals(const TriangleMesh* msg) {
    return *msg->normals_;
  }
  const ::standard_cyborg::proto::math::Tensor&
  TriangleMesh::_Internal::colors(const TriangleMesh* msg) {
    return *msg->colors_;
  }
  const ::standard_cyborg::proto::math::Tensor&
  TriangleMesh::_Internal::tex_coords(const TriangleMesh* msg) {
    return *msg->tex_coords_;
  }
  const ::standard_cyborg::proto::math::Tensor&
  TriangleMesh::_Internal::faces(const TriangleMesh* msg) {
    return *msg->faces_;
  }
  const ::standard_cyborg::proto::math::Tensor&
  TriangleMesh::_Internal::distance_values(const TriangleMesh* msg) {
    return *msg->distance_values_;
  }
  const ::standard_cyborg::proto::sc3d::Image&
  TriangleMesh::_Internal::texture(const TriangleMesh* msg) {
    return *msg->texture_;
  }
  void TriangleMesh::clear_positions() {
    if (GetArenaNoVirtual() == nullptr && positions_ != nullptr) {
      delete positions_;
    }
    positions_ = nullptr;
  }
  void TriangleMesh::clear_normals() {
    if (GetArenaNoVirtual() == nullptr && normals_ != nullptr) {
      delete normals_;
    }
    normals_ = nullptr;
  }
  void TriangleMesh::clear_colors() {
    if (GetArenaNoVirtual() == nullptr && colors_ != nullptr) {
      delete colors_;
    }
    colors_ = nullptr;
  }
  void TriangleMesh::clear_tex_coords() {
    if (GetArenaNoVirtual() == nullptr && tex_coords_ != nullptr) {
      delete tex_coords_;
    }
    tex_coords_ = nullptr;
  }
  void TriangleMesh::clear_faces() {
    if (GetArenaNoVirtual() == nullptr && faces_ != nullptr) {
      delete faces_;
    }
    faces_ = nullptr;
  }
  void TriangleMesh::clear_distance_values() {
    if (GetArenaNoVirtual() == nullptr && distance_values_ != nullptr) {
      delete distance_values_;
    }
    distance_values_ = nullptr;
  }
  void TriangleMesh::clear_texture() {
    if (GetArenaNoVirtual() == nullptr && texture_ != nullptr) {
      delete texture_;
    }
    texture_ = nullptr;
  }
  TriangleMesh::TriangleMesh()
    : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:standard_cyborg.proto.sc3d.TriangleMesh)
  }
  TriangleMesh::TriangleMesh(const TriangleMesh& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _internal_metadata_(nullptr) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    frame_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    if (!from._internal_frame().empty()) {
      frame_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.frame_);
    }
    if (from._internal_has_positions()) {
      positions_ = new ::standard_cyborg::proto::math::Tensor(*from.positions_);
    } else {
      positions_ = nullptr;
    }
    if (from._internal_has_normals()) {
      normals_ = new ::standard_cyborg::proto::math::Tensor(*from.normals_);
    } else {
      normals_ = nullptr;
    }
    if (from._internal_has_colors()) {
      colors_ = new ::standard_cyborg::proto::math::Tensor(*from.colors_);
    } else {
      colors_ = nullptr;
    }
    if (from._internal_has_tex_coords()) {
      tex_coords_ = new ::standard_cyborg::proto::math::Tensor(*from.tex_coords_);
    } else {
      tex_coords_ = nullptr;
    }
    if (from._internal_has_faces()) {
      faces_ = new ::standard_cyborg::proto::math::Tensor(*from.faces_);
    } else {
      faces_ = nullptr;
    }
    if (from._internal_has_texture()) {
      texture_ = new ::standard_cyborg::proto::sc3d::Image(*from.texture_);
    } else {
      texture_ = nullptr;
    }
    if (from._internal_has_distance_values()) {
      distance_values_ = new ::standard_cyborg::proto::math::Tensor(*from.distance_values_);
    } else {
      distance_values_ = nullptr;
    }
    // @@protoc_insertion_point(copy_constructor:standard_cyborg.proto.sc3d.TriangleMesh)
  }
  
  void TriangleMesh::SharedCtor() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_TriangleMesh_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto.base);
    frame_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    ::memset(&positions_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&distance_values_) -
        reinterpret_cast<char*>(&positions_)) + sizeof(distance_values_));
  }
  
  TriangleMesh::~TriangleMesh() {
    // @@protoc_insertion_point(destructor:standard_cyborg.proto.sc3d.TriangleMesh)
    SharedDtor();
  }
  
  void TriangleMesh::SharedDtor() {
    frame_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete positions_;
    if (this != internal_default_instance()) delete normals_;
    if (this != internal_default_instance()) delete colors_;
    if (this != internal_default_instance()) delete tex_coords_;
    if (this != internal_default_instance()) delete faces_;
    if (this != internal_default_instance()) delete texture_;
    if (this != internal_default_instance()) delete distance_values_;
  }
  
  void TriangleMesh::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const TriangleMesh& TriangleMesh::default_instance() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_TriangleMesh_standard_5fcyborg_2fproto_2fsc3d_2ftriangle_5fmesh_2eproto.base);
    return *internal_default_instance();
  }
  
  
  void TriangleMesh::Clear() {
  // @@protoc_insertion_point(message_clear_start:standard_cyborg.proto.sc3d.TriangleMesh)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    frame_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == nullptr && positions_ != nullptr) {
      delete positions_;
    }
    positions_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && normals_ != nullptr) {
      delete normals_;
    }
    normals_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && colors_ != nullptr) {
      delete colors_;
    }
    colors_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && tex_coords_ != nullptr) {
      delete tex_coords_;
    }
    tex_coords_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && faces_ != nullptr) {
      delete faces_;
    }
    faces_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && texture_ != nullptr) {
      delete texture_;
    }
    texture_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && distance_values_ != nullptr) {
      delete distance_values_;
    }
    distance_values_ = nullptr;
    _internal_metadata_.Clear();
  }
  
  const char* TriangleMesh::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    while (!ctx->Done(&ptr)) {
      ::PROTOBUF_NAMESPACE_ID::uint32 tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      CHK_(ptr);
      switch (tag >> 3) {
        // string frame = 1;
        case 1:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
            auto str = _internal_mutable_frame();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "standard_cyborg.proto.sc3d.TriangleMesh.frame"));
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.math.Tensor positions = 2;
        case 2:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
            ptr = ctx->ParseMessage(_internal_mutable_positions(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.math.Tensor normals = 3;
        case 3:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
            ptr = ctx->ParseMessage(_internal_mutable_normals(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.math.Tensor colors = 4;
        case 4:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
            ptr = ctx->ParseMessage(_internal_mutable_colors(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.math.Tensor tex_coords = 5;
        case 5:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
            ptr = ctx->ParseMessage(_internal_mutable_tex_coords(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.math.Tensor faces = 6;
        case 6:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
            ptr = ctx->ParseMessage(_internal_mutable_faces(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.sc3d.Image texture = 7;
        case 7:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 58)) {
            ptr = ctx->ParseMessage(_internal_mutable_texture(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .standard_cyborg.proto.math.Tensor distance_values = 9;
        case 9:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74)) {
            ptr = ctx->ParseMessage(_internal_mutable_distance_values(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        default: {
        handle_unusual:
          if ((tag & 7) == 4 || tag == 0) {
            ctx->SetLastTag(tag);
            goto success;
          }
          ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
          CHK_(ptr != nullptr);
          continue;
        }
      }  // switch
    }  // while
  success:
    return ptr;
  failure:
    ptr = nullptr;
    goto success;
  #undef CHK_
  }
  
  ::PROTOBUF_NAMESPACE_ID::uint8* TriangleMesh::_InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:standard_cyborg.proto.sc3d.TriangleMesh)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string frame = 1;
    if (this->frame().size() > 0) {
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
        this->_internal_frame().data(), static_cast<int>(this->_internal_frame().length()),
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
        "standard_cyborg.proto.sc3d.TriangleMesh.frame");
      target = stream->WriteStringMaybeAliased(
          1, this->_internal_frame(), target);
    }
  
    // .standard_cyborg.proto.math.Tensor positions = 2;
    if (this->has_positions()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          2, _Internal::positions(this), target, stream);
    }
  
    // .standard_cyborg.proto.math.Tensor normals = 3;
    if (this->has_normals()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          3, _Internal::normals(this), target, stream);
    }
  
    // .standard_cyborg.proto.math.Tensor colors = 4;
    if (this->has_colors()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          4, _Internal::colors(this), target, stream);
    }
  
    // .standard_cyborg.proto.math.Tensor tex_coords = 5;
    if (this->has_tex_coords()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          5, _Internal::tex_coords(this), target, stream);
    }
  
    // .standard_cyborg.proto.math.Tensor faces = 6;
    if (this->has_faces()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          6, _Internal::faces(this), target, stream);
    }
  
    // .standard_cyborg.proto.sc3d.Image texture = 7;
    if (this->has_texture()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          7, _Internal::texture(this), target, stream);
    }
  
    // .standard_cyborg.proto.math.Tensor distance_values = 9;
    if (this->has_distance_values()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          9, _Internal::distance_values(this), target, stream);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields(), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:standard_cyborg.proto.sc3d.TriangleMesh)
    return target;
  }
  
  size_t TriangleMesh::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:standard_cyborg.proto.sc3d.TriangleMesh)
    size_t total_size = 0;
  
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    // string frame = 1;
    if (this->frame().size() > 0) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_frame());
    }
  
    // .standard_cyborg.proto.math.Tensor positions = 2;
    if (this->has_positions()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *positions_);
    }
  
    // .standard_cyborg.proto.math.Tensor normals = 3;
    if (this->has_normals()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *normals_);
    }
  
    // .standard_cyborg.proto.math.Tensor colors = 4;
    if (this->has_colors()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *colors_);
    }
  
    // .standard_cyborg.proto.math.Tensor tex_coords = 5;
    if (this->has_tex_coords()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *tex_coords_);
    }
  
    // .standard_cyborg.proto.math.Tensor faces = 6;
    if (this->has_faces()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *faces_);
    }
  
    // .standard_cyborg.proto.sc3d.Image texture = 7;
    if (this->has_texture()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *texture_);
    }
  
    // .standard_cyborg.proto.math.Tensor distance_values = 9;
    if (this->has_distance_values()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *distance_values_);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
          _internal_metadata_, total_size, &_cached_size_);
    }
    int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void TriangleMesh::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:standard_cyborg.proto.sc3d.TriangleMesh)
    GOOGLE_DCHECK_NE(&from, this);
    const TriangleMesh* source =
        ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<TriangleMesh>(
            &from);
    if (source == nullptr) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:standard_cyborg.proto.sc3d.TriangleMesh)
      ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:standard_cyborg.proto.sc3d.TriangleMesh)
      MergeFrom(*source);
    }
  }
  
  void TriangleMesh::MergeFrom(const TriangleMesh& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:standard_cyborg.proto.sc3d.TriangleMesh)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.frame().size() > 0) {
  
      frame_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.frame_);
    }
    if (from.has_positions()) {
      _internal_mutable_positions()->::standard_cyborg::proto::math::Tensor::MergeFrom(from._internal_positions());
    }
    if (from.has_normals()) {
      _internal_mutable_normals()->::standard_cyborg::proto::math::Tensor::MergeFrom(from._internal_normals());
    }
    if (from.has_colors()) {
      _internal_mutable_colors()->::standard_cyborg::proto::math::Tensor::MergeFrom(from._internal_colors());
    }
    if (from.has_tex_coords()) {
      _internal_mutable_tex_coords()->::standard_cyborg::proto::math::Tensor::MergeFrom(from._internal_tex_coords());
    }
    if (from.has_faces()) {
      _internal_mutable_faces()->::standard_cyborg::proto::math::Tensor::MergeFrom(from._internal_faces());
    }
    if (from.has_texture()) {
      _internal_mutable_texture()->::standard_cyborg::proto::sc3d::Image::MergeFrom(from._internal_texture());
    }
    if (from.has_distance_values()) {
      _internal_mutable_distance_values()->::standard_cyborg::proto::math::Tensor::MergeFrom(from._internal_distance_values());
    }
  }
  
  void TriangleMesh::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:standard_cyborg.proto.sc3d.TriangleMesh)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void TriangleMesh::CopyFrom(const TriangleMesh& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:standard_cyborg.proto.sc3d.TriangleMesh)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool TriangleMesh::IsInitialized() const {
    return true;
  }
  
  void TriangleMesh::InternalSwap(TriangleMesh* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
    frame_.Swap(&other->frame_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(positions_, other->positions_);
    swap(normals_, other->normals_);
    swap(colors_, other->colors_);
    swap(tex_coords_, other->tex_coords_);
    swap(faces_, other->faces_);
    swap(texture_, other->texture_);
    swap(distance_values_, other->distance_values_);
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata TriangleMesh::GetMetadata() const {
    return GetMetadataStatic();
  }
  
  
  // @@protoc_insertion_point(namespace_scope)
  }  // namespace sc3d
  }  // namespace proto
  }  // namespace standard_cyborg
  PROTOBUF_NAMESPACE_OPEN
  template<> PROTOBUF_NOINLINE ::standard_cyborg::proto::sc3d::TriangleMesh* Arena::CreateMaybeMessage< ::standard_cyborg::proto::sc3d::TriangleMesh >(Arena* arena) {
    return Arena::CreateInternal< ::standard_cyborg::proto::sc3d::TriangleMesh >(arena);
  }
  PROTOBUF_NAMESPACE_CLOSE
  
  // @@protoc_insertion_point(global_scope)
  #include <google/protobuf/port_undef.inc>
  