digitalmars.D.learn - Real Simple Question?
- WhatMeWorry (16/16) Oct 22 2016 This is probably so simple that there's no example anywhere.
- Jonathan M Davis via Digitalmars-d-learn (36/52) Oct 22 2016 Just put it in a separate module and then import it. e.g.
- WhatMeWorry (9/47) Oct 22 2016 Ok, but now I'm getting these error in my new
- Jonathan M Davis via Digitalmars-d-learn (11/18) Oct 22 2016 mypackage/constants.d needs to import the modules for any of the types i...
- tcak (3/14) Oct 25 2016 You could format your array in JSON format, and read it in your
- Steven Schveighoffer (22/45) Oct 25 2016 I would make this:
This is probably so simple that there's no example anywhere. Basically, I've got a huge array definition (see below) which I reuse over and over again in different projects. GLfloat[] vertices = [ // Positions // Texture Coords -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, ..... (lots and lots of values) ..... I'd like to place this one array into a separate file and just include it with a one line statement in many projects. I'm thinking mixins and/or imports but then if I knew how to do this, I wouldn't be asking. Thanks in advance.
Oct 22 2016
On Saturday, October 22, 2016 20:35:27 WhatMeWorry via Digitalmars-d-learn wrote:This is probably so simple that there's no example anywhere. Basically, I've got a huge array definition (see below) which I reuse over and over again in different projects. GLfloat[] vertices = [ // Positions // Texture Coords -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, ..... (lots and lots of values) ..... I'd like to place this one array into a separate file and just include it with a one line statement in many projects. I'm thinking mixins and/or imports but then if I knew how to do this, I wouldn't be asking. Thanks in advance.Just put it in a separate module and then import it. e.g. file: mypackage/constants.d ================== module mypackage.constants; GLfloat[] vertices = [ // Positions // Texture Coords -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, ..... (lots and lots of values) ..... ]; ================== file: main.d ================== import mypackage.constants; void main() { auto v = vertices; } ================== Probably the key thing to remember is that when you compile your program, all of the modules that are part of your program rather than a separate library need to be compiled into it. Simply importing them isn't enough - though using either rdmd or dub make that easier. This is the official documentation's page on modules: http://dlang.org/spec/module.html This is the chapter from Al's book that covers modules: http://ddili.org/ders/d.en/modules.html And you'd almost certainly benefit from simply reading Ali's book as a whole: http://ddili.org/ders/d.en/index.html - Jonathan M Davis
Oct 22 2016
On Saturday, 22 October 2016 at 20:51:14 UTC, Jonathan M Davis wrote:On Saturday, October 22, 2016 20:35:27 WhatMeWorry via Digitalmars-d-learn wrote:Ok, but now I'm getting these error in my new mypackage/constants.d ..\common\vertex_data.d(5,15): Error: undefined identifier 'GLfloat' ..\common\vertex_data.d(53,12): Error: undefined identifier 'vec3' Is there a way to just suck in the text from say a .txt file that would not be compiled before inclusion in main.d?[...]Just put it in a separate module and then import it. e.g. file: mypackage/constants.d ================== module mypackage.constants; GLfloat[] vertices = [ // Positions // Texture Coords -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, ..... (lots and lots of values) ..... ]; ================== file: main.d ================== import mypackage.constants; void main() { auto v = vertices; } ================== Probably the key thing to remember is that when you compile your program, all of the modules that are part of your program rather than a separate library need to be compiled into it. Simply importing them isn't enough - though using either rdmd or dub make that easier. This is the official documentation's page on modules: http://dlang.org/spec/module.html This is the chapter from Al's book that covers modules: http://ddili.org/ders/d.en/modules.html And you'd almost certainly benefit from simply reading Ali's book as a whole: http://ddili.org/ders/d.en/index.html - Jonathan M Davis
Oct 22 2016
On Saturday, October 22, 2016 21:34:36 WhatMeWorry via Digitalmars-d-learn wrote:Ok, but now I'm getting these error in my new mypackage/constants.d ..\common\vertex_data.d(5,15): Error: undefined identifier 'GLfloat' ..\common\vertex_data.d(53,12): Error: undefined identifier 'vec3'mypackage/constants.d needs to import the modules for any of the types it's using, otherwise it doesn't know about them. Modules are not textually included like header files are in C++ (compilation times would be _way_ worse if they were), so a module only has access to what it imports, and it's not affected by anything that imports it.Is there a way to just suck in the text from say a .txt file that would not be compiled before inclusion in main.d?String imports is a feature, but then you end up with multiple copies of the array in your program instead of one, and string imports are almost always the wrong solution. - Jonathan M Davis
Oct 22 2016
On Saturday, 22 October 2016 at 21:34:36 UTC, WhatMeWorry wrote:On Saturday, 22 October 2016 at 20:51:14 UTC, Jonathan M Davis wrote:You could format your array in JSON format, and read it in your program. That could be another solution.[...]Ok, but now I'm getting these error in my new mypackage/constants.d ..\common\vertex_data.d(5,15): Error: undefined identifier 'GLfloat' ..\common\vertex_data.d(53,12): Error: undefined identifier 'vec3' Is there a way to just suck in the text from say a .txt file that would not be compiled before inclusion in main.d?
Oct 25 2016
On 10/22/16 5:34 PM, WhatMeWorry wrote:On Saturday, 22 October 2016 at 20:51:14 UTC, Jonathan M Davis wrote:I would make this: immutable GLfloat[] vertices If you can do it. This will make it so it's a) accessible from pure functions, and b) will not create a separate thread-local copy for each thread (if you use threading).On Saturday, October 22, 2016 20:35:27 WhatMeWorry via Digitalmars-d-learn wrote:[...]Just put it in a separate module and then import it. e.g. file: mypackage/constants.d ================== module mypackage.constants; GLfloat[] vertices = [ // Positions // Texture Coords -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, ..... (lots and lots of values) ..... ];Ok, but now I'm getting these error in my new mypackage/constants.d ...\common\vertex_data.d(5,15): Error: undefined identifier 'GLfloat' ...\common\vertex_data.d(53,12): Error: undefined identifier 'vec3'It's difficult to know why without more code hints, but it appears that vertex_data.d needs to import the module that defines these types. Note that if you want to have an imported module provide these definitions from another module, then you need to public import the module. So for instance (guessing at your code, since I don't know what you have for import statements): mypackage/my_types.d: alias GLfloat = float; alias vec3 = GLfloat[3]; mypackage/constants.d: public import mypackage.my_types; // this allows importers of constants.d to see the types used GLfloat[] vertices = ... vertex_data.d: import mypackage.constants; // pulls in definitions from my_types.d -Steve
Oct 25 2016