// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: ortools/data/jobshop_scheduling.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_ortools_2fdata_2fjobshop_5fscheduling_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_ortools_2fdata_2fjobshop_5fscheduling_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3012000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3012002 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata_lite.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/unknown_field_set.h>
#include <google/protobuf/wrappers.pb.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_ortools_2fdata_2fjobshop_5fscheduling_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[9]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
namespace operations_research {
namespace data {
namespace jssp {
class AssignedJob;
class AssignedJobDefaultTypeInternal;
extern AssignedJobDefaultTypeInternal _AssignedJob_default_instance_;
class AssignedTask;
class AssignedTaskDefaultTypeInternal;
extern AssignedTaskDefaultTypeInternal _AssignedTask_default_instance_;
class Job;
class JobDefaultTypeInternal;
extern JobDefaultTypeInternal _Job_default_instance_;
class JobPrecedence;
class JobPrecedenceDefaultTypeInternal;
extern JobPrecedenceDefaultTypeInternal _JobPrecedence_default_instance_;
class JsspInputProblem;
class JsspInputProblemDefaultTypeInternal;
extern JsspInputProblemDefaultTypeInternal _JsspInputProblem_default_instance_;
class JsspOutputSolution;
class JsspOutputSolutionDefaultTypeInternal;
extern JsspOutputSolutionDefaultTypeInternal _JsspOutputSolution_default_instance_;
class Machine;
class MachineDefaultTypeInternal;
extern MachineDefaultTypeInternal _Machine_default_instance_;
class Task;
class TaskDefaultTypeInternal;
extern TaskDefaultTypeInternal _Task_default_instance_;
class TransitionTimeMatrix;
class TransitionTimeMatrixDefaultTypeInternal;
extern TransitionTimeMatrixDefaultTypeInternal _TransitionTimeMatrix_default_instance_;
}  // namespace jssp
}  // namespace data
}  // namespace operations_research
PROTOBUF_NAMESPACE_OPEN
template<> ::operations_research::data::jssp::AssignedJob* Arena::CreateMaybeMessage<::operations_research::data::jssp::AssignedJob>(Arena*);
template<> ::operations_research::data::jssp::AssignedTask* Arena::CreateMaybeMessage<::operations_research::data::jssp::AssignedTask>(Arena*);
template<> ::operations_research::data::jssp::Job* Arena::CreateMaybeMessage<::operations_research::data::jssp::Job>(Arena*);
template<> ::operations_research::data::jssp::JobPrecedence* Arena::CreateMaybeMessage<::operations_research::data::jssp::JobPrecedence>(Arena*);
template<> ::operations_research::data::jssp::JsspInputProblem* Arena::CreateMaybeMessage<::operations_research::data::jssp::JsspInputProblem>(Arena*);
template<> ::operations_research::data::jssp::JsspOutputSolution* Arena::CreateMaybeMessage<::operations_research::data::jssp::JsspOutputSolution>(Arena*);
template<> ::operations_research::data::jssp::Machine* Arena::CreateMaybeMessage<::operations_research::data::jssp::Machine>(Arena*);
template<> ::operations_research::data::jssp::Task* Arena::CreateMaybeMessage<::operations_research::data::jssp::Task>(Arena*);
template<> ::operations_research::data::jssp::TransitionTimeMatrix* Arena::CreateMaybeMessage<::operations_research::data::jssp::TransitionTimeMatrix>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace operations_research {
namespace data {
namespace jssp {

// ===================================================================

class Task PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.Task) */ {
 public:
  inline Task() : Task(nullptr) {};
  virtual ~Task();

  Task(const Task& from);
  Task(Task&& from) noexcept
    : Task() {
    *this = ::std::move(from);
  }

  inline Task& operator=(const Task& from) {
    CopyFrom(from);
    return *this;
  }
  inline Task& operator=(Task&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Task& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const Task* internal_default_instance() {
    return reinterpret_cast<const Task*>(
               &_Task_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(Task& a, Task& b) {
    a.Swap(&b);
  }
  inline void Swap(Task* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Task* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Task* New() const final {
    return CreateMaybeMessage<Task>(nullptr);
  }

  Task* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Task>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Task& from);
  void MergeFrom(const Task& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Task* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.Task";
  }
  protected:
  explicit Task(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kMachineFieldNumber = 1,
    kDurationFieldNumber = 2,
    kCostFieldNumber = 3,
  };
  // repeated int32 machine = 1;
  int machine_size() const;
  private:
  int _internal_machine_size() const;
  public:
  void clear_machine();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_machine(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_machine() const;
  void _internal_add_machine(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_machine();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 machine(int index) const;
  void set_machine(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_machine(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      machine() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_machine();

  // repeated int64 duration = 2;
  int duration_size() const;
  private:
  int _internal_duration_size() const;
  public:
  void clear_duration();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_duration(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_duration() const;
  void _internal_add_duration(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_duration();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 duration(int index) const;
  void set_duration(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_duration(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      duration() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_duration();

  // repeated int64 cost = 3;
  int cost_size() const;
  private:
  int _internal_cost_size() const;
  public:
  void clear_cost();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_cost(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_cost() const;
  void _internal_add_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_cost();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 cost(int index) const;
  void set_cost(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      cost() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_cost();

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.Task)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > machine_;
  mutable std::atomic<int> _machine_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > duration_;
  mutable std::atomic<int> _duration_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > cost_;
  mutable std::atomic<int> _cost_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class Job PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.Job) */ {
 public:
  inline Job() : Job(nullptr) {};
  virtual ~Job();

  Job(const Job& from);
  Job(Job&& from) noexcept
    : Job() {
    *this = ::std::move(from);
  }

  inline Job& operator=(const Job& from) {
    CopyFrom(from);
    return *this;
  }
  inline Job& operator=(Job&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Job& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const Job* internal_default_instance() {
    return reinterpret_cast<const Job*>(
               &_Job_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(Job& a, Job& b) {
    a.Swap(&b);
  }
  inline void Swap(Job* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Job* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Job* New() const final {
    return CreateMaybeMessage<Job>(nullptr);
  }

  Job* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Job>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Job& from);
  void MergeFrom(const Job& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Job* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.Job";
  }
  protected:
  explicit Job(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTasksFieldNumber = 1,
    kNameFieldNumber = 16,
    kEarliestStartFieldNumber = 2,
    kLatestEndFieldNumber = 7,
    kEarlyDueDateFieldNumber = 3,
    kLateDueDateFieldNumber = 4,
    kEarlinessCostPerTimeUnitFieldNumber = 5,
    kLatenessCostPerTimeUnitFieldNumber = 6,
  };
  // repeated .operations_research.data.jssp.Task tasks = 1;
  int tasks_size() const;
  private:
  int _internal_tasks_size() const;
  public:
  void clear_tasks();
  ::operations_research::data::jssp::Task* mutable_tasks(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Task >*
      mutable_tasks();
  private:
  const ::operations_research::data::jssp::Task& _internal_tasks(int index) const;
  ::operations_research::data::jssp::Task* _internal_add_tasks();
  public:
  const ::operations_research::data::jssp::Task& tasks(int index) const;
  ::operations_research::data::jssp::Task* add_tasks();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Task >&
      tasks() const;

  // string name = 16;
  void clear_name();
  const std::string& name() const;
  void set_name(const std::string& value);
  void set_name(std::string&& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  std::string* mutable_name();
  std::string* release_name();
  void set_allocated_name(std::string* name);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_name();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_name(
      std::string* name);
  private:
  const std::string& _internal_name() const;
  void _internal_set_name(const std::string& value);
  std::string* _internal_mutable_name();
  public:

  // .google.protobuf.Int64Value earliest_start = 2;
  bool has_earliest_start() const;
  private:
  bool _internal_has_earliest_start() const;
  public:
  void clear_earliest_start();
  const PROTOBUF_NAMESPACE_ID::Int64Value& earliest_start() const;
  PROTOBUF_NAMESPACE_ID::Int64Value* release_earliest_start();
  PROTOBUF_NAMESPACE_ID::Int64Value* mutable_earliest_start();
  void set_allocated_earliest_start(PROTOBUF_NAMESPACE_ID::Int64Value* earliest_start);
  private:
  const PROTOBUF_NAMESPACE_ID::Int64Value& _internal_earliest_start() const;
  PROTOBUF_NAMESPACE_ID::Int64Value* _internal_mutable_earliest_start();
  public:
  void unsafe_arena_set_allocated_earliest_start(
      PROTOBUF_NAMESPACE_ID::Int64Value* earliest_start);
  PROTOBUF_NAMESPACE_ID::Int64Value* unsafe_arena_release_earliest_start();

  // .google.protobuf.Int64Value latest_end = 7;
  bool has_latest_end() const;
  private:
  bool _internal_has_latest_end() const;
  public:
  void clear_latest_end();
  const PROTOBUF_NAMESPACE_ID::Int64Value& latest_end() const;
  PROTOBUF_NAMESPACE_ID::Int64Value* release_latest_end();
  PROTOBUF_NAMESPACE_ID::Int64Value* mutable_latest_end();
  void set_allocated_latest_end(PROTOBUF_NAMESPACE_ID::Int64Value* latest_end);
  private:
  const PROTOBUF_NAMESPACE_ID::Int64Value& _internal_latest_end() const;
  PROTOBUF_NAMESPACE_ID::Int64Value* _internal_mutable_latest_end();
  public:
  void unsafe_arena_set_allocated_latest_end(
      PROTOBUF_NAMESPACE_ID::Int64Value* latest_end);
  PROTOBUF_NAMESPACE_ID::Int64Value* unsafe_arena_release_latest_end();

  // int64 early_due_date = 3;
  void clear_early_due_date();
  ::PROTOBUF_NAMESPACE_ID::int64 early_due_date() const;
  void set_early_due_date(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_early_due_date() const;
  void _internal_set_early_due_date(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 late_due_date = 4;
  void clear_late_due_date();
  ::PROTOBUF_NAMESPACE_ID::int64 late_due_date() const;
  void set_late_due_date(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_late_due_date() const;
  void _internal_set_late_due_date(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 earliness_cost_per_time_unit = 5;
  void clear_earliness_cost_per_time_unit();
  ::PROTOBUF_NAMESPACE_ID::int64 earliness_cost_per_time_unit() const;
  void set_earliness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_earliness_cost_per_time_unit() const;
  void _internal_set_earliness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 lateness_cost_per_time_unit = 6;
  void clear_lateness_cost_per_time_unit();
  ::PROTOBUF_NAMESPACE_ID::int64 lateness_cost_per_time_unit() const;
  void set_lateness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_lateness_cost_per_time_unit() const;
  void _internal_set_lateness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.Job)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Task > tasks_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  PROTOBUF_NAMESPACE_ID::Int64Value* earliest_start_;
  PROTOBUF_NAMESPACE_ID::Int64Value* latest_end_;
  ::PROTOBUF_NAMESPACE_ID::int64 early_due_date_;
  ::PROTOBUF_NAMESPACE_ID::int64 late_due_date_;
  ::PROTOBUF_NAMESPACE_ID::int64 earliness_cost_per_time_unit_;
  ::PROTOBUF_NAMESPACE_ID::int64 lateness_cost_per_time_unit_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class TransitionTimeMatrix PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.TransitionTimeMatrix) */ {
 public:
  inline TransitionTimeMatrix() : TransitionTimeMatrix(nullptr) {};
  virtual ~TransitionTimeMatrix();

  TransitionTimeMatrix(const TransitionTimeMatrix& from);
  TransitionTimeMatrix(TransitionTimeMatrix&& from) noexcept
    : TransitionTimeMatrix() {
    *this = ::std::move(from);
  }

  inline TransitionTimeMatrix& operator=(const TransitionTimeMatrix& from) {
    CopyFrom(from);
    return *this;
  }
  inline TransitionTimeMatrix& operator=(TransitionTimeMatrix&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const TransitionTimeMatrix& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TransitionTimeMatrix* internal_default_instance() {
    return reinterpret_cast<const TransitionTimeMatrix*>(
               &_TransitionTimeMatrix_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(TransitionTimeMatrix& a, TransitionTimeMatrix& b) {
    a.Swap(&b);
  }
  inline void Swap(TransitionTimeMatrix* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TransitionTimeMatrix* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline TransitionTimeMatrix* New() const final {
    return CreateMaybeMessage<TransitionTimeMatrix>(nullptr);
  }

  TransitionTimeMatrix* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<TransitionTimeMatrix>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const TransitionTimeMatrix& from);
  void MergeFrom(const TransitionTimeMatrix& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TransitionTimeMatrix* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.TransitionTimeMatrix";
  }
  protected:
  explicit TransitionTimeMatrix(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTransitionTimeFieldNumber = 1,
  };
  // repeated int64 transition_time = 1;
  int transition_time_size() const;
  private:
  int _internal_transition_time_size() const;
  public:
  void clear_transition_time();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_transition_time(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_transition_time() const;
  void _internal_add_transition_time(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_transition_time();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 transition_time(int index) const;
  void set_transition_time(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_transition_time(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      transition_time() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_transition_time();

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.TransitionTimeMatrix)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > transition_time_;
  mutable std::atomic<int> _transition_time_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class Machine PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.Machine) */ {
 public:
  inline Machine() : Machine(nullptr) {};
  virtual ~Machine();

  Machine(const Machine& from);
  Machine(Machine&& from) noexcept
    : Machine() {
    *this = ::std::move(from);
  }

  inline Machine& operator=(const Machine& from) {
    CopyFrom(from);
    return *this;
  }
  inline Machine& operator=(Machine&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Machine& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const Machine* internal_default_instance() {
    return reinterpret_cast<const Machine*>(
               &_Machine_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    3;

  friend void swap(Machine& a, Machine& b) {
    a.Swap(&b);
  }
  inline void Swap(Machine* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Machine* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Machine* New() const final {
    return CreateMaybeMessage<Machine>(nullptr);
  }

  Machine* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Machine>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Machine& from);
  void MergeFrom(const Machine& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Machine* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.Machine";
  }
  protected:
  explicit Machine(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kNameFieldNumber = 16,
    kTransitionTimeMatrixFieldNumber = 1,
  };
  // string name = 16;
  void clear_name();
  const std::string& name() const;
  void set_name(const std::string& value);
  void set_name(std::string&& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  std::string* mutable_name();
  std::string* release_name();
  void set_allocated_name(std::string* name);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_name();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_name(
      std::string* name);
  private:
  const std::string& _internal_name() const;
  void _internal_set_name(const std::string& value);
  std::string* _internal_mutable_name();
  public:

  // .operations_research.data.jssp.TransitionTimeMatrix transition_time_matrix = 1;
  bool has_transition_time_matrix() const;
  private:
  bool _internal_has_transition_time_matrix() const;
  public:
  void clear_transition_time_matrix();
  const ::operations_research::data::jssp::TransitionTimeMatrix& transition_time_matrix() const;
  ::operations_research::data::jssp::TransitionTimeMatrix* release_transition_time_matrix();
  ::operations_research::data::jssp::TransitionTimeMatrix* mutable_transition_time_matrix();
  void set_allocated_transition_time_matrix(::operations_research::data::jssp::TransitionTimeMatrix* transition_time_matrix);
  private:
  const ::operations_research::data::jssp::TransitionTimeMatrix& _internal_transition_time_matrix() const;
  ::operations_research::data::jssp::TransitionTimeMatrix* _internal_mutable_transition_time_matrix();
  public:
  void unsafe_arena_set_allocated_transition_time_matrix(
      ::operations_research::data::jssp::TransitionTimeMatrix* transition_time_matrix);
  ::operations_research::data::jssp::TransitionTimeMatrix* unsafe_arena_release_transition_time_matrix();

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.Machine)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  ::operations_research::data::jssp::TransitionTimeMatrix* transition_time_matrix_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class JobPrecedence PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.JobPrecedence) */ {
 public:
  inline JobPrecedence() : JobPrecedence(nullptr) {};
  virtual ~JobPrecedence();

  JobPrecedence(const JobPrecedence& from);
  JobPrecedence(JobPrecedence&& from) noexcept
    : JobPrecedence() {
    *this = ::std::move(from);
  }

  inline JobPrecedence& operator=(const JobPrecedence& from) {
    CopyFrom(from);
    return *this;
  }
  inline JobPrecedence& operator=(JobPrecedence&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const JobPrecedence& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const JobPrecedence* internal_default_instance() {
    return reinterpret_cast<const JobPrecedence*>(
               &_JobPrecedence_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    4;

  friend void swap(JobPrecedence& a, JobPrecedence& b) {
    a.Swap(&b);
  }
  inline void Swap(JobPrecedence* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(JobPrecedence* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline JobPrecedence* New() const final {
    return CreateMaybeMessage<JobPrecedence>(nullptr);
  }

  JobPrecedence* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<JobPrecedence>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const JobPrecedence& from);
  void MergeFrom(const JobPrecedence& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(JobPrecedence* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.JobPrecedence";
  }
  protected:
  explicit JobPrecedence(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kFirstJobIndexFieldNumber = 1,
    kSecondJobIndexFieldNumber = 2,
    kMinDelayFieldNumber = 3,
  };
  // int32 first_job_index = 1;
  void clear_first_job_index();
  ::PROTOBUF_NAMESPACE_ID::int32 first_job_index() const;
  void set_first_job_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_first_job_index() const;
  void _internal_set_first_job_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // int32 second_job_index = 2;
  void clear_second_job_index();
  ::PROTOBUF_NAMESPACE_ID::int32 second_job_index() const;
  void set_second_job_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_second_job_index() const;
  void _internal_set_second_job_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // int64 min_delay = 3;
  void clear_min_delay();
  ::PROTOBUF_NAMESPACE_ID::int64 min_delay() const;
  void set_min_delay(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_min_delay() const;
  void _internal_set_min_delay(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.JobPrecedence)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::int32 first_job_index_;
  ::PROTOBUF_NAMESPACE_ID::int32 second_job_index_;
  ::PROTOBUF_NAMESPACE_ID::int64 min_delay_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class JsspInputProblem PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.JsspInputProblem) */ {
 public:
  inline JsspInputProblem() : JsspInputProblem(nullptr) {};
  virtual ~JsspInputProblem();

  JsspInputProblem(const JsspInputProblem& from);
  JsspInputProblem(JsspInputProblem&& from) noexcept
    : JsspInputProblem() {
    *this = ::std::move(from);
  }

  inline JsspInputProblem& operator=(const JsspInputProblem& from) {
    CopyFrom(from);
    return *this;
  }
  inline JsspInputProblem& operator=(JsspInputProblem&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const JsspInputProblem& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const JsspInputProblem* internal_default_instance() {
    return reinterpret_cast<const JsspInputProblem*>(
               &_JsspInputProblem_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    5;

  friend void swap(JsspInputProblem& a, JsspInputProblem& b) {
    a.Swap(&b);
  }
  inline void Swap(JsspInputProblem* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(JsspInputProblem* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline JsspInputProblem* New() const final {
    return CreateMaybeMessage<JsspInputProblem>(nullptr);
  }

  JsspInputProblem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<JsspInputProblem>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const JsspInputProblem& from);
  void MergeFrom(const JsspInputProblem& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(JsspInputProblem* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.JsspInputProblem";
  }
  protected:
  explicit JsspInputProblem(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kJobsFieldNumber = 1,
    kMachinesFieldNumber = 2,
    kPrecedencesFieldNumber = 3,
    kNameFieldNumber = 16,
    kScalingFactorFieldNumber = 5,
    kMakespanCostPerTimeUnitFieldNumber = 4,
    kSeedFieldNumber = 24,
  };
  // repeated .operations_research.data.jssp.Job jobs = 1;
  int jobs_size() const;
  private:
  int _internal_jobs_size() const;
  public:
  void clear_jobs();
  ::operations_research::data::jssp::Job* mutable_jobs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Job >*
      mutable_jobs();
  private:
  const ::operations_research::data::jssp::Job& _internal_jobs(int index) const;
  ::operations_research::data::jssp::Job* _internal_add_jobs();
  public:
  const ::operations_research::data::jssp::Job& jobs(int index) const;
  ::operations_research::data::jssp::Job* add_jobs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Job >&
      jobs() const;

  // repeated .operations_research.data.jssp.Machine machines = 2;
  int machines_size() const;
  private:
  int _internal_machines_size() const;
  public:
  void clear_machines();
  ::operations_research::data::jssp::Machine* mutable_machines(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Machine >*
      mutable_machines();
  private:
  const ::operations_research::data::jssp::Machine& _internal_machines(int index) const;
  ::operations_research::data::jssp::Machine* _internal_add_machines();
  public:
  const ::operations_research::data::jssp::Machine& machines(int index) const;
  ::operations_research::data::jssp::Machine* add_machines();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Machine >&
      machines() const;

  // repeated .operations_research.data.jssp.JobPrecedence precedences = 3;
  int precedences_size() const;
  private:
  int _internal_precedences_size() const;
  public:
  void clear_precedences();
  ::operations_research::data::jssp::JobPrecedence* mutable_precedences(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::JobPrecedence >*
      mutable_precedences();
  private:
  const ::operations_research::data::jssp::JobPrecedence& _internal_precedences(int index) const;
  ::operations_research::data::jssp::JobPrecedence* _internal_add_precedences();
  public:
  const ::operations_research::data::jssp::JobPrecedence& precedences(int index) const;
  ::operations_research::data::jssp::JobPrecedence* add_precedences();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::JobPrecedence >&
      precedences() const;

  // string name = 16;
  void clear_name();
  const std::string& name() const;
  void set_name(const std::string& value);
  void set_name(std::string&& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  std::string* mutable_name();
  std::string* release_name();
  void set_allocated_name(std::string* name);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_name();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_name(
      std::string* name);
  private:
  const std::string& _internal_name() const;
  void _internal_set_name(const std::string& value);
  std::string* _internal_mutable_name();
  public:

  // .google.protobuf.DoubleValue scaling_factor = 5;
  bool has_scaling_factor() const;
  private:
  bool _internal_has_scaling_factor() const;
  public:
  void clear_scaling_factor();
  const PROTOBUF_NAMESPACE_ID::DoubleValue& scaling_factor() const;
  PROTOBUF_NAMESPACE_ID::DoubleValue* release_scaling_factor();
  PROTOBUF_NAMESPACE_ID::DoubleValue* mutable_scaling_factor();
  void set_allocated_scaling_factor(PROTOBUF_NAMESPACE_ID::DoubleValue* scaling_factor);
  private:
  const PROTOBUF_NAMESPACE_ID::DoubleValue& _internal_scaling_factor() const;
  PROTOBUF_NAMESPACE_ID::DoubleValue* _internal_mutable_scaling_factor();
  public:
  void unsafe_arena_set_allocated_scaling_factor(
      PROTOBUF_NAMESPACE_ID::DoubleValue* scaling_factor);
  PROTOBUF_NAMESPACE_ID::DoubleValue* unsafe_arena_release_scaling_factor();

  // int64 makespan_cost_per_time_unit = 4;
  void clear_makespan_cost_per_time_unit();
  ::PROTOBUF_NAMESPACE_ID::int64 makespan_cost_per_time_unit() const;
  void set_makespan_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_makespan_cost_per_time_unit() const;
  void _internal_set_makespan_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int32 seed = 24;
  void clear_seed();
  ::PROTOBUF_NAMESPACE_ID::int32 seed() const;
  void set_seed(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_seed() const;
  void _internal_set_seed(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.JsspInputProblem)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Job > jobs_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Machine > machines_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::JobPrecedence > precedences_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  PROTOBUF_NAMESPACE_ID::DoubleValue* scaling_factor_;
  ::PROTOBUF_NAMESPACE_ID::int64 makespan_cost_per_time_unit_;
  ::PROTOBUF_NAMESPACE_ID::int32 seed_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class AssignedTask PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.AssignedTask) */ {
 public:
  inline AssignedTask() : AssignedTask(nullptr) {};
  virtual ~AssignedTask();

  AssignedTask(const AssignedTask& from);
  AssignedTask(AssignedTask&& from) noexcept
    : AssignedTask() {
    *this = ::std::move(from);
  }

  inline AssignedTask& operator=(const AssignedTask& from) {
    CopyFrom(from);
    return *this;
  }
  inline AssignedTask& operator=(AssignedTask&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const AssignedTask& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const AssignedTask* internal_default_instance() {
    return reinterpret_cast<const AssignedTask*>(
               &_AssignedTask_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    6;

  friend void swap(AssignedTask& a, AssignedTask& b) {
    a.Swap(&b);
  }
  inline void Swap(AssignedTask* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AssignedTask* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline AssignedTask* New() const final {
    return CreateMaybeMessage<AssignedTask>(nullptr);
  }

  AssignedTask* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<AssignedTask>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const AssignedTask& from);
  void MergeFrom(const AssignedTask& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AssignedTask* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.AssignedTask";
  }
  protected:
  explicit AssignedTask(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStartTimeFieldNumber = 2,
    kAlternativeIndexFieldNumber = 1,
  };
  // int64 start_time = 2;
  void clear_start_time();
  ::PROTOBUF_NAMESPACE_ID::int64 start_time() const;
  void set_start_time(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_start_time() const;
  void _internal_set_start_time(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int32 alternative_index = 1;
  void clear_alternative_index();
  ::PROTOBUF_NAMESPACE_ID::int32 alternative_index() const;
  void set_alternative_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_alternative_index() const;
  void _internal_set_alternative_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.AssignedTask)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::int64 start_time_;
  ::PROTOBUF_NAMESPACE_ID::int32 alternative_index_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class AssignedJob PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.AssignedJob) */ {
 public:
  inline AssignedJob() : AssignedJob(nullptr) {};
  virtual ~AssignedJob();

  AssignedJob(const AssignedJob& from);
  AssignedJob(AssignedJob&& from) noexcept
    : AssignedJob() {
    *this = ::std::move(from);
  }

  inline AssignedJob& operator=(const AssignedJob& from) {
    CopyFrom(from);
    return *this;
  }
  inline AssignedJob& operator=(AssignedJob&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const AssignedJob& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const AssignedJob* internal_default_instance() {
    return reinterpret_cast<const AssignedJob*>(
               &_AssignedJob_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    7;

  friend void swap(AssignedJob& a, AssignedJob& b) {
    a.Swap(&b);
  }
  inline void Swap(AssignedJob* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AssignedJob* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline AssignedJob* New() const final {
    return CreateMaybeMessage<AssignedJob>(nullptr);
  }

  AssignedJob* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<AssignedJob>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const AssignedJob& from);
  void MergeFrom(const AssignedJob& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AssignedJob* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.AssignedJob";
  }
  protected:
  explicit AssignedJob(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTasksFieldNumber = 1,
    kDueDateCostFieldNumber = 2,
    kSumOfTaskCostsFieldNumber = 3,
  };
  // repeated .operations_research.data.jssp.AssignedTask tasks = 1;
  int tasks_size() const;
  private:
  int _internal_tasks_size() const;
  public:
  void clear_tasks();
  ::operations_research::data::jssp::AssignedTask* mutable_tasks(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedTask >*
      mutable_tasks();
  private:
  const ::operations_research::data::jssp::AssignedTask& _internal_tasks(int index) const;
  ::operations_research::data::jssp::AssignedTask* _internal_add_tasks();
  public:
  const ::operations_research::data::jssp::AssignedTask& tasks(int index) const;
  ::operations_research::data::jssp::AssignedTask* add_tasks();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedTask >&
      tasks() const;

  // int64 due_date_cost = 2;
  void clear_due_date_cost();
  ::PROTOBUF_NAMESPACE_ID::int64 due_date_cost() const;
  void set_due_date_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_due_date_cost() const;
  void _internal_set_due_date_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 sum_of_task_costs = 3;
  void clear_sum_of_task_costs();
  ::PROTOBUF_NAMESPACE_ID::int64 sum_of_task_costs() const;
  void set_sum_of_task_costs(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_sum_of_task_costs() const;
  void _internal_set_sum_of_task_costs(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.AssignedJob)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedTask > tasks_;
  ::PROTOBUF_NAMESPACE_ID::int64 due_date_cost_;
  ::PROTOBUF_NAMESPACE_ID::int64 sum_of_task_costs_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// -------------------------------------------------------------------

class JsspOutputSolution PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.data.jssp.JsspOutputSolution) */ {
 public:
  inline JsspOutputSolution() : JsspOutputSolution(nullptr) {};
  virtual ~JsspOutputSolution();

  JsspOutputSolution(const JsspOutputSolution& from);
  JsspOutputSolution(JsspOutputSolution&& from) noexcept
    : JsspOutputSolution() {
    *this = ::std::move(from);
  }

  inline JsspOutputSolution& operator=(const JsspOutputSolution& from) {
    CopyFrom(from);
    return *this;
  }
  inline JsspOutputSolution& operator=(JsspOutputSolution&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const JsspOutputSolution& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const JsspOutputSolution* internal_default_instance() {
    return reinterpret_cast<const JsspOutputSolution*>(
               &_JsspOutputSolution_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    8;

  friend void swap(JsspOutputSolution& a, JsspOutputSolution& b) {
    a.Swap(&b);
  }
  inline void Swap(JsspOutputSolution* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(JsspOutputSolution* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline JsspOutputSolution* New() const final {
    return CreateMaybeMessage<JsspOutputSolution>(nullptr);
  }

  JsspOutputSolution* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<JsspOutputSolution>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const JsspOutputSolution& from);
  void MergeFrom(const JsspOutputSolution& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(JsspOutputSolution* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.data.jssp.JsspOutputSolution";
  }
  protected:
  explicit JsspOutputSolution(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto);
    return ::descriptor_table_ortools_2fdata_2fjobshop_5fscheduling_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kJobsFieldNumber = 1,
    kMakespanCostFieldNumber = 2,
    kTotalCostFieldNumber = 3,
  };
  // repeated .operations_research.data.jssp.AssignedJob jobs = 1;
  int jobs_size() const;
  private:
  int _internal_jobs_size() const;
  public:
  void clear_jobs();
  ::operations_research::data::jssp::AssignedJob* mutable_jobs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedJob >*
      mutable_jobs();
  private:
  const ::operations_research::data::jssp::AssignedJob& _internal_jobs(int index) const;
  ::operations_research::data::jssp::AssignedJob* _internal_add_jobs();
  public:
  const ::operations_research::data::jssp::AssignedJob& jobs(int index) const;
  ::operations_research::data::jssp::AssignedJob* add_jobs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedJob >&
      jobs() const;

  // int64 makespan_cost = 2;
  void clear_makespan_cost();
  ::PROTOBUF_NAMESPACE_ID::int64 makespan_cost() const;
  void set_makespan_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_makespan_cost() const;
  void _internal_set_makespan_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 total_cost = 3;
  void clear_total_cost();
  ::PROTOBUF_NAMESPACE_ID::int64 total_cost() const;
  void set_total_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_total_cost() const;
  void _internal_set_total_cost(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.data.jssp.JsspOutputSolution)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedJob > jobs_;
  ::PROTOBUF_NAMESPACE_ID::int64 makespan_cost_;
  ::PROTOBUF_NAMESPACE_ID::int64 total_cost_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fdata_2fjobshop_5fscheduling_2eproto;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// Task

// repeated int32 machine = 1;
inline int Task::_internal_machine_size() const {
  return machine_.size();
}
inline int Task::machine_size() const {
  return _internal_machine_size();
}
inline void Task::clear_machine() {
  machine_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Task::_internal_machine(int index) const {
  return machine_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Task::machine(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Task.machine)
  return _internal_machine(index);
}
inline void Task::set_machine(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  machine_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Task.machine)
}
inline void Task::_internal_add_machine(::PROTOBUF_NAMESPACE_ID::int32 value) {
  machine_.Add(value);
}
inline void Task::add_machine(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_machine(value);
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.Task.machine)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
Task::_internal_machine() const {
  return machine_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
Task::machine() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.Task.machine)
  return _internal_machine();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
Task::_internal_mutable_machine() {
  return &machine_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
Task::mutable_machine() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.Task.machine)
  return _internal_mutable_machine();
}

// repeated int64 duration = 2;
inline int Task::_internal_duration_size() const {
  return duration_.size();
}
inline int Task::duration_size() const {
  return _internal_duration_size();
}
inline void Task::clear_duration() {
  duration_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Task::_internal_duration(int index) const {
  return duration_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Task::duration(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Task.duration)
  return _internal_duration(index);
}
inline void Task::set_duration(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  duration_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Task.duration)
}
inline void Task::_internal_add_duration(::PROTOBUF_NAMESPACE_ID::int64 value) {
  duration_.Add(value);
}
inline void Task::add_duration(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_duration(value);
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.Task.duration)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
Task::_internal_duration() const {
  return duration_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
Task::duration() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.Task.duration)
  return _internal_duration();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
Task::_internal_mutable_duration() {
  return &duration_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
Task::mutable_duration() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.Task.duration)
  return _internal_mutable_duration();
}

// repeated int64 cost = 3;
inline int Task::_internal_cost_size() const {
  return cost_.size();
}
inline int Task::cost_size() const {
  return _internal_cost_size();
}
inline void Task::clear_cost() {
  cost_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Task::_internal_cost(int index) const {
  return cost_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Task::cost(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Task.cost)
  return _internal_cost(index);
}
inline void Task::set_cost(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  cost_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Task.cost)
}
inline void Task::_internal_add_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  cost_.Add(value);
}
inline void Task::add_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_cost(value);
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.Task.cost)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
Task::_internal_cost() const {
  return cost_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
Task::cost() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.Task.cost)
  return _internal_cost();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
Task::_internal_mutable_cost() {
  return &cost_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
Task::mutable_cost() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.Task.cost)
  return _internal_mutable_cost();
}

// -------------------------------------------------------------------

// Job

// repeated .operations_research.data.jssp.Task tasks = 1;
inline int Job::_internal_tasks_size() const {
  return tasks_.size();
}
inline int Job::tasks_size() const {
  return _internal_tasks_size();
}
inline void Job::clear_tasks() {
  tasks_.Clear();
}
inline ::operations_research::data::jssp::Task* Job::mutable_tasks(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.Job.tasks)
  return tasks_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Task >*
Job::mutable_tasks() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.Job.tasks)
  return &tasks_;
}
inline const ::operations_research::data::jssp::Task& Job::_internal_tasks(int index) const {
  return tasks_.Get(index);
}
inline const ::operations_research::data::jssp::Task& Job::tasks(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.tasks)
  return _internal_tasks(index);
}
inline ::operations_research::data::jssp::Task* Job::_internal_add_tasks() {
  return tasks_.Add();
}
inline ::operations_research::data::jssp::Task* Job::add_tasks() {
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.Job.tasks)
  return _internal_add_tasks();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Task >&
Job::tasks() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.Job.tasks)
  return tasks_;
}

// .google.protobuf.Int64Value earliest_start = 2;
inline bool Job::_internal_has_earliest_start() const {
  return this != internal_default_instance() && earliest_start_ != nullptr;
}
inline bool Job::has_earliest_start() const {
  return _internal_has_earliest_start();
}
inline const PROTOBUF_NAMESPACE_ID::Int64Value& Job::_internal_earliest_start() const {
  const PROTOBUF_NAMESPACE_ID::Int64Value* p = earliest_start_;
  return p != nullptr ? *p : *reinterpret_cast<const PROTOBUF_NAMESPACE_ID::Int64Value*>(
      &PROTOBUF_NAMESPACE_ID::_Int64Value_default_instance_);
}
inline const PROTOBUF_NAMESPACE_ID::Int64Value& Job::earliest_start() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.earliest_start)
  return _internal_earliest_start();
}
inline void Job::unsafe_arena_set_allocated_earliest_start(
    PROTOBUF_NAMESPACE_ID::Int64Value* earliest_start) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(earliest_start_);
  }
  earliest_start_ = earliest_start;
  if (earliest_start) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.Job.earliest_start)
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::release_earliest_start() {
  auto temp = unsafe_arena_release_earliest_start();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::unsafe_arena_release_earliest_start() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.Job.earliest_start)
  
  PROTOBUF_NAMESPACE_ID::Int64Value* temp = earliest_start_;
  earliest_start_ = nullptr;
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::_internal_mutable_earliest_start() {
  
  if (earliest_start_ == nullptr) {
    auto* p = CreateMaybeMessage<PROTOBUF_NAMESPACE_ID::Int64Value>(GetArena());
    earliest_start_ = p;
  }
  return earliest_start_;
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::mutable_earliest_start() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.Job.earliest_start)
  return _internal_mutable_earliest_start();
}
inline void Job::set_allocated_earliest_start(PROTOBUF_NAMESPACE_ID::Int64Value* earliest_start) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(earliest_start_);
  }
  if (earliest_start) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(earliest_start)->GetArena();
    if (message_arena != submessage_arena) {
      earliest_start = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, earliest_start, submessage_arena);
    }
    
  } else {
    
  }
  earliest_start_ = earliest_start;
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.Job.earliest_start)
}

// int64 early_due_date = 3;
inline void Job::clear_early_due_date() {
  early_due_date_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::_internal_early_due_date() const {
  return early_due_date_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::early_due_date() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.early_due_date)
  return _internal_early_due_date();
}
inline void Job::_internal_set_early_due_date(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  early_due_date_ = value;
}
inline void Job::set_early_due_date(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_early_due_date(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Job.early_due_date)
}

// int64 late_due_date = 4;
inline void Job::clear_late_due_date() {
  late_due_date_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::_internal_late_due_date() const {
  return late_due_date_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::late_due_date() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.late_due_date)
  return _internal_late_due_date();
}
inline void Job::_internal_set_late_due_date(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  late_due_date_ = value;
}
inline void Job::set_late_due_date(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_late_due_date(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Job.late_due_date)
}

// int64 earliness_cost_per_time_unit = 5;
inline void Job::clear_earliness_cost_per_time_unit() {
  earliness_cost_per_time_unit_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::_internal_earliness_cost_per_time_unit() const {
  return earliness_cost_per_time_unit_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::earliness_cost_per_time_unit() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.earliness_cost_per_time_unit)
  return _internal_earliness_cost_per_time_unit();
}
inline void Job::_internal_set_earliness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  earliness_cost_per_time_unit_ = value;
}
inline void Job::set_earliness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_earliness_cost_per_time_unit(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Job.earliness_cost_per_time_unit)
}

// int64 lateness_cost_per_time_unit = 6;
inline void Job::clear_lateness_cost_per_time_unit() {
  lateness_cost_per_time_unit_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::_internal_lateness_cost_per_time_unit() const {
  return lateness_cost_per_time_unit_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 Job::lateness_cost_per_time_unit() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.lateness_cost_per_time_unit)
  return _internal_lateness_cost_per_time_unit();
}
inline void Job::_internal_set_lateness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  lateness_cost_per_time_unit_ = value;
}
inline void Job::set_lateness_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_lateness_cost_per_time_unit(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Job.lateness_cost_per_time_unit)
}

// .google.protobuf.Int64Value latest_end = 7;
inline bool Job::_internal_has_latest_end() const {
  return this != internal_default_instance() && latest_end_ != nullptr;
}
inline bool Job::has_latest_end() const {
  return _internal_has_latest_end();
}
inline const PROTOBUF_NAMESPACE_ID::Int64Value& Job::_internal_latest_end() const {
  const PROTOBUF_NAMESPACE_ID::Int64Value* p = latest_end_;
  return p != nullptr ? *p : *reinterpret_cast<const PROTOBUF_NAMESPACE_ID::Int64Value*>(
      &PROTOBUF_NAMESPACE_ID::_Int64Value_default_instance_);
}
inline const PROTOBUF_NAMESPACE_ID::Int64Value& Job::latest_end() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.latest_end)
  return _internal_latest_end();
}
inline void Job::unsafe_arena_set_allocated_latest_end(
    PROTOBUF_NAMESPACE_ID::Int64Value* latest_end) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(latest_end_);
  }
  latest_end_ = latest_end;
  if (latest_end) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.Job.latest_end)
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::release_latest_end() {
  auto temp = unsafe_arena_release_latest_end();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::unsafe_arena_release_latest_end() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.Job.latest_end)
  
  PROTOBUF_NAMESPACE_ID::Int64Value* temp = latest_end_;
  latest_end_ = nullptr;
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::_internal_mutable_latest_end() {
  
  if (latest_end_ == nullptr) {
    auto* p = CreateMaybeMessage<PROTOBUF_NAMESPACE_ID::Int64Value>(GetArena());
    latest_end_ = p;
  }
  return latest_end_;
}
inline PROTOBUF_NAMESPACE_ID::Int64Value* Job::mutable_latest_end() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.Job.latest_end)
  return _internal_mutable_latest_end();
}
inline void Job::set_allocated_latest_end(PROTOBUF_NAMESPACE_ID::Int64Value* latest_end) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(latest_end_);
  }
  if (latest_end) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(latest_end)->GetArena();
    if (message_arena != submessage_arena) {
      latest_end = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, latest_end, submessage_arena);
    }
    
  } else {
    
  }
  latest_end_ = latest_end;
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.Job.latest_end)
}

// string name = 16;
inline void Job::clear_name() {
  name_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& Job::name() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Job.name)
  return _internal_name();
}
inline void Job::set_name(const std::string& value) {
  _internal_set_name(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Job.name)
}
inline std::string* Job::mutable_name() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.Job.name)
  return _internal_mutable_name();
}
inline const std::string& Job::_internal_name() const {
  return name_.Get();
}
inline void Job::_internal_set_name(const std::string& value) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void Job::set_name(std::string&& value) {
  
  name_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.data.jssp.Job.name)
}
inline void Job::set_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.data.jssp.Job.name)
}
inline void Job::set_name(const char* value,
    size_t size) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.data.jssp.Job.name)
}
inline std::string* Job::_internal_mutable_name() {
  
  return name_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* Job::release_name() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.Job.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void Job::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.Job.name)
}
inline std::string* Job::unsafe_arena_release_name() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.data.jssp.Job.name)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return name_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void Job::unsafe_arena_set_allocated_name(
    std::string* name) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (name != nullptr) {
    
  } else {
    
  }
  name_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      name, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.Job.name)
}

// -------------------------------------------------------------------

// TransitionTimeMatrix

// repeated int64 transition_time = 1;
inline int TransitionTimeMatrix::_internal_transition_time_size() const {
  return transition_time_.size();
}
inline int TransitionTimeMatrix::transition_time_size() const {
  return _internal_transition_time_size();
}
inline void TransitionTimeMatrix::clear_transition_time() {
  transition_time_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 TransitionTimeMatrix::_internal_transition_time(int index) const {
  return transition_time_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 TransitionTimeMatrix::transition_time(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.TransitionTimeMatrix.transition_time)
  return _internal_transition_time(index);
}
inline void TransitionTimeMatrix::set_transition_time(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_time_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.TransitionTimeMatrix.transition_time)
}
inline void TransitionTimeMatrix::_internal_add_transition_time(::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_time_.Add(value);
}
inline void TransitionTimeMatrix::add_transition_time(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_transition_time(value);
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.TransitionTimeMatrix.transition_time)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
TransitionTimeMatrix::_internal_transition_time() const {
  return transition_time_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
TransitionTimeMatrix::transition_time() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.TransitionTimeMatrix.transition_time)
  return _internal_transition_time();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
TransitionTimeMatrix::_internal_mutable_transition_time() {
  return &transition_time_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
TransitionTimeMatrix::mutable_transition_time() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.TransitionTimeMatrix.transition_time)
  return _internal_mutable_transition_time();
}

// -------------------------------------------------------------------

// Machine

// .operations_research.data.jssp.TransitionTimeMatrix transition_time_matrix = 1;
inline bool Machine::_internal_has_transition_time_matrix() const {
  return this != internal_default_instance() && transition_time_matrix_ != nullptr;
}
inline bool Machine::has_transition_time_matrix() const {
  return _internal_has_transition_time_matrix();
}
inline void Machine::clear_transition_time_matrix() {
  if (GetArena() == nullptr && transition_time_matrix_ != nullptr) {
    delete transition_time_matrix_;
  }
  transition_time_matrix_ = nullptr;
}
inline const ::operations_research::data::jssp::TransitionTimeMatrix& Machine::_internal_transition_time_matrix() const {
  const ::operations_research::data::jssp::TransitionTimeMatrix* p = transition_time_matrix_;
  return p != nullptr ? *p : *reinterpret_cast<const ::operations_research::data::jssp::TransitionTimeMatrix*>(
      &::operations_research::data::jssp::_TransitionTimeMatrix_default_instance_);
}
inline const ::operations_research::data::jssp::TransitionTimeMatrix& Machine::transition_time_matrix() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Machine.transition_time_matrix)
  return _internal_transition_time_matrix();
}
inline void Machine::unsafe_arena_set_allocated_transition_time_matrix(
    ::operations_research::data::jssp::TransitionTimeMatrix* transition_time_matrix) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(transition_time_matrix_);
  }
  transition_time_matrix_ = transition_time_matrix;
  if (transition_time_matrix) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.Machine.transition_time_matrix)
}
inline ::operations_research::data::jssp::TransitionTimeMatrix* Machine::release_transition_time_matrix() {
  auto temp = unsafe_arena_release_transition_time_matrix();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::operations_research::data::jssp::TransitionTimeMatrix* Machine::unsafe_arena_release_transition_time_matrix() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.Machine.transition_time_matrix)
  
  ::operations_research::data::jssp::TransitionTimeMatrix* temp = transition_time_matrix_;
  transition_time_matrix_ = nullptr;
  return temp;
}
inline ::operations_research::data::jssp::TransitionTimeMatrix* Machine::_internal_mutable_transition_time_matrix() {
  
  if (transition_time_matrix_ == nullptr) {
    auto* p = CreateMaybeMessage<::operations_research::data::jssp::TransitionTimeMatrix>(GetArena());
    transition_time_matrix_ = p;
  }
  return transition_time_matrix_;
}
inline ::operations_research::data::jssp::TransitionTimeMatrix* Machine::mutable_transition_time_matrix() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.Machine.transition_time_matrix)
  return _internal_mutable_transition_time_matrix();
}
inline void Machine::set_allocated_transition_time_matrix(::operations_research::data::jssp::TransitionTimeMatrix* transition_time_matrix) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete transition_time_matrix_;
  }
  if (transition_time_matrix) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(transition_time_matrix);
    if (message_arena != submessage_arena) {
      transition_time_matrix = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, transition_time_matrix, submessage_arena);
    }
    
  } else {
    
  }
  transition_time_matrix_ = transition_time_matrix;
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.Machine.transition_time_matrix)
}

// string name = 16;
inline void Machine::clear_name() {
  name_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& Machine::name() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.Machine.name)
  return _internal_name();
}
inline void Machine::set_name(const std::string& value) {
  _internal_set_name(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.Machine.name)
}
inline std::string* Machine::mutable_name() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.Machine.name)
  return _internal_mutable_name();
}
inline const std::string& Machine::_internal_name() const {
  return name_.Get();
}
inline void Machine::_internal_set_name(const std::string& value) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void Machine::set_name(std::string&& value) {
  
  name_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.data.jssp.Machine.name)
}
inline void Machine::set_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.data.jssp.Machine.name)
}
inline void Machine::set_name(const char* value,
    size_t size) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.data.jssp.Machine.name)
}
inline std::string* Machine::_internal_mutable_name() {
  
  return name_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* Machine::release_name() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.Machine.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void Machine::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.Machine.name)
}
inline std::string* Machine::unsafe_arena_release_name() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.data.jssp.Machine.name)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return name_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void Machine::unsafe_arena_set_allocated_name(
    std::string* name) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (name != nullptr) {
    
  } else {
    
  }
  name_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      name, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.Machine.name)
}

// -------------------------------------------------------------------

// JobPrecedence

// int32 first_job_index = 1;
inline void JobPrecedence::clear_first_job_index() {
  first_job_index_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 JobPrecedence::_internal_first_job_index() const {
  return first_job_index_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 JobPrecedence::first_job_index() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JobPrecedence.first_job_index)
  return _internal_first_job_index();
}
inline void JobPrecedence::_internal_set_first_job_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  first_job_index_ = value;
}
inline void JobPrecedence::set_first_job_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_first_job_index(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JobPrecedence.first_job_index)
}

// int32 second_job_index = 2;
inline void JobPrecedence::clear_second_job_index() {
  second_job_index_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 JobPrecedence::_internal_second_job_index() const {
  return second_job_index_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 JobPrecedence::second_job_index() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JobPrecedence.second_job_index)
  return _internal_second_job_index();
}
inline void JobPrecedence::_internal_set_second_job_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  second_job_index_ = value;
}
inline void JobPrecedence::set_second_job_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_second_job_index(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JobPrecedence.second_job_index)
}

// int64 min_delay = 3;
inline void JobPrecedence::clear_min_delay() {
  min_delay_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JobPrecedence::_internal_min_delay() const {
  return min_delay_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JobPrecedence::min_delay() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JobPrecedence.min_delay)
  return _internal_min_delay();
}
inline void JobPrecedence::_internal_set_min_delay(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  min_delay_ = value;
}
inline void JobPrecedence::set_min_delay(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_min_delay(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JobPrecedence.min_delay)
}

// -------------------------------------------------------------------

// JsspInputProblem

// repeated .operations_research.data.jssp.Job jobs = 1;
inline int JsspInputProblem::_internal_jobs_size() const {
  return jobs_.size();
}
inline int JsspInputProblem::jobs_size() const {
  return _internal_jobs_size();
}
inline void JsspInputProblem::clear_jobs() {
  jobs_.Clear();
}
inline ::operations_research::data::jssp::Job* JsspInputProblem::mutable_jobs(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.JsspInputProblem.jobs)
  return jobs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Job >*
JsspInputProblem::mutable_jobs() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.JsspInputProblem.jobs)
  return &jobs_;
}
inline const ::operations_research::data::jssp::Job& JsspInputProblem::_internal_jobs(int index) const {
  return jobs_.Get(index);
}
inline const ::operations_research::data::jssp::Job& JsspInputProblem::jobs(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.jobs)
  return _internal_jobs(index);
}
inline ::operations_research::data::jssp::Job* JsspInputProblem::_internal_add_jobs() {
  return jobs_.Add();
}
inline ::operations_research::data::jssp::Job* JsspInputProblem::add_jobs() {
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.JsspInputProblem.jobs)
  return _internal_add_jobs();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Job >&
JsspInputProblem::jobs() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.JsspInputProblem.jobs)
  return jobs_;
}

// repeated .operations_research.data.jssp.Machine machines = 2;
inline int JsspInputProblem::_internal_machines_size() const {
  return machines_.size();
}
inline int JsspInputProblem::machines_size() const {
  return _internal_machines_size();
}
inline void JsspInputProblem::clear_machines() {
  machines_.Clear();
}
inline ::operations_research::data::jssp::Machine* JsspInputProblem::mutable_machines(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.JsspInputProblem.machines)
  return machines_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Machine >*
JsspInputProblem::mutable_machines() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.JsspInputProblem.machines)
  return &machines_;
}
inline const ::operations_research::data::jssp::Machine& JsspInputProblem::_internal_machines(int index) const {
  return machines_.Get(index);
}
inline const ::operations_research::data::jssp::Machine& JsspInputProblem::machines(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.machines)
  return _internal_machines(index);
}
inline ::operations_research::data::jssp::Machine* JsspInputProblem::_internal_add_machines() {
  return machines_.Add();
}
inline ::operations_research::data::jssp::Machine* JsspInputProblem::add_machines() {
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.JsspInputProblem.machines)
  return _internal_add_machines();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::Machine >&
JsspInputProblem::machines() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.JsspInputProblem.machines)
  return machines_;
}

// repeated .operations_research.data.jssp.JobPrecedence precedences = 3;
inline int JsspInputProblem::_internal_precedences_size() const {
  return precedences_.size();
}
inline int JsspInputProblem::precedences_size() const {
  return _internal_precedences_size();
}
inline void JsspInputProblem::clear_precedences() {
  precedences_.Clear();
}
inline ::operations_research::data::jssp::JobPrecedence* JsspInputProblem::mutable_precedences(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.JsspInputProblem.precedences)
  return precedences_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::JobPrecedence >*
JsspInputProblem::mutable_precedences() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.JsspInputProblem.precedences)
  return &precedences_;
}
inline const ::operations_research::data::jssp::JobPrecedence& JsspInputProblem::_internal_precedences(int index) const {
  return precedences_.Get(index);
}
inline const ::operations_research::data::jssp::JobPrecedence& JsspInputProblem::precedences(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.precedences)
  return _internal_precedences(index);
}
inline ::operations_research::data::jssp::JobPrecedence* JsspInputProblem::_internal_add_precedences() {
  return precedences_.Add();
}
inline ::operations_research::data::jssp::JobPrecedence* JsspInputProblem::add_precedences() {
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.JsspInputProblem.precedences)
  return _internal_add_precedences();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::JobPrecedence >&
JsspInputProblem::precedences() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.JsspInputProblem.precedences)
  return precedences_;
}

// int64 makespan_cost_per_time_unit = 4;
inline void JsspInputProblem::clear_makespan_cost_per_time_unit() {
  makespan_cost_per_time_unit_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JsspInputProblem::_internal_makespan_cost_per_time_unit() const {
  return makespan_cost_per_time_unit_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JsspInputProblem::makespan_cost_per_time_unit() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.makespan_cost_per_time_unit)
  return _internal_makespan_cost_per_time_unit();
}
inline void JsspInputProblem::_internal_set_makespan_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  makespan_cost_per_time_unit_ = value;
}
inline void JsspInputProblem::set_makespan_cost_per_time_unit(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_makespan_cost_per_time_unit(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JsspInputProblem.makespan_cost_per_time_unit)
}

// .google.protobuf.DoubleValue scaling_factor = 5;
inline bool JsspInputProblem::_internal_has_scaling_factor() const {
  return this != internal_default_instance() && scaling_factor_ != nullptr;
}
inline bool JsspInputProblem::has_scaling_factor() const {
  return _internal_has_scaling_factor();
}
inline const PROTOBUF_NAMESPACE_ID::DoubleValue& JsspInputProblem::_internal_scaling_factor() const {
  const PROTOBUF_NAMESPACE_ID::DoubleValue* p = scaling_factor_;
  return p != nullptr ? *p : *reinterpret_cast<const PROTOBUF_NAMESPACE_ID::DoubleValue*>(
      &PROTOBUF_NAMESPACE_ID::_DoubleValue_default_instance_);
}
inline const PROTOBUF_NAMESPACE_ID::DoubleValue& JsspInputProblem::scaling_factor() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.scaling_factor)
  return _internal_scaling_factor();
}
inline void JsspInputProblem::unsafe_arena_set_allocated_scaling_factor(
    PROTOBUF_NAMESPACE_ID::DoubleValue* scaling_factor) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(scaling_factor_);
  }
  scaling_factor_ = scaling_factor;
  if (scaling_factor) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.JsspInputProblem.scaling_factor)
}
inline PROTOBUF_NAMESPACE_ID::DoubleValue* JsspInputProblem::release_scaling_factor() {
  auto temp = unsafe_arena_release_scaling_factor();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::DoubleValue* JsspInputProblem::unsafe_arena_release_scaling_factor() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.JsspInputProblem.scaling_factor)
  
  PROTOBUF_NAMESPACE_ID::DoubleValue* temp = scaling_factor_;
  scaling_factor_ = nullptr;
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::DoubleValue* JsspInputProblem::_internal_mutable_scaling_factor() {
  
  if (scaling_factor_ == nullptr) {
    auto* p = CreateMaybeMessage<PROTOBUF_NAMESPACE_ID::DoubleValue>(GetArena());
    scaling_factor_ = p;
  }
  return scaling_factor_;
}
inline PROTOBUF_NAMESPACE_ID::DoubleValue* JsspInputProblem::mutable_scaling_factor() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.JsspInputProblem.scaling_factor)
  return _internal_mutable_scaling_factor();
}
inline void JsspInputProblem::set_allocated_scaling_factor(PROTOBUF_NAMESPACE_ID::DoubleValue* scaling_factor) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(scaling_factor_);
  }
  if (scaling_factor) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(scaling_factor)->GetArena();
    if (message_arena != submessage_arena) {
      scaling_factor = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, scaling_factor, submessage_arena);
    }
    
  } else {
    
  }
  scaling_factor_ = scaling_factor;
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.JsspInputProblem.scaling_factor)
}

// int32 seed = 24;
inline void JsspInputProblem::clear_seed() {
  seed_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 JsspInputProblem::_internal_seed() const {
  return seed_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 JsspInputProblem::seed() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.seed)
  return _internal_seed();
}
inline void JsspInputProblem::_internal_set_seed(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  seed_ = value;
}
inline void JsspInputProblem::set_seed(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_seed(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JsspInputProblem.seed)
}

// string name = 16;
inline void JsspInputProblem::clear_name() {
  name_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& JsspInputProblem::name() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspInputProblem.name)
  return _internal_name();
}
inline void JsspInputProblem::set_name(const std::string& value) {
  _internal_set_name(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JsspInputProblem.name)
}
inline std::string* JsspInputProblem::mutable_name() {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.JsspInputProblem.name)
  return _internal_mutable_name();
}
inline const std::string& JsspInputProblem::_internal_name() const {
  return name_.Get();
}
inline void JsspInputProblem::_internal_set_name(const std::string& value) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void JsspInputProblem::set_name(std::string&& value) {
  
  name_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.data.jssp.JsspInputProblem.name)
}
inline void JsspInputProblem::set_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.data.jssp.JsspInputProblem.name)
}
inline void JsspInputProblem::set_name(const char* value,
    size_t size) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.data.jssp.JsspInputProblem.name)
}
inline std::string* JsspInputProblem::_internal_mutable_name() {
  
  return name_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* JsspInputProblem::release_name() {
  // @@protoc_insertion_point(field_release:operations_research.data.jssp.JsspInputProblem.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void JsspInputProblem::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.data.jssp.JsspInputProblem.name)
}
inline std::string* JsspInputProblem::unsafe_arena_release_name() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.data.jssp.JsspInputProblem.name)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return name_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void JsspInputProblem::unsafe_arena_set_allocated_name(
    std::string* name) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (name != nullptr) {
    
  } else {
    
  }
  name_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      name, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.data.jssp.JsspInputProblem.name)
}

// -------------------------------------------------------------------

// AssignedTask

// int32 alternative_index = 1;
inline void AssignedTask::clear_alternative_index() {
  alternative_index_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 AssignedTask::_internal_alternative_index() const {
  return alternative_index_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 AssignedTask::alternative_index() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.AssignedTask.alternative_index)
  return _internal_alternative_index();
}
inline void AssignedTask::_internal_set_alternative_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  alternative_index_ = value;
}
inline void AssignedTask::set_alternative_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_alternative_index(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.AssignedTask.alternative_index)
}

// int64 start_time = 2;
inline void AssignedTask::clear_start_time() {
  start_time_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AssignedTask::_internal_start_time() const {
  return start_time_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AssignedTask::start_time() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.AssignedTask.start_time)
  return _internal_start_time();
}
inline void AssignedTask::_internal_set_start_time(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  start_time_ = value;
}
inline void AssignedTask::set_start_time(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_start_time(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.AssignedTask.start_time)
}

// -------------------------------------------------------------------

// AssignedJob

// repeated .operations_research.data.jssp.AssignedTask tasks = 1;
inline int AssignedJob::_internal_tasks_size() const {
  return tasks_.size();
}
inline int AssignedJob::tasks_size() const {
  return _internal_tasks_size();
}
inline void AssignedJob::clear_tasks() {
  tasks_.Clear();
}
inline ::operations_research::data::jssp::AssignedTask* AssignedJob::mutable_tasks(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.AssignedJob.tasks)
  return tasks_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedTask >*
AssignedJob::mutable_tasks() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.AssignedJob.tasks)
  return &tasks_;
}
inline const ::operations_research::data::jssp::AssignedTask& AssignedJob::_internal_tasks(int index) const {
  return tasks_.Get(index);
}
inline const ::operations_research::data::jssp::AssignedTask& AssignedJob::tasks(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.AssignedJob.tasks)
  return _internal_tasks(index);
}
inline ::operations_research::data::jssp::AssignedTask* AssignedJob::_internal_add_tasks() {
  return tasks_.Add();
}
inline ::operations_research::data::jssp::AssignedTask* AssignedJob::add_tasks() {
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.AssignedJob.tasks)
  return _internal_add_tasks();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedTask >&
AssignedJob::tasks() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.AssignedJob.tasks)
  return tasks_;
}

// int64 due_date_cost = 2;
inline void AssignedJob::clear_due_date_cost() {
  due_date_cost_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AssignedJob::_internal_due_date_cost() const {
  return due_date_cost_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AssignedJob::due_date_cost() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.AssignedJob.due_date_cost)
  return _internal_due_date_cost();
}
inline void AssignedJob::_internal_set_due_date_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  due_date_cost_ = value;
}
inline void AssignedJob::set_due_date_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_due_date_cost(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.AssignedJob.due_date_cost)
}

// int64 sum_of_task_costs = 3;
inline void AssignedJob::clear_sum_of_task_costs() {
  sum_of_task_costs_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AssignedJob::_internal_sum_of_task_costs() const {
  return sum_of_task_costs_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AssignedJob::sum_of_task_costs() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.AssignedJob.sum_of_task_costs)
  return _internal_sum_of_task_costs();
}
inline void AssignedJob::_internal_set_sum_of_task_costs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  sum_of_task_costs_ = value;
}
inline void AssignedJob::set_sum_of_task_costs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_sum_of_task_costs(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.AssignedJob.sum_of_task_costs)
}

// -------------------------------------------------------------------

// JsspOutputSolution

// repeated .operations_research.data.jssp.AssignedJob jobs = 1;
inline int JsspOutputSolution::_internal_jobs_size() const {
  return jobs_.size();
}
inline int JsspOutputSolution::jobs_size() const {
  return _internal_jobs_size();
}
inline void JsspOutputSolution::clear_jobs() {
  jobs_.Clear();
}
inline ::operations_research::data::jssp::AssignedJob* JsspOutputSolution::mutable_jobs(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.data.jssp.JsspOutputSolution.jobs)
  return jobs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedJob >*
JsspOutputSolution::mutable_jobs() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.data.jssp.JsspOutputSolution.jobs)
  return &jobs_;
}
inline const ::operations_research::data::jssp::AssignedJob& JsspOutputSolution::_internal_jobs(int index) const {
  return jobs_.Get(index);
}
inline const ::operations_research::data::jssp::AssignedJob& JsspOutputSolution::jobs(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspOutputSolution.jobs)
  return _internal_jobs(index);
}
inline ::operations_research::data::jssp::AssignedJob* JsspOutputSolution::_internal_add_jobs() {
  return jobs_.Add();
}
inline ::operations_research::data::jssp::AssignedJob* JsspOutputSolution::add_jobs() {
  // @@protoc_insertion_point(field_add:operations_research.data.jssp.JsspOutputSolution.jobs)
  return _internal_add_jobs();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::data::jssp::AssignedJob >&
JsspOutputSolution::jobs() const {
  // @@protoc_insertion_point(field_list:operations_research.data.jssp.JsspOutputSolution.jobs)
  return jobs_;
}

// int64 makespan_cost = 2;
inline void JsspOutputSolution::clear_makespan_cost() {
  makespan_cost_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JsspOutputSolution::_internal_makespan_cost() const {
  return makespan_cost_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JsspOutputSolution::makespan_cost() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspOutputSolution.makespan_cost)
  return _internal_makespan_cost();
}
inline void JsspOutputSolution::_internal_set_makespan_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  makespan_cost_ = value;
}
inline void JsspOutputSolution::set_makespan_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_makespan_cost(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JsspOutputSolution.makespan_cost)
}

// int64 total_cost = 3;
inline void JsspOutputSolution::clear_total_cost() {
  total_cost_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JsspOutputSolution::_internal_total_cost() const {
  return total_cost_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 JsspOutputSolution::total_cost() const {
  // @@protoc_insertion_point(field_get:operations_research.data.jssp.JsspOutputSolution.total_cost)
  return _internal_total_cost();
}
inline void JsspOutputSolution::_internal_set_total_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  total_cost_ = value;
}
inline void JsspOutputSolution::set_total_cost(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_total_cost(value);
  // @@protoc_insertion_point(field_set:operations_research.data.jssp.JsspOutputSolution.total_cost)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace jssp
}  // namespace data
}  // namespace operations_research

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_ortools_2fdata_2fjobshop_5fscheduling_2eproto
