libs-gui/Source/GSCSVariable.m

163 lines
3.5 KiB
Mathematica
Raw Permalink Normal View History

/* Copyright (C) 2023 Free Software Foundation, Inc.
By: Benjamin Johnson
Date: 19-3-2023
This file is part of the GNUstep Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110 USA.
*/
#import "GSCSVariable.h"
@implementation GSCSVariable
- (instancetype) initWithName: (NSString *)name
{
self = [super init];
if (self != nil)
{
ASSIGN(_name, name);
_type = GSCSVaraibleTypeVariable;
}
return self;
}
- (instancetype) initWithName: (NSString *)name type: (GSCSVariableType)type
{
self = [super init];
if (self != nil)
{
ASSIGN(_name, name);
_type = type;
}
return self;
}
- (instancetype) init
{
return [self initWithName: nil type: GSCSVaraibleTypeVariable];
}
+ (instancetype) dummyVariableWithName: (NSString *)name
{
return AUTORELEASE([[GSCSVariable alloc] initWithName: name type: GSCSVariableTypeDummy]);
}
+ (instancetype) slackVariableWithName: (NSString *)name
{
return AUTORELEASE([[GSCSVariable alloc] initWithName: name type: GSCSVariableTypeSlack]);
}
+ (instancetype) objectiveVariableWithName: (NSString *)name
{
return AUTORELEASE([[GSCSVariable alloc] initWithName: name
type: GSCSVariableTypeObjective]);
}
+ (instancetype) variableWithValue: (CGFloat)value
{
return [self variableWithValue: value name: nil];
}
+ (instancetype) variable
{
return [self variableWithValue: 0 name: nil];
}
+ (instancetype) variableWithValue: (CGFloat)value name: (NSString *)name
{
GSCSVariable *variable =
[[GSCSVariable alloc] initWithName: name type: GSCSVariableTypeExternal];
[variable setValue: value];
return AUTORELEASE(variable);
}
- (BOOL) isDummy
{
return _type == GSCSVariableTypeDummy;
}
- (BOOL) isExternal
{
return _type == GSCSVariableTypeExternal;
}
- (BOOL) isPivotable
{
return _type == GSCSVariableTypeSlack;
}
- (BOOL) isRestricted
{
return _type == GSCSVariableTypeExternal || _type == GSCSVariableTypeSlack;
}
- (NSString *) description
{
if (_type == GSCSVariableTypeDummy)
{
return [NSString stringWithFormat: @"[%@:dummy]", _name];
}
else if (_type == GSCSVariableTypeSlack)
{
return [NSString stringWithFormat: @"[%@:slack]", _name];
}
else if (_type == GSCSVariableTypeExternal)
{
return [NSString stringWithFormat: @"[%@:%.02f]", _name, _value];
}
else if (_type == GSCSVariableTypeObjective)
{
return [NSString stringWithFormat: @"[%@:objective]", _name];
}
return [NSString stringWithFormat: @"[%@]", _name];
}
- (GSCSVariableType) type
{
return _type;
}
- (NSUInteger) id
{
return _id;
}
- (CGFloat) value
{
return _value;
}
- (void) setValue: (CGFloat)value
{
_value = value;
}
- (NSString *) name
{
return _name;
}
- (void) dealloc
{
TEST_RELEASE(_name);
[super dealloc];
}
@end