Syntax: C, C++, Objective-C

C++

#include <iostream>

// If we increase row by 1, the offset will increase by sz (number of elements per row i.e. number of columns)
// If we increase col by 1, the offset will increase by 1
unsigned rowMajorOffset(unsigned row, unsigned col, unsigned sz)
{
    return col + row * sz;
}

// If we increase col by 1, the offset will increase by sz (number of elements per column i.e. number of rows)
// If we increase row by 1, the offset will increase by 1
unsigned columnMajorOffset(unsigned row, unsigned col, unsigned sz)
{
    return row + col * sz;
}

template <typename _ValueT, unsigned _R, unsigned _C, bool _ColumnMajor>
class Matrix {
protected:
	enum { ColumnMajor = _ColumnMajor };
	enum { R = _R };
	enum { C = _C };

	typedef _ValueT ValueT;

	ValueT m_values[C*R];

public:
	const ValueT & at (unsigned r, unsigned c) const
	{
		if (ColumnMajor)
			return m_values[columnMajorOffset(r, c, R)];
		else
			return m_values[rowMajorOffset(r, c, C)];
	}

	ValueT & at (unsigned r, unsigned c)
	{
		if (ColumnMajor)
			return m_values[columnMajorOffset(r, c, R)];
		else
			return m_values[rowMajorOffset(r, c, C)];
	}

	void loadTestPattern ()
	{
		for (unsigned r = 0; r < R; r += 1)
			for (unsigned c = 0; c < C; c += 1)
				at(r, c) = (r+1) * 1000 + (c+1);
	}

	void debug ()
	{
		using namespace std;

		if (ColumnMajor)
			cout << "Column-Major Matrix " << "(" << R << "," << C << ")" << " @ " << this << endl;
		else
			cout << "Row-Major Matrix " << "(" << R << "," << C << ")" << " @ " << this << endl;

		cout << "Memory Offset: ";
		for (unsigned i = 0; i < (R*C); i += 1)
			cout << i << "    ";
		cout << endl;

		cout << "       Values: ";	
		for (unsigned i = 0; i < (R*C); i += 1)
			cout << m_values[i] << " ";
		cout << endl;

		cout << "Standard Mathematical Notation:" << endl;
		cout << "      ";
		for (unsigned c = 0; c < C; c += 1)
			cout << "Col " << c << " ";
		cout << endl;

		for (unsigned r = 0; r < R; r += 1) {
			cout << "Row " << r << " ";
			for (unsigned c = 0; c < C; c += 1)
				cout << at(r, c) << "  ";
			cout << endl;
		}
		cout << endl;
	}

	Matrix<ValueT, R, C, !ColumnMajor> transposeStorage () const
	{
		Matrix<ValueT, R, C, !ColumnMajor> result;

		for (unsigned r = 0; r < R; r += 1)
			for (unsigned c = 0; c < C; c += 1)
				result.at(r, c) = at(r, c);

		return result;
	}

	Matrix<ValueT, C, R, !ColumnMajor> transposeMatrix () const
	{
		Matrix<ValueT, C, R, !ColumnMajor> result;

		memcpy(&result.at(0,0), m_values, sizeof(m_values));

		return result;
	}
};

int main (int argc, char * const argv[]) {
	Matrix<float, 4, 2, false> rowMajorMatrix;
	Matrix<float, 4, 2, true> columnMajorMatrix;

	rowMajorMatrix.loadTestPattern();
	rowMajorMatrix.debug();

	columnMajorMatrix.loadTestPattern();
	columnMajorMatrix.debug();

	rowMajorMatrix = columnMajorMatrix.transposeStorage();
	rowMajorMatrix.debug();

	Matrix<float, 2, 4, false> transposedMatrix = columnMajorMatrix.transposeMatrix();
	transposedMatrix.debug();

	return 0;
}

Objective-C Header

//
//  GHInventoryEditor.h
//  Goblin Hacker
//
//  Created by Samuel Williams on 19/12/07.
//  Copyright 2007 Samuel Williams, Orion Transfer Ltd. All rights reserved.

//  This software was originally produced by Orion Transfer Ltd.
//    Please see http://www.oriontransfer.org for more details.
//

/*
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


#import <Cocoa/Cocoa.h>

#import "GHEditorController.h"
#import "GHSavedGameDocument+Slots.h"

@interface GHInventoryEditor : GHEditorController {
	NSInteger armorType, weaponType, potionQuality;
}

+ (NSArray*) items;

@property NSInteger armorType;
@property NSInteger weaponType;
@property NSInteger potionQuality;

- (IBAction)healingPotions: (id)sender;
- (IBAction)manaPotions: (id)sender;
- (IBAction)cureDiseasePotions: (id)sender;
- (IBAction)catsEyePotions: (id)sender;
- (IBAction)predatorSightPotions:(id)sender;
- (IBAction)leatherSkinPotions: (id)sender;
- (IBAction)hastePotions: (id)sender;
- (IBAction)invisibilityPotions: (id)sender;

- (IBAction)basicWeapon: (id)sender;
- (IBAction)goodWeapon: (id)sender;
- (IBAction)superbWeapon: (id)sender;
- (IBAction)avatarWeapon: (id)sender;

- (IBAction)basicArmor: (id)sender;
- (IBAction)goodArmor: (id)sender;
- (IBAction)superbArmor: (id)sender;
- (IBAction)avatarArmor: (id)sender;

- (IBAction)alchemyBooks: (id)sender;
- (IBAction)amulets: (id)sender;
- (IBAction)lockpicks: (id)sender;
- (IBAction)reagents: (id)sender;
- (IBAction)reactants: (id)sender;
- (IBAction)rings: (id)sender;
- (IBAction)torches: (id)sender;

- (IBAction)avatarJewelry: (id)sender;

@end

Objective-C Implementation

//
//  GPointSet.m
//  Gocoa
//
//  Created by Samuel Williams on 9/05/05.
//  Copyright 2005 Orion Transfer Ltd. All rights reserved.
//

#import "GPointSet.h"

void adjacentPoints (NSPoint p, NSPoint pts[4]) { //pts must have four elements
	pts[3] = NSMakePoint (p.x - 1, p.y);
	pts[0] = NSMakePoint (p.x, p.y + 1);
	pts[1] = NSMakePoint (p.x + 1, p.y);
	pts[2] = NSMakePoint (p.x, p.y - 1);
}

@implementation GPointSet
+ (NSPoint) pointForIndex:(unsigned int)index withSize:(NSSize)s {
	int x = index % (int)(s.width);
	return NSMakePoint (x, (int)((index - x) / s.width));
}

+ (unsigned int) indexForPoint:(NSPoint)point withSize:(NSSize)s {
	return point.x + (point.y * s.width);
}

- (id) init {
	NSLog(@"%s does not have default constructor", __FUNCTION__);
	return nil;
}

- (id) initWithSize:(NSSize)newSize {
	if (self = [super init]) {
		size = newSize;
		indexSet = [[NSMutableIndexSet alloc] init];
	}

	return self;
}

- (void) dealloc {
	[super dealloc];
	[indexSet release];
}

- (NSMutableIndexSet*) indexSet {
	return [[indexSet retain] autorelease];
}

- (void) addPoint:(NSPoint)point {
	[indexSet addIndex:[GPointSet indexForPoint:point withSize:size]];
}

- (void) removePoint:(NSPoint)point {
	[indexSet removeIndex:[GPointSet indexForPoint:point withSize:size]];
}

- (BOOL) containsPoint:(NSPoint)point {
	return [indexSet containsIndex:[GPointSet indexForPoint:point withSize:size]];
}

- (NSPoint) pointForIndex:(unsigned int)index {
	return [GPointSet pointForIndex:index withSize:size];
}

- (unsigned int) indexForPoint:(NSPoint)point {
	return [GPointSet indexForPoint:point withSize:size];
}

- (NSString*)description {
	NSMutableString *result = [NSMutableString new];
	[result appendFormat:@"<GPointSet %h", self];

	unsigned index = [indexSet firstIndex];

	while (index != NSNotFound) {
		[result appendFormat:@"%@ ", NSStringFromPoint([self pointForIndex:index])];

		index = [indexSet indexGreaterThanIndex:index];
	}

	[result appendString:@">"];
	return result;
}

@end

Strings with embedded escapes

const char * text = "The elephant\n was in the room.";
	

Types and Functions

int   pthread_setcancelstate(int, int *);
int   pthread_setcanceltype(int, int *);
int   pthread_setconcurrency(int);
int   pthread_setschedparam(pthread_t, int ,
      const struct sched_param *);
int   pthread_setspecific(pthread_key_t, const void *);
void  pthread_testcancel(void);

namespace Bob {
	namespace moo {
		
	}
}