102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
/* ----------------------------------------------------------------------------
 | 
						|
 | 
						|
 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
 | 
						|
 * Atlanta, Georgia 30332-0415
 | 
						|
 * All Rights Reserved
 | 
						|
 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
 | 
						|
 | 
						|
 * See LICENSE for the license information
 | 
						|
 | 
						|
 * -------------------------------------------------------------------------- */
 | 
						|
 | 
						|
/**
 | 
						|
 *  @file Constraint.h
 | 
						|
 *  @date May 15, 2012
 | 
						|
 *  @author Frank Dellaert
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <gtsam/discrete/DiscreteFactor.h>
 | 
						|
#include <gtsam/discrete/DiscreteValues.h>
 | 
						|
#include <gtsam_unstable/dllexport.h>
 | 
						|
 | 
						|
#include <map>
 | 
						|
 | 
						|
namespace gtsam {
 | 
						|
 | 
						|
class Domain;
 | 
						|
using Domains = std::map<Key, Domain>;
 | 
						|
 | 
						|
/**
 | 
						|
 * Base class for constraint factors
 | 
						|
 * Derived classes include SingleValue, BinaryAllDiff, and AllDiff.
 | 
						|
 */
 | 
						|
class GTSAM_UNSTABLE_EXPORT Constraint : public DiscreteFactor {
 | 
						|
 public:
 | 
						|
  typedef std::shared_ptr<Constraint> shared_ptr;
 | 
						|
 | 
						|
 protected:
 | 
						|
  /// Construct unary constraint factor.
 | 
						|
  Constraint(Key j) : DiscreteFactor(KeyVector{j}) {}
 | 
						|
 | 
						|
  /// Construct binary constraint factor.
 | 
						|
  Constraint(Key j1, Key j2) : DiscreteFactor(KeyVector{j1, j2}) {}
 | 
						|
 | 
						|
  /// Construct n-way constraint factor.
 | 
						|
  Constraint(const KeyVector& js) : DiscreteFactor(js) {}
 | 
						|
 | 
						|
  /// construct from container
 | 
						|
  template <class KeyIterator>
 | 
						|
  Constraint(KeyIterator beginKey, KeyIterator endKey)
 | 
						|
      : DiscreteFactor(beginKey, endKey) {}
 | 
						|
 | 
						|
 public:
 | 
						|
  /// @name Standard Constructors
 | 
						|
  /// @{
 | 
						|
 | 
						|
  /// Default constructor for I/O
 | 
						|
  Constraint();
 | 
						|
 | 
						|
  /// Virtual destructor
 | 
						|
  ~Constraint() override {}
 | 
						|
 | 
						|
  /// @}
 | 
						|
  /// @name Standard Interface
 | 
						|
  /// @{
 | 
						|
 | 
						|
  /*
 | 
						|
   * Ensure Arc-consistency by checking every possible value of domain j.
 | 
						|
   * @param j domain to be checked
 | 
						|
   * @param (in/out) domains all domains, but only domains->at(j) will be checked.
 | 
						|
   * @return true if domains->at(j) was changed, false otherwise.
 | 
						|
   */
 | 
						|
  virtual bool ensureArcConsistency(Key j, Domains* domains) const = 0;
 | 
						|
 | 
						|
  /// Partially apply known values
 | 
						|
  virtual shared_ptr partiallyApply(const DiscreteValues&) const = 0;
 | 
						|
 | 
						|
  /// Partially apply known values, domain version
 | 
						|
  virtual shared_ptr partiallyApply(const Domains&) const = 0;
 | 
						|
  /// @}
 | 
						|
  /// @name Wrapper support
 | 
						|
  /// @{
 | 
						|
 | 
						|
  /// Render as markdown table.
 | 
						|
  std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
 | 
						|
                       const Names& names = {}) const override {
 | 
						|
    return "`Constraint` on " + std::to_string(size()) + " variables\n";
 | 
						|
  }
 | 
						|
 | 
						|
  /// Render as html table.
 | 
						|
  std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
 | 
						|
                   const Names& names = {}) const override {
 | 
						|
    return "<p>Constraint on " + std::to_string(size()) + " variables</p>";
 | 
						|
  }
 | 
						|
 | 
						|
  /// @}
 | 
						|
};
 | 
						|
// DiscreteFactor
 | 
						|
 | 
						|
}  // namespace gtsam
 |