|         | 
     1 /* | 
|         | 
     2 	Copyright 2014 Teemu Piippo | 
|         | 
     3 	All rights reserved. | 
|         | 
     4  | 
|         | 
     5 	Redistribution and use in source and binary forms, with or without | 
|         | 
     6 	modification, are permitted provided that the following conditions | 
|         | 
     7 	are met: | 
|         | 
     8  | 
|         | 
     9 	1. Redistributions of source code must retain the above copyright | 
|         | 
    10 	   notice, this list of conditions and the following disclaimer. | 
|         | 
    11 	2. Redistributions in binary form must reproduce the above copyright | 
|         | 
    12 	   notice, this list of conditions and the following disclaimer in the | 
|         | 
    13 	   documentation and/or other materials provided with the distribution. | 
|         | 
    14 	3. Neither the name of the copyright holder nor the names of its | 
|         | 
    15 	   contributors may be used to endorse or promote products derived from | 
|         | 
    16 	   this software without specific prior written permission. | 
|         | 
    17  | 
|         | 
    18 	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
|         | 
    19 	"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | 
|         | 
    20 	TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | 
|         | 
    21 	PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER | 
|         | 
    22 	OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 
|         | 
    23 	EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 
|         | 
    24 	PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 
|         | 
    25 	PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 
|         | 
    26 	LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 
|         | 
    27 	NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
|         | 
    28 	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|         | 
    29 */ | 
|         | 
    30  | 
|         | 
    31 #pragma once | 
|         | 
    32 #include <algorithm> | 
|         | 
    33 #include <functional> | 
|         | 
    34  | 
|         | 
    35 #define FUNCTION auto | 
|         | 
    36 #define METHOD auto | 
|         | 
    37 #define MACRO_TO_STRING_2(A) #A | 
|         | 
    38 #define MACRO_TO_STRING(A) MACRO_TO_STRING_2(A) | 
|         | 
    39  | 
|         | 
    40 using std::swap; | 
|         | 
    41  | 
|         | 
    42 enum Color | 
|         | 
    43 { | 
|         | 
    44 	BLACK, | 
|         | 
    45 	RED, | 
|         | 
    46 	GREEN, | 
|         | 
    47 	YELLOW, | 
|         | 
    48 	BLUE, | 
|         | 
    49 	MAGENTA, | 
|         | 
    50 	CYAN, | 
|         | 
    51 	WHITE, | 
|         | 
    52 	DEFAULT, | 
|         | 
    53  | 
|         | 
    54 	NUM_COLORS | 
|         | 
    55 }; | 
|         | 
    56  | 
|         | 
    57 template<typename Signature> | 
|         | 
    58 using Function = std::function<Signature>; |