#import <Foundation/Foundation.h>

@interface PLTMatrix : NSObject {
	NSMutableData *_values;
	int _rows;
	int _cols;
	int _rowExtension;
	int _colExtension;

	NSString *_format;
	NSMutableArray *_columnNames;
}

- (id) initWithRows: (int) rows andCols: (int) cols;
- (id) initWithString:(NSString *)fileContents withHeaders:(BOOL)headers;
- (id) initWithContentsOfFile: (NSString *)path withHeaders:(BOOL)headers;
- (id) initSubMatrix:(PLTMatrix *)matrix firstRow:(int)firstRow lastRow:(int)lastRow firstCol:(int)firstCol lastCol:(int)lastCol;
- (id) initWithMatrix:(PLTMatrix *)matrix;
- (id) initWithHorizontalConcatenationOf:(PLTMatrix *)left and:(PLTMatrix *)right;

- (void) setValues:(NSMutableData *)values;
- (NSMutableData *) values;
- (void) setRows:(int) rows;
- (int) rows;
- (void) setCols:(int) cols;
- (int) cols;
- (int) size;
- (void) setRowExtension:(int) rowExtension;
- (int) rowExtension;
- (void) setColExtension:(int) colExtension;
- (int) colExtension;

- (void) setCell: (double) value atRow: (int) row andCol: (int) col;
- (double) cellAtRow: (int) row andCol: (int) col;

// - (void) transpose;
// - (void) resizeRows: (int) rows andCols: (int) cols;

- (void) minAndMaxValues:(double *)minValue and:(double *) maxValue;

- (void) setPrintFormat: (NSString *) format;
- (NSString *) format;

- (void) setColumnHeadings:(id)headings;
- (NSArray *)columnHeadings;
- (NSString *)columnHeadingForColumn:(int)col;
- (void) setColumnHeading:(NSString *)columnHeading forColumn:(int)col;

- (void) print;

- (NSString *) stringRepresentationUsingType:(NSString *)type outputPoints:(int)numPoints;
- (NSString *) delimitedStringRepresentation:(NSString *)delim outputPoints:(int)numPoints;
- (NSString *) XMLStringRepresentation:(int)numPoints;
- (NSString *) HTMLStringRepresentation:(int)numPoints;

@end