1 /**
2 *   Copyright: © 2012-2014 Anton Gushcha
3 *   License: Subject to the terms of the MIT license, as written in the included LICENSE file.
4 *   Authors:  NCrashed <ncrashed@gmail.com>,
5 *             LeMarwin <lemarwin42@gmail.com>,
6 *             Nazgull09 <nazgull90@gmail.com>
7 */
8 module devol.individ;
9 
10 import std.variant;
11 
12 public
13 {
14 	import devol.line;	
15 }
16 
17 interface IndAbstract
18 {
19 	void initialize();
20 	@property Line[] program();
21 	@property void program(Line[] val);
22 	
23 	@property Line[] memory();
24 	
25 	@property double fitness();
26 	@property void fitness(double val);
27 	
28 	@property Line[] invals();
29 	@property Line[] outvals();
30 	@property void invals(Line[] val);
31 	@property void outvals(Line[] val);
32 	
33 	@property IndAbstract dup();
34 }
35 
36 class Individ : IndAbstract
37 {
38 	this()
39 	{
40 		mProgram = new Line[0];
41 		mMemory = new Line[0];
42 	}
43 	
44 	@property Line[] program()
45 	{
46 		return mProgram;
47 	}
48 	
49 	@property Line[] memory()
50 	{
51 		return mMemory;
52 	}
53 	
54 	@property void program(Line[] val)
55 	{
56 		mProgram = val;
57 	}
58 	
59 	@property string programString()
60 	{
61 		auto s = "";
62 		foreach( line; mProgram )
63 		{
64 			s ~= line.tostring ~ "\n";
65 		}
66 		return s;
67 	}
68 	
69 	@property string memoryString()
70 	{
71 		auto s = "";
72 		foreach( line; mMemory )
73 		{
74 			s ~= line.tostring ~ "/0x0A";
75 		}
76 		return s;
77 	}
78 		
79 	
80 	@property double fitness()
81 	{
82 		return mFitness;
83 	}
84 	
85 	@property void fitness(double val)
86 	{
87 		mFitness = val;
88 	}
89 	
90 	@property Line[] invals()
91 	{
92 		return inVals;
93 	}
94 	
95 	@property Line[] outvals()
96 	{
97 		return outVals;
98 	}
99 	
100 	@property void invals(Line[] val)
101 	{
102 		inVals = val;
103 	}
104 	
105 	@property void outvals(Line[] val)
106 	{
107 		outVals = val;
108 	}
109 	
110 	@property Individ dup()
111 	{
112 		auto ind = new Individ();
113 		foreach(line; mProgram)
114 			ind.mProgram ~= line.dup;
115 		foreach(line; mMemory)
116 			ind.mMemory ~= line.dup;	
117 		foreach(line; inVals)
118 			ind.inVals ~= line.dup;		
119 		foreach(line; outVals)
120 			ind.outVals ~= line.dup;	
121 		return ind;
122 	} 
123 	
124 	void initialize() {}
125 	
126     protected
127     {
128     	Line[] mProgram;
129     	Line[] mMemory; 	
130     	
131     	Line[] inVals;
132     	Line[] outVals;
133     	
134     	double mFitness;
135     }
136 }