[Asterisk-Users] OT - C structure question
Race Vanderdecken
asteriskusers at codetyrant.com
Thu Feb 24 10:44:42 MST 2005
Greetings,
First, you are hereby admonished for asking programming/development
questions on the user list.
C does not have a way to do this directly. Yes, you could use some
preprocessing macro but the code would be a nightmare.
You actually gave yourself the answer in your questions.
You can use a "map" data structure to do this.
GetChannelData( char* Variable )
{
return( mapX[variable] );
}
A "map" is a two dimensional array where the first column holds a
character string and the second column holds the data associated with
the array.
http://www.sgi.com/tech/stl/Map.html -- SGI gives a good reference and
some great tutorial like information on advanced data structures.
A less intense tutorial is here
http://www.cprogramming.com/tutorial/stl/stlmap.html
The STL, standard template library, is a C/C++ library that allows you
to create a map for your particular code.
You enter each "variable" and its associated value into the map.
Then you call y = mapX[ variable ] and it gives you back the value you
assigned to it.
mapX[] is not really an array, so you can do mapx[1] because there is
not really a mapX[1] value since all the indexing is done privately you
don't really know the real location of where your "variable" value went
in the array.
For ( y = variable[x]; x < 10; x++ )
{
mapX[ y ] = x;
}
While this may look like an array of 10 items it is not, the "[]"
brackets are overloaded to make retrieving stuff eaiser.
Race "The Tyrant" Vanderdecken
An next time you have a code question be sure to use asterisk-dev list
or others my flame you.
-----Original Message-----
From: asterisk-users-bounces at lists.digium.com
[mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Asterisk
Sent: Thursday, February 24, 2005 11:42 AM
To: asterisk-users at lists.digium.com
Subject: [Asterisk-Users] OT - C structure question
I hae tried searching the web for the answer, but, man is there a lot of
pages ... :(
in the language I develop in, if I have a structure I can dynamically
refer to the contents of a field of the structure like so:
MESSAGE SomeStructure:Field(SomeFieldName):Value
where SomeFieldName is either a quoted constant or a variable
expressions
In "C", I beleive that you can refer to the contents of a "field" in a
"structure" like so:
chan->context or
chan->exten
Is is possible to refer to these fields like
chan->(variable) where variable is either "context" or "exten" or an
expression that resolves to a valid fieldname of the structure ?
My reason for asking is that I want to create an application that would
take a channel and a field name and return the value of the field.
for example
GetChannelData("context")
GetChannelData("exten")
and I didn't want to have to declare a massive case statement, and have
to modify the app everytime some new fields were added to the structure.
I know that some of these variables are already exposed, but was wanting
to get some other values.
Julian
_______________________________________________
Asterisk-Users mailing list
Asterisk-Users at lists.digium.com
http://lists.digium.com/mailman/listinfo/asterisk-users
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users
More information about the asterisk-users
mailing list