I have made VGA emulation with registers and memory in my emulator. But for some reason the writes to the union array with CPU data (register 0-8 of the VGA's Graphics Controller Registers, referenced with <GRAPHREGS>.DATA[index]) don't reflect on the union's data.
typedef union __attribute__((packed)) {
byte DATA[9]; //9 registers present!
struct //Contains the registers itself! {
//Set/Reset Register (index 00h)
union {
[code]...
what's going wrong? Have I made an error in the registers?
(In this case I write to register <GRAPHREGS>.DATA[8] (which should be the <GRAPHREGS>.REGISTERS.BITMASKREGISTER)), but the BITMASKREGISTER stays 0, while DATA[8] gets the correct value.
For my assignment we HAVE to use typedef to declare these. I tried a multitude of combinations using typedef, but then the rest of my code that uses songId and typeOfSong is not valid. How would I set up the correct arrays using typedef?
I'm given a mathematical function F(x) = etc..., the user inputs an initial x point and a final x point. The program finds the integration.
Below is a snippet of code.
/*Typedefs as given by prof*/ typedef double (*mainFunction) (double); typedef double (*calcArea) (mainFunction, double, double); int main () { answer = calcIntegral(mainFunction *curve1, calcArea *calcAreaRect, a, B)/>; /*it doesn't like this line*/ printf("The integral from %lf to %lf is: %.4lf", &a,&b,&answer); return 0; }
curve1 is a function that accepts a double and returns a double, calcAreaRect takes mainFunction main(which is F(x) so i stored the fn in curve1), double and double.
I have some complex declarations to simplify with typedef I have done a try
1. Code: char (*x[10]) (int); /* typedef char FUNC(int); typedef FUNC *FUNC_PTR; FUNC_PTR x[10]; */ Why we don't use * symbol in the last statement in front of FUNC_PTR?
I'm trying to use a structure in union in the following format:
Code: union data { unsigned char All[10] ; struct data_pkt { unsigned char ack; unsigned short status; unsigned short data_length; unsigned char Data[5]; }format; }adb; adb.
All has 10 bytes which is equivalent to the structure bytes. ie 6 bytes if unsigned char and 2 short i.e 4 bytes. Thus total 10 bytes is given to adb.All. When I print the struct size I get 12 bytes. This creates problem in obtaining data in union. According to the program:
adb.format.ack should have the address of adb.All[0] adb.format.status should have the address of adb.All[1] adb.format.data_length should have the address of adb.All[3] adb.format.Data[0] should have the address of adb.All[5]
But in actual case this is how memory is allocated:
adb.format.ack assigned to the address of adb.All[0] adb.format.status assigned to the address of adb.All[2] adb.format.data_length assigned to the address of adb.All[4] adb.format.Data[0] assigned to the address of adb.All[6]
I need to create the following brain damaging abomination:
I need a function pointer type to a function that has an argument of the same function pointer type and returns the same function pointer type.
The purpose is to enable a type of subroutine threading scheme for a small application specific scripting language. The question could just as well have been posted to the C forum.
This syntax works, but Payload is a generic type which I can coerce into the right pointer type via a cast. This is ugly IMHO. I could also hide it as a pointer in the FlipState class since I've forward declared this.
But this is an extra indirection in a performance critical part of the code, and also ugly.
Code: class FlipState ; typedef PayLoad (*FuncPtr) (FlipState *fs, PayLoad P) ; This syntax blows chunks using gcc on the other hand. Code: class FlipState ; typedef FuncPtr (*FuncPtr) (FlipState *fs, FuncPtr P) ;
[Code] .....
This is hardly surprising. The compiler could not possibly understand what I was defining in the typedef. I think what I need is some kind of way to forward declare a function pointer type and then redefine it properly.
Is such a think even possible or am I just SOL? This one is mind boggling. We know how to do this with classes or other complex data types, but the syntax eludes me for both C++ and C.
How I could use unions to combine registers elegantly. For example I have the 8 bit registers B and C & I have opcodes that work on each independent register such as add b, c, which is simple, but then I also have opcodes that work on both of them as if they're one like ld a, bc. I know I could go about that by just masking them together but I've seen it done with unions before & it made everything so much more simple.
In the current code,We are using pointer of union and assigning value.
class sample { union { short *two_int; int *four_int; double *eight_real; char *one_ascii; // void *v; }; }
Than we assign value in following way.
sample.four_int[0] = (x + xoff); ( x and xoff and y and yoff all are integer) sample.four_int[1] = (y + yoff);
Than we write data into file. it was working fine into 32 bit machine but it is not working 64bit machine. When I compare data and found that data is divided by 4. For Ex The File generating from 32 bit machine contain 80 than 64 bit . File contain 20.
typedef union UUID { unsigned char byte[16]; /**< Array of 16 bytes. */ unsigned int ll[2]; /**< Array of two 64-bit words. */ } UUID;
[Code] ......
The compiler complains thus
$ g++ union.cpp union.cpp: In function "int main()": union.cpp:15:17: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x union.cpp:15:17: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x union.cpp:15:17: error: no match for "operator=" in "entry.EntryHeader::uuid = {0, 0, 0, 2}" union.cpp:1:20: note: candidate is: UUID& UUID:perator=(const UUID&)
How do I go about assigning values to this union in C++.
Classes can be defined not only with keyword class, but also with keywords struct and union.
The concepts of class and data structure are so similar that both keywords (struct and class) can be used in C++ to declare classes (i.e. structs can also have function members in C++, not only data members). The only difference between both is that members of classes declared with the keyword struct have public access by default, while members of classes declared with the keyword class have private access. For all other purposes both keywords are equivalent.
The concept of unions is different from that of classes declared with struct and class, since unions only store one data member at a time, but nevertheless they are also classes and can thus also hold function members. The default access in union classes is public.
The above is a statement taken from a C++ tutorial. So I understand classes a bit better now but the above quote doesnt make too much sense. Is it saying that you can have a class within a class?
This is what I'd expect, but I can't find any evidence online in C standards or elsewhere:
1. Works as expected, sets the value of a.num1 to 2. 2. Works as expected, sets the value of b.num1 to 2. 3. Works as expected, sets the value of a.num2 to 2. 4. Works as expected, sets the value of b.num2 to 2. 5. Works as expected, sets the value of b.num1 to 2. 6. Works as expected, sets the value of a.num1 to 2. 7. Works as expected, sets the value of b.num1 to 2. 8. Crashes/Memory Corruption, attempted to alter memory outside struct. 9. Works as expected, * ss1 == * ss2 10. Crashes/Memory Corruption, attempted to alter memory outside struct.
I've tested simular code on my machine (Xubuntu 14.04LTS compiled with gcc on -O3) and it appears to be reliable, given that you stick with acessing the type tagged in the struct or the common initial union struct members (in this case num1).
union { short *two_int; int *four_int; double *eight_real; char *one_ascii; // void *v; };
We have write function which write into file.
fwrite (r.one_ascii, 1, i, outstr);
I found one thing,When we write function, we fill only four int in following way.
r.four_int[0] = x + xoff; r.four_int[1] = y + yoff;
So my question,we fill four_int but write one_ascii only.As is it union of pointer. So it does not matter. I am using 64bit machine and do not have any issue in 32 bit machine.
Code: typedef struct token { int tokenType; // what token is that int tokenCode; // the code of a function if applicable char *tokenString; // Source token double tokenValue; // if token is a number
[Code] .....
I got several warnings and erros, is it possible to declare a table like that ? What's the correct way to declare it ?
The program is to find intersection,union and difference of two sets. The program take the input correctly but after it crashes with the message that some exe is not working...
Code: #include<iostream> using namespace std; void Input(int *A, int*B, int size1, int size2) //input function {
I'm trying to come up with the union of two Vector ADT bags, so I have to overload the '+' operator, but I'm getting a bunch of error messages saying:
VectorBag.cpp: In instantiation of ‘VectorBag<ItemType> VectorBag<ItemType>::operator+(VectorBag<ItemType>) [with ItemType = int]’: proj2.cpp:161:42: required from here VectorBag.cpp:81:24: error: no match for ‘operator[]’ (operand types are ‘VectorBag<int>’ and ‘int’) newBag.add(anotherBag[i]); ^ Here is the function to overload the operator:
template<class ItemType> VectorBag<ItemType> VectorBag<ItemType>::operator+(VectorBag<ItemType> anotherBag) { VectorBag<ItemType> newBag; for (int i = 0; i < anotherBag.getCurrentSize(); i++) newBag.add(anotherBag[i]); }
The add() function is pre-defined by me somewhere else in the code. It basically does push_back().
I'm trying to union eleven tables to call out data. Parent table is 'Events', child tables are 'SR1Laptimes', 'SR2Laptimes' and so on (there are ten SR... tables). Primary key in all tables is EventName. Parent/Child relationship is Events.EventName/SR1Laptimes.EventName etc All tables that start with SR have the same Schema. I'm trying to call out MIN(Q1) across all table but first need to Union them I believe. Here is my code.
myCommand.CommandText = "SELECT MIN(Q1), MIN(Q2), MIN(Q3), MIN(Q4), MIN(LaptimesMinutes), MIN(LaptimesSeconds) FROM (SELECT * FROM Events UNION ALL SELECT * FROM SR1Laptimes UNION ALL SELECT * FROM SR2Laptimes) WHERE (Events.Track = @track) AND (Events.Number = @number) AND (Events.Rider = @rider)"; myCommand.Parameters.AddWithValue("@track", analysisTrackComboBox.Text); myCommand.Parameters.AddWithValue("@number", analysisNumberComboBox.Text); myCommand.Parameters.AddWithValue("@rider", analysisRiderComboBox.Text);
This compiler on SYSTEM2 is happy. but second way does not look correct to me and compiler on system 1 complains about it. Which is the correct way to allocate memory?
If first one is correct then what should i look in for to avoid this error? Could this be an issue with compiler on SYSTEM2? If i use second method on SYSTEM2 code segfaults during malloc.
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct mystruct1 { int a; int b;
I am currently working with win32 API , for image processing, one of the windows function returns RGBA ( colors ) as unsigned int , I then split it into individual bytes by creating a union ,
Code: union colour { unsigned int value; unsigned char RGBA[4]; }
to spit the int into individual bytes, my Question is there a better or my convenient way of doing this.