Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:39

0001 #pragma once
0002 /** 
0003 sidxname.h
0004 ===========
0005 
0006 Typical use with std::set::
0007 
0008     sidxname d(-1, "0123456789abcdef0123456789abcdef") ; 
0009     sidxname e(-2, "0123456789abcdef0123456789abcdef_") ; // beyond 32 gets truncated
0010 
0011     std::set<sidxname,sidxname_ordering> mm ; 
0012     mm.insert(d);  
0013     mm.insert(e);  
0014  
0015 
0016 **/
0017 
0018 #include <cassert>
0019 #include <string>
0020 #include <sstream>
0021 #include <cstring>
0022 #include <iostream>
0023 #include <iomanip>
0024 
0025 struct sidxname
0026 { 
0027    int idx ;  
0028    char name[32] ; 
0029 
0030    sidxname(int idx_, const char* n) ;  
0031 
0032    std::string get_name() const ; 
0033    std::string desc() const ; 
0034 };  
0035 
0036 
0037 struct sidxname_ordering 
0038 {
0039     bool operator()(const sidxname& lhs, const sidxname& rhs) const
0040     {
0041         return lhs.idx < rhs.idx ; 
0042     }
0043 };
0044 
0045 
0046 inline sidxname::sidxname(int idx_, const char* n )
0047    :
0048    idx(idx_)
0049 {
0050    int max = sizeof(name) - 1 ; 
0051    bool ok = int(strlen(n)) <= max ; 
0052    if(!ok) std::cerr 
0053         << "sidxname::sidxname"
0054         << " strlen(n) " << strlen(n)
0055         << " max " << max 
0056         << " FATAL name is too long [" << n << "]" 
0057         << std::endl 
0058         ; 
0059 
0060    assert(ok) ; 
0061    strcpy( name, n );  
0062 }
0063 
0064 
0065 inline std::string sidxname::desc() const 
0066 { 
0067     std::stringstream ss ; 
0068     ss << std::setw(3) << idx << " : [" << name << "]" ; 
0069     std::string str = ss.str(); 
0070     return str ;
0071 }
0072 
0073 
0074