You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					129 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					129 lines
				
				2.8 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								// Copyright (C) 2004, 2009 International Business Machines and others.
							 | 
						||
| 
								 | 
							
								// All Rights Reserved.
							 | 
						||
| 
								 | 
							
								// This code is published under the Eclipse Public License.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// $Id: IpUtils.hpp 2167 2013-03-08 11:15:38Z stefan $
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __IPUTILS_HPP__
							 | 
						||
| 
								 | 
							
								#define __IPUTILS_HPP__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Standard Ip Include Files
							 | 
						||
| 
								 | 
							
								#include "IpTypes.hpp"
							 | 
						||
| 
								 | 
							
								#include "IpDebug.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Ipopt
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Index Max(Index a, Index b)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return ((a) > (b) ? (a) : (b));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Index Max(Index a, Index b, Index c)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Index max = Max(a,b);
							 | 
						||
| 
								 | 
							
								    max = Max(max, c);
							 | 
						||
| 
								 | 
							
								    return max;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Index Max(Index a, Index b, Index c, Index d)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Index max = Max(a, b, c);
							 | 
						||
| 
								 | 
							
								    max = Max(max, d);
							 | 
						||
| 
								 | 
							
								    return max;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Index Min(Index a, Index b)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return ((a) < (b) ? (a) : (b));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Index Min(Index a, Index b, Index c)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Index min = Min(a,b);
							 | 
						||
| 
								 | 
							
								    min = Min(min, c);
							 | 
						||
| 
								 | 
							
								    return min;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Index Min(Index a, Index b, Index c, Index d)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Index min = Min(a, b, c);
							 | 
						||
| 
								 | 
							
								    min = Min(min, d);
							 | 
						||
| 
								 | 
							
								    return min;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ///////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Number Max(Number a, Number b)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return ((a) > (b) ? (a) : (b));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Number Max(Number a, Number b, Number c)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Number max = Max(a,b);
							 | 
						||
| 
								 | 
							
								    max = Max(max, c);
							 | 
						||
| 
								 | 
							
								    return max;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Number Max(Number a, Number b, Number c, Number d)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Number max = Max(a, b, c);
							 | 
						||
| 
								 | 
							
								    max = Max(max, d);
							 | 
						||
| 
								 | 
							
								    return max;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Number Min(Number a, Number b)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return ((a) < (b) ? (a) : (b));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Number Min(Number a, Number b, Number c)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Number min = Min(a,b);
							 | 
						||
| 
								 | 
							
								    min = Min(min, c);
							 | 
						||
| 
								 | 
							
								    return min;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline Number Min(Number a, Number b, Number c, Number d)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    Number min = Min(a, b, c);
							 | 
						||
| 
								 | 
							
								    min = Min(min, d);
							 | 
						||
| 
								 | 
							
								    return min;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Function returning true iff the argument is a valid double number
							 | 
						||
| 
								 | 
							
								   *  (not NaN or Inf). */
							 | 
						||
| 
								 | 
							
								  bool IsFiniteNumber(Number val);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Function returning a random number between 0 and 1 */
							 | 
						||
| 
								 | 
							
								  Number IpRandom01();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Function resetting the random number generator */
							 | 
						||
| 
								 | 
							
								  void IpResetRandom01();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** method determining CPU time */
							 | 
						||
| 
								 | 
							
								  Number CpuTime();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** method determining system time */
							 | 
						||
| 
								 | 
							
								  Number SysTime();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** method determining wallclock time since first call */
							 | 
						||
| 
								 | 
							
								  Number WallclockTime();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Method for comparing two numbers within machine precision.  The
							 | 
						||
| 
								 | 
							
								   *  return value is true if lhs is less or equal the rhs, relaxing
							 | 
						||
| 
								 | 
							
								   *  this inequality by something a little larger than machine
							 | 
						||
| 
								 | 
							
								   *  precision relative to the absolute value of BasVal. */
							 | 
						||
| 
								 | 
							
								  bool Compare_le(Number lhs, Number rhs, Number BasVal);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Method for printing a formatted output to a string with given size.
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								  int Snprintf(char* str, long size, const char* format, ...);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} //namespace Ipopt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |