Unions in C#
-
My first real programming job was all FORTRAN. 'Cause Real Scientists Program In FORTRAN. It was especially fun when everyone insisted that variables be named a,aa,aaa,b,bb,bbb,b1,bb1 etc. For a bunch of smart people they were truly awful at organising (let along thinking through) code.
cheers Chris Maunder
My very first programming was in BASIC in those days when it was really BASIC: You had a maximum of 286 numeric variables named A to Z or A0 - A9 to Z0 - Z9, plus 26 string variables A$ to Z$. And then you could have 26 arrays, I believe they were named A# to Z#. I really should dig up that old "Real Time Basic for the Univac 1100 series" manual from my basement, for a nostalgia trip :-) That was in my high school days. At the Univerisity we learned Fortran and then Simula and Pascal, and the professor went to extremes in demanding long, descriptive variable names: When adding two numbers, fitting the names of the sum and the two addends on a single line could be a problem within the 80 char screen width. But the professor insisted. Then, I looked over the shoulder of the brightest guys in the class while he was typing in some Pascal code, and I gasped: You can't hand in that! ... Variables were named I01, I02... F01, F02 (F for Float) and so on. "Of course I won't!" he replied, "Before I hand it in, I have the editor automatically replace I01 with NumberOfApplesPerBasket, F02 with AverageWeightPerAppleInGrams and I02 with NumberOfBasketsPerLoad - I can't waste my time typing those terribly long names every time I use that variable!" -- Sure he was the brightest guy. To him, the mental effort of knowing the meaning of I01 was no greater than knowingt the meaning of NumberOfApplesPerBasket. So why not save a little typing? For my own part, I am happy with descriptive names (within limits), even if it takes a little more typing.
-
Chris Maunder wrote:
Cause Real Scientists Program In FORTRAN.
And you were using it why?
Michael Martin Australia "I controlled my laughter and simple said "No,I am very busy,so I can't write any code for you". The moment they heard this all the smiling face turned into a sad looking face and one of them farted. So I had to leave the place as soon as possible." - Mr.Prakash One Fine Saturday. 24/04/2004
You hurt me. You hurt me deep.
cheers Chris Maunder
-
My very first programming was in BASIC in those days when it was really BASIC: You had a maximum of 286 numeric variables named A to Z or A0 - A9 to Z0 - Z9, plus 26 string variables A$ to Z$. And then you could have 26 arrays, I believe they were named A# to Z#. I really should dig up that old "Real Time Basic for the Univac 1100 series" manual from my basement, for a nostalgia trip :-) That was in my high school days. At the Univerisity we learned Fortran and then Simula and Pascal, and the professor went to extremes in demanding long, descriptive variable names: When adding two numbers, fitting the names of the sum and the two addends on a single line could be a problem within the 80 char screen width. But the professor insisted. Then, I looked over the shoulder of the brightest guys in the class while he was typing in some Pascal code, and I gasped: You can't hand in that! ... Variables were named I01, I02... F01, F02 (F for Float) and so on. "Of course I won't!" he replied, "Before I hand it in, I have the editor automatically replace I01 with NumberOfApplesPerBasket, F02 with AverageWeightPerAppleInGrams and I02 with NumberOfBasketsPerLoad - I can't waste my time typing those terribly long names every time I use that variable!" -- Sure he was the brightest guy. To him, the mental effort of knowing the meaning of I01 was no greater than knowingt the meaning of NumberOfApplesPerBasket. So why not save a little typing? For my own part, I am happy with descriptive names (within limits), even if it takes a little more typing.
Classic! Why solve a problem when you can create a sub-problem and solve that on top of the main problem. Ah, software developers.
cheers Chris Maunder
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
I did like unions for things like: union ColorMashup { long ARGB; struct { byte alpha; byte red; byte green; byte blue; } } where the same data could be accessed as a whole or part. Polymorphism solves most "union" problems a lot better, but the memory will probably be spread around a lot more. You had to squeeze every drop of memory and performance out of the old unix machines.
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
Most useful for hardware registers and even software registers. You can view register broadly via the long/int/short or via the fields contained within it. Save a copy: myCopyReg.bits = mySrcReg.bits. As a bonus your get a copy of the "undefined" bits. Beats myRegCopy.fld0 = myRegSrc.fld0; myRegCopy.fld1 = myRegSrc.fld1; myRegCopy.fld2 = myRegSrc.fld2; et. nauseum
-
oops just seeing it's not there natively. (Not sure why) but done through interop :)
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
Thank you for this posting. I am currently working on the conversion of some very old FORTRAN software for the NASA Voyager data processing as we are one of the instrument teams still working the Voyager Interstellar Mission and I have been struggling to find an option in C# to do exactly this, i.e. as mentioned in a reply this is like the FORTRAN COMMON BLOCK statement. Now I think I will be able to finish my conversion project a lot easier than attempting to write my own version of a COMMON statement and figuring out how to implement all of the various possibilities.
Jerry W. Manweiler, Ph.D. Fundamental Technologies, LLC
-
Thank you for this posting. I am currently working on the conversion of some very old FORTRAN software for the NASA Voyager data processing as we are one of the instrument teams still working the Voyager Interstellar Mission and I have been struggling to find an option in C# to do exactly this, i.e. as mentioned in a reply this is like the FORTRAN COMMON BLOCK statement. Now I think I will be able to finish my conversion project a lot easier than attempting to write my own version of a COMMON statement and figuring out how to implement all of the various possibilities.
Jerry W. Manweiler, Ph.D. Fundamental Technologies, LLC
-
var unioned = new[] { "Hi" }.Union(new[] { "I'm unioned" });
From the top of my head, but it's a union and it should compile :D
Best, Sander sanderrossel.com Continuous Integration, Delivery, and Deployment arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
-
You should be supporting the real men way of doing things bro. :)
Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.