Line | |
---|
1 | namespace HeuristicLab.Problems.ProgramSynthesis.Push.Generators {
|
---|
2 | using System;
|
---|
3 | using HeuristicLab.Core;
|
---|
4 | using HeuristicLab.Random;
|
---|
5 |
|
---|
6 | public class NameGenerator {
|
---|
7 | public const int DefaultRandomNameLength = 10;
|
---|
8 |
|
---|
9 | private static readonly char[] chars =
|
---|
10 | "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
|
---|
11 |
|
---|
12 | private int index;
|
---|
13 |
|
---|
14 | public string GetNext() {
|
---|
15 | var length = this.index < chars.Length ? 1 : (int)Math.Log(this.index, chars.Length) + 1;
|
---|
16 | var result = new char[length];
|
---|
17 | var tmp = this.index;
|
---|
18 | this.index++;
|
---|
19 |
|
---|
20 | for (var i = length; i > 0; i--) {
|
---|
21 | var a = (int)Math.Pow(chars.Length, i - 1);
|
---|
22 | var b = tmp / a;
|
---|
23 |
|
---|
24 | result[length - i] = chars[b];
|
---|
25 |
|
---|
26 | tmp -= a * b;
|
---|
27 | }
|
---|
28 |
|
---|
29 | return new string(result);
|
---|
30 | }
|
---|
31 |
|
---|
32 | public static string RandomName(IRandom random) {
|
---|
33 | return RandomName(DefaultRandomNameLength, random);
|
---|
34 | }
|
---|
35 |
|
---|
36 | public static string RandomName(int length = DefaultRandomNameLength, IRandom random = null) {
|
---|
37 | random = random ?? new FastRandom();
|
---|
38 | var name = new char[length];
|
---|
39 |
|
---|
40 | for (var i = 0; i < length; i++)
|
---|
41 | name[i] = chars[random.Next(chars.Length)];
|
---|
42 |
|
---|
43 | return new string(name);
|
---|
44 | }
|
---|
45 | }
|
---|
46 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.