Sponsored Content
Top Forums Programming C- trying to code a 'spare array'; 'enum' fauled. Post 302697941 by alex_5161 on Friday 7th of September 2012 03:39:10 PM
Old 09-07-2012
Corona688 -
Thanks for replay. Not what I have asked, but appreciate attention!

'Spare'=='Sparse', thank for correction and sorry for misspelling.
Regarding the >>enum E_TYPE {1,4,2};<< I actually mean to have an ability to define an association like: typedef enum E_TYPE {1=0,4=1,2=2} E_TP; (Agree, looks ugly, but why not?)
So use it like " int a = (E_TP)4;" and get a==1.
Would be usefull Smilie

Unfortunately, your code is not appliable to my intention.

First:
to have an element the loop should be used: I would like to avoid run a loop on any info-by-key request!
Whith loop my task could be done absolutely simple:
Code:
  struct { int key,val; }INF[] = {{10,5},{20,4},{40,8}};
  int get_val(int key) {
    int i;
    for(i; i<(sizeof(INF)/sizeof(INF[0]);i++) 
       if (INF[i].key==key) return INF[i].val;
  }

That it! No any smart structure with the conditions static members, no any extra complication with pointing to internal member-array, no any dynamic allocations.
(BTW, in your example it is completely unneeded: assign values in declaration and define 'p' as sized array, if you use '16' in function.)

Second: My 'big point' is to define a data construction and avoid as possible any run-time functionality to get a value (except some initialization on beginning)


I'l try to explain again:

I have in a header file an INF array of structures with two integers .
I would like to construct a way to access second value by the first one.
And I'd like to do it WITHOUT any loop through whole INF array!

Also, I going to be able to make changes in the header file without touching the source code when I need add, change or remove a pair in the INF array.

If it would be not integer 'key', I would implement it with 'enum', having a reference-array, that by enumerated values (by default - the same as an array is indexed) would return the INF array index for member with 'key'-label (the enumeration element). By that I would heve the val-value!
That array would be initialized on beginning by one time loop through the INF array and assigning the INF index to the REF-array element with the index==enumerated value of the first INF int: key!
(Hope, now I have better explained what I am looking for?)

Last edited by alex_5161; 09-07-2012 at 04:52 PM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Vfstab on spare disk - HOW ? Mount ?

Hi, guys ! Could someone clarify one thing for me: I start machine from disk0, and want to check the /etc/vfstab on disk1. How do i do it ? Tried to write: cd / mount /dev/dsk/c0t1d0s0 /mnt But if I do cd /mnt, it is empty. I expected to see disk1 there ? Or am I wrong ? How do I... (3 Replies)
Discussion started by: DGoubine
3 Replies

2. Programming

what is the base type of enum

helo i have asked in exam what that what is the base type of enum options are given bewlo (1) long int (2) short int (3) signed int (4) unsigned int can u tell me what is the exact answer from the above option Regards, Amit (1 Reply)
Discussion started by: amitpansuria
1 Replies

3. IP Networking

DNS ENUM RR interpretation

Hi Guys, This is really really urgent. Am looking out for some quick answers. I'm developing a DNS Resolver client that interprets DNS Query repsonses & pass on the needful to DNS applications. When an ENUM query(modified to an nslookup naptr query) is issued & an NAPTR RR(Resource Record)... (1 Reply)
Discussion started by: smanu
1 Replies

4. Programming

enum in c++

#include <iostream> #include <stdio.h> using namespace std; typedef struct A { enum a{ red,blue,green}a; }obj11; obj11 obj1; int main() { //obj1.a=red; // how to set variable ? cout<<"sizeof struct is n"<<sizeof(obj1); cout<<"obj1.a is"<<obj1.a; if... (1 Reply)
Discussion started by: crackthehit007
1 Replies

5. Solaris

Hot Spare pool

One more query in SVM :) Now with hot spare spool... I can understand adding/replacing a slice in particular hot spare pool with "-a / -r" option (or) adding a slice to all existing hot spare pool with "-all" option. Here my query is for deleting, we have only option "-d". 1) If the hot... (2 Replies)
Discussion started by: gowthamakanthan
2 Replies

6. Solaris

Hot Spare replacement

Hi Guys, Can Someone pls let me know the thorough process for Hot spare replacement as current Hot spare slice has broken down . :mad: Thanks ---------- Post updated at 06:34 PM ---------- Previous update was at 05:21 PM ---------- Update : Its a solaris 10 box (1 Reply)
Discussion started by: Solarister
1 Replies

7. Programming

enum and C preprocessor

Say I have a list of enumerations I wish to use to select a variable at compile-time: enum pins { PIN_A=1, PIN_B=7, PIN_C=6, } int VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7; #define PIN_TO_VAR(NUM) VAR ## NUM int main(void) { PIN_TO_VAR(PIN_A)=32;... (2 Replies)
Discussion started by: Corona688
2 Replies

8. Solaris

How to get spare disks working

Dears how can i make this spare disks working online to replace a defective disks vxdisk list DEVICE TYPE DISK GROUP STATUS c0t10d0s2 sliced - - error c0t11d0s2 sliced disk08 rootdg online c1t16d0s2 sliced ... (3 Replies)
Discussion started by: thecobra151
3 Replies

9. Programming

Mixed enum types - coverity defect

Hi All, I came across this error "MIXING ENUM TYPES" when I run my C program against the Coverity Tool. I've made many search relating to the error, but I didnt find the exact solution. Can anyone help me to overcome this.? Thanks in Advance.!! (3 Replies)
Discussion started by: Parameswaran
3 Replies

10. Solaris

How to determine if i have spare disks in Solaris?

Hi Guys, obviously new to SOLARIS SUN SPARC 5.10 I would really appreciate if you help me see how to find free disks available in my system. Like i am a linux admin. If i want to grow a file system in linux. I would first have a look at my volume groups to see if they have free PEs if not then... (2 Replies)
Discussion started by: aiqbal
2 Replies
metahs(1M)						  System Administration Commands						metahs(1M)

NAME
metahs - manage hot spares and hot spare pools SYNOPSIS
/usr/sbin/metahs [-s setname] -a all component /usr/sbin/metahs [-s setname] -a hot_spare_pool [component] /usr/sbin/metahs [-s setname] -d hot_spare_pool [component] /usr/sbin/metahs [-s setname] -d all component /usr/sbin/metahs [-s setname] -e component /usr/sbin/metahs [-s setname] -r hot_spare_pool component-old /usr/sbin/metahs [-s setname] -r all component-old component-new /usr/sbin/metahs [-s setname] -i [hot_spare_pool...] DESCRIPTION
The metahs command manages existing hot spares and hot spare pools. It is used to add, delete, enable, and replace components (slices) in hot spare pools. Like the metainit command, the metahs command can also create an initial hot spare pool. The metahs command does not replace a component of a metadevice. This function is performed by the metareplace command. Hot spares are always in one of three states: available, in-use, or broken. Available hot spares are running and ready to accept data, but are not currently being written to or read from. In-use hot spares are currently being written to and read from. Broken hot spares are out of service and should be repaired. The status of hot spares is displayed when metahs is invoked with the -i option. Solaris Volume Manager supports storage devices and logical volumes, including hot spares, greater than 1 terabyte (TB) when Solaris 10 is running a 64-bit kernel. If a system with large volumes or hot spares is rebooted under a 32-bit Solaris 10 kernel, the large volumes are visible through metastat output, but they cannot be accessed, modified or deleted, and no new large volumes can be created. Any volumes or file systems on a large volume in this situation are also unavailable. If a system with large volumes is rebooted under a version of Solaris prior to Solaris 10, Solaris Volume Manager will not start. All large volumes must be removed before Solaris Volume Manager runs under another version of the Solaris Operating Environment. OPTIONS
Root privileges are required for any of the following options except -i. The following options are supported: -a all component Add component to all hot spare pools. all is not case sensitive. -a hot_spare_pool [component] Add the component to the specified hot_spare_pool. hot_spare_pool is created if it does not already exist. -d all component Delete component from all the hot spare pools. The component cannot be deleted if it is in the in-use state. -d hot_spare_pool [component] Delete hot_spare_pool, if the hot_spare_pool is both empty and not referenced by a metadevice. If component is specified, it is deleted from the hot_spare_pool. Hot spares in the in-use state cannot be deleted. -e component Enable component to be available for use as a hot spare. The component can be enabled if it is in the broken state and has been repaired. -i [hot_spare_pool...] Display the status of the specified hot_spare_pool or for all hot spare pools if one is not specified. -r all component-old component-new Replace component-old with component-new in all hot spare pools which have the component associated. Components cannot be replaced from any hot spare pool if the old hot spare is in the in-use state. -r hot_spare_pool component-old component-new Replace component-old with component-new in the specified hot_spare_pool. Components cannot be replaced from a hot spare pool if the old hot spare is in the in-use state. -s setname Specify the name of the diskset on which metahs works. Using the -s option causes the command to perform its administrative function within the specified diskset. Without this option, the command performs its function on local hot spare pools. OPERANDS
The following operands are supported: component The logical name for the physical slice (partition) on a disk drive, such as /dev/dsk/c0t0d0s2. hot_spare_pool Hot spare pools must be of the form hspnnn, where nnn is a number in the range 000-999. EXAMPLES
Example 1: Adding a Hot Spare to a Hot Spare Pool The following example adds a hot spare /dev/dsk/c0t0d0s7 to a hot spare pool hsp003: # metahs -a hsp003 c0t0d0s7 When the hot spare is added to the pool, the existing order of the hot spares already in the pool is preserved. The new hot spare is added at the end of the list of hot spares in the hot spare pool specified. Example 2: Adding a Hot Spare to All Currently Defined Pools This example adds a hot spare to the hot spare pools that are currently defined: # metahs -a all c0t0d0s7 The keyword all in this example specifies adding the hot spare, /dev/dsk/c0t0d0s7, to all the hot spare pools. Example 3: Deleting a Hot Spare This example deletes a hot spare, /dev/dsk/c0t0d0s7, from a hot spare pool, hsp003: # metahs -d hsp003 c0t0d0s7 When you delete a hot spare, the position of the remaining hot spares in the pool changes to reflect the new order. For instance, if in this example /dev/dsk/c0t0d0s7 were the second of three hot spares, after deletion the third hot spare would move to the second position. Example 4: Replacing a Hot Spare This example replaces a hot spare that was previously defined: # metahs -r hsp001 c0t1d0s0 c0t3d0s0 In this example, the hot spare /dev/dsk/c0t1d0s0 is replaced by /dev/dsk/c0t3d0s0. The order of the hot spares does not change. EXIT STATUS
The following exit values are returned: 0 Successful completion. >0 An error occurred. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Availability |SUNWmdu | +-----------------------------+-----------------------------+ SEE ALSO
mdmonitord(1M), metaclear(1M), metadb(1M), metadetach(1M), metainit(1M), metaoffline(1M), metaonline(1M), metaparam(1M), metarecover(1M), metarename(1M), metareplace(1M), metaroot(1M), metaset(1M), metassist(1M), metastat(1M), metasync(1M), metattach(1M), md.tab(4), md.cf(4), mddb.cf(4), md.tab(4), attributes(5), md(7D) Solaris Volume Manager Administration Guide WARNINGS
Do not create large (>1 TB) volumes if you expect to run the Solaris Operating Environment with a 32-bit kernel or if you expect to use a version of the Solaris Operating Environment prior to Solaris 10. SunOS 5.10 8 Aug 2003 metahs(1M)
All times are GMT -4. The time now is 02:51 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy