1 module rip.io.interfaces;
2 
3 import std.stdio;
4 
5 /++
6 +   Base interface for format workers
7 +   Can be used not only for Surface
8 +   Example:
9 +   ------------
10 +   FormatWorker!int loader = new ...
11 +   int answer = 42;
12 +   int question;
13 
14 +   loader.save(42, "output.txt");
15 +   question = loader.load("universe.txt")
16 +   ------------
17 +/
18 interface FormatWorker(T) {
19     /++
20     +   Saves data to file
21     +   Params:
22     +     surface =   input data
23     +     name =      file name
24     +   Returns:
25     +     input data for using in UFCS
26     +
27     +/
28     T save(in T surface, in string name) const;
29     //ошибка должна выбивать исключение
30 
31     /++
32     +   Loads data from file
33     +   Params:
34     +     filename =  file name
35     +   Returns:
36     +     loaded data
37     +/
38     T load(in string name) const;
39 
40     /++
41     +   Decodes data from file
42     +   Params:
43     +     file =   file
44     +   Returns:
45     +     decoded data from file
46     +/
47     T decode(File file) const;
48 
49     /++
50     +   Check file for header
51     +   Params:
52     +     file =   file
53     +   Returns:
54     +     'true' if file have header of this format
55     +/
56     bool checkOnHeader(File file) const;
57 }
58 
59 //этому шаблону здесь не место
60 mixin template colorsToFile() {
61     import std.stdio;
62     void toFile(RGBColor color)  {
63         file.write(
64                     color.red!char,
65                     color.green!char,
66                     color.blue!char);
67     }
68 
69     /*surface.getPixelsRange().each!toFile;*/
70     auto range = surface.getPixels();
71 
72     import std.algorithm;
73     /*each!toFile(range);*/
74     //Бага?
75     //source/io/interfaces.d(25,16): Error: function declaration without return type. (Note that constructors are always named 'this')
76     //source/io/interfaces.d(25,23): Error: no identifier for declarator each!toFile(range)
77 }