33 #ifndef __INCLUDE_MIST_DICOM_TAG__
34 #define __INCLUDE_MIST_DICOM_TAG__
37 #ifndef __INCLUDE_MIST_CONF_H__
38 #include "../config/mist_conf.h"
60 typedef size_t size_type;
61 typedef ptrdiff_t difference_type;
63 #ifdef __INCLUDE_DICOM_TAG_ALL__
66 #define __INCLUDE_DICOM_TAG_0000__
67 #define __INCLUDE_DICOM_TAG_0002__
68 #define __INCLUDE_DICOM_TAG_0004__
69 #define __INCLUDE_DICOM_TAG_0008__
70 #define __INCLUDE_DICOM_TAG_0010__
71 #define __INCLUDE_DICOM_TAG_0012__
72 #define __INCLUDE_DICOM_TAG_0018__
73 #define __INCLUDE_DICOM_TAG_0020__
74 #define __INCLUDE_DICOM_TAG_0022__
75 #define __INCLUDE_DICOM_TAG_0028__
76 #define __INCLUDE_DICOM_TAG_0032__
77 #define __INCLUDE_DICOM_TAG_0038__
78 #define __INCLUDE_DICOM_TAG_003A__
79 #define __INCLUDE_DICOM_TAG_0040__
80 #define __INCLUDE_DICOM_TAG_0042__
81 #define __INCLUDE_DICOM_TAG_0044__
82 #define __INCLUDE_DICOM_TAG_0046__
83 #define __INCLUDE_DICOM_TAG_0050__
84 #define __INCLUDE_DICOM_TAG_0054__
85 #define __INCLUDE_DICOM_TAG_0060__
86 #define __INCLUDE_DICOM_TAG_0062__
87 #define __INCLUDE_DICOM_TAG_0064__
88 #define __INCLUDE_DICOM_TAG_0066__
89 #define __INCLUDE_DICOM_TAG_0070__
90 #define __INCLUDE_DICOM_TAG_0072__
91 #define __INCLUDE_DICOM_TAG_0074__
92 #define __INCLUDE_DICOM_TAG_0088__
93 #define __INCLUDE_DICOM_TAG_0100__
94 #define __INCLUDE_DICOM_TAG_0400__
95 #define __INCLUDE_DICOM_TAG_2000__
96 #define __INCLUDE_DICOM_TAG_2010__
97 #define __INCLUDE_DICOM_TAG_2020__
98 #define __INCLUDE_DICOM_TAG_2030__
99 #define __INCLUDE_DICOM_TAG_2040__
100 #define __INCLUDE_DICOM_TAG_2050__
101 #define __INCLUDE_DICOM_TAG_2100__
102 #define __INCLUDE_DICOM_TAG_2110__
103 #define __INCLUDE_DICOM_TAG_2120__
104 #define __INCLUDE_DICOM_TAG_2130__
105 #define __INCLUDE_DICOM_TAG_2200__
106 #define __INCLUDE_DICOM_TAG_3002__
107 #define __INCLUDE_DICOM_TAG_3004__
108 #define __INCLUDE_DICOM_TAG_3006__
109 #define __INCLUDE_DICOM_TAG_3008__
110 #define __INCLUDE_DICOM_TAG_300A__
111 #define __INCLUDE_DICOM_TAG_300C__
112 #define __INCLUDE_DICOM_TAG_300E__
113 #define __INCLUDE_DICOM_TAG_4000__
114 #define __INCLUDE_DICOM_TAG_4008__
115 #define __INCLUDE_DICOM_TAG_4FFE__
116 #define __INCLUDE_DICOM_TAG_5000__
117 #define __INCLUDE_DICOM_TAG_5200__
118 #define __INCLUDE_DICOM_TAG_5400__
119 #define __INCLUDE_DICOM_TAG_5600__
120 #define __INCLUDE_DICOM_TAG_6000__
121 #define __INCLUDE_DICOM_TAG_FFFF__
130 #define __INCLUDE_DICOM_TAG_0002__
131 #define __INCLUDE_DICOM_TAG_0028__
132 #define __INCLUDE_DICOM_TAG_FFFF__
174 return( ( ( (
unsigned int)group << 16 ) & 0xffff0000 ) + ( (
unsigned int)element & 0x0000ffff ) );
181 return( static_cast< unsigned short >( 0x0000ffff & ( group_element >> 16 ) ) );
187 return( static_cast< unsigned short >( 0x0000ffff & group_element ) );
200 else if( vr ==
"AS" )
204 else if( vr ==
"AT" )
208 else if( vr ==
"CS" )
212 else if( vr ==
"DA" )
216 else if( vr ==
"DS" )
220 else if( vr ==
"DT" )
224 else if( vr ==
"FL" )
228 else if( vr ==
"FD" )
232 else if( vr ==
"IS" )
236 else if( vr ==
"LO" )
240 else if( vr ==
"LT" )
244 else if( vr ==
"OB" )
248 else if( vr ==
"OF" )
252 else if( vr ==
"OW" )
256 else if( vr ==
"PN" )
260 else if( vr ==
"SH" )
264 else if( vr ==
"SL" )
268 else if( vr ==
"SQ" )
272 else if( vr ==
"SS" )
276 else if( vr ==
"ST" )
280 else if( vr ==
"TM" )
284 else if( vr ==
"UI" )
288 else if( vr ==
"UL" )
292 else if( vr ==
"UN" )
296 else if( vr ==
"US" )
300 else if( vr ==
"UT" )
312 std::string ret =
"UNKNOWN";
438 dicom_tag(
unsigned int t = 0xffffffff,
dicom_vr vvr =
UNKNOWN,
int vvm = 1,
const std::string &text =
"",
bool b =
true ) : tag( t ), vr( vvr ), vm( vvm ), comment( text ), enable( b ) { }
441 dicom_tag(
unsigned int t,
const std::string &vvr,
int vvm,
const std::string &text,
bool b ) : tag( t ), vr(
get_dicom_vr( vvr ) ), vm( vvm ), comment( text ), enable( b ) { }
444 dicom_tag(
const dicom_tag &t ) : tag( t.tag ), vr( t.vr ), vm( t.vm ), comment( t.comment ), enable( t.enable ) { }
464 return( tag < t.
tag );
485 dicom_uid(
const std::string &
id =
"",
const std::string &n =
"",
const std::string &t =
"" ) : uid( id ), name( n ), type( t ){ }
508 return( uid <
id.uid );
518 typedef std::multiset< dicom_tag > baseclass;
522 unsigned short group;
523 unsigned short element;
526 const char * comment;
531 void insert_tag(
unsigned short group,
unsigned short element,
const std::string &vr,
int vm,
const std::string &comment,
bool b =
true )
538 void insert_tag(
unsigned short group,
unsigned short element,
dicom_vr vr,
int vm,
const std::string &comment,
bool b =
true )
545 void insert_tag(
const dicom_tag_element *dicom_tags )
547 const dicom_tag_element *tag = dicom_tags;
548 while( !( tag->group == 0x0000 && tag->element == 0x0000 && tag->vr ==
UNKNOWN ) )
550 insert_tag( tag->group, tag->element, tag->vr, tag->vm, tag->comment );
557 bool contain_tag(
unsigned short group,
unsigned short element )
const
560 return( ite != baseclass::end( ) );
564 dicom_tag get_tag(
unsigned short group,
unsigned short element,
const std::string &vr )
const
566 return( get_tag( group, element,
get_dicom_vr( vr ) ) );
573 baseclass::const_iterator ite = baseclass::find( tag );
574 if( ite == baseclass::end( ) )
579 baseclass::const_iterator upper_ite = baseclass::upper_bound( tag );
580 baseclass::const_iterator iite = ite;
583 if( iite->vr == vr )
return( *iite );
585 }
while( iite != upper_ite );
590 dicom_tag get_tag(
unsigned short group,
unsigned short element )
const
593 baseclass::const_iterator ite = baseclass::find( tag );
594 if( ite == baseclass::end( ) )
666 #ifdef __INCLUDE_DICOM_TAG_0000__
668 dicom_tag_element dicom_tag_elements[] = {
669 #include "dicom_tag/dicom_tag0000.csv"
671 insert_tag( dicom_tag_elements );
674 #ifdef __INCLUDE_DICOM_TAG_0002__
676 dicom_tag_element dicom_tag_elements[] = {
677 #include "dicom_tag/dicom_tag0002.csv"
679 insert_tag( dicom_tag_elements );
682 #ifdef __INCLUDE_DICOM_TAG_0004__
684 dicom_tag_element dicom_tag_elements[] = {
685 #include "dicom_tag/dicom_tag0004.csv"
687 insert_tag( dicom_tag_elements );
690 #ifdef __INCLUDE_DICOM_TAG_0008__
692 dicom_tag_element dicom_tag_elements[] = {
693 #include "dicom_tag/dicom_tag0008.csv"
695 insert_tag( dicom_tag_elements );
698 #ifdef __INCLUDE_DICOM_TAG_0010__
700 dicom_tag_element dicom_tag_elements[] = {
701 #include "dicom_tag/dicom_tag0010.csv"
703 insert_tag( dicom_tag_elements );
706 #ifdef __INCLUDE_DICOM_TAG_0012__
708 dicom_tag_element dicom_tag_elements[] = {
709 #include "dicom_tag/dicom_tag0012.csv"
711 insert_tag( dicom_tag_elements );
714 #ifdef __INCLUDE_DICOM_TAG_0018__
716 dicom_tag_element dicom_tag_elements[] = {
717 #include "dicom_tag/dicom_tag0018.csv"
719 insert_tag( dicom_tag_elements );
722 #ifdef __INCLUDE_DICOM_TAG_0020__
724 dicom_tag_element dicom_tag_elements[] = {
725 #include "dicom_tag/dicom_tag0020.csv"
727 insert_tag( dicom_tag_elements );
730 #ifdef __INCLUDE_DICOM_TAG_0022__
732 dicom_tag_element dicom_tag_elements[] = {
733 #include "dicom_tag/dicom_tag0022.csv"
735 insert_tag( dicom_tag_elements );
738 #ifdef __INCLUDE_DICOM_TAG_0028__
740 dicom_tag_element dicom_tag_elements[] = {
741 #include "dicom_tag/dicom_tag0028.csv"
743 insert_tag( dicom_tag_elements );
746 #ifdef __INCLUDE_DICOM_TAG_0032__
748 dicom_tag_element dicom_tag_elements[] = {
749 #include "dicom_tag/dicom_tag0032.csv"
751 insert_tag( dicom_tag_elements );
754 #ifdef __INCLUDE_DICOM_TAG_0038__
756 dicom_tag_element dicom_tag_elements[] = {
757 #include "dicom_tag/dicom_tag0038.csv"
759 insert_tag( dicom_tag_elements );
762 #ifdef __INCLUDE_DICOM_TAG_003A__
764 dicom_tag_element dicom_tag_elements[] = {
765 #include "dicom_tag/dicom_tag003A.csv"
767 insert_tag( dicom_tag_elements );
770 #ifdef __INCLUDE_DICOM_TAG_0040__
772 dicom_tag_element dicom_tag_elements[] = {
773 #include "dicom_tag/dicom_tag0040.csv"
775 insert_tag( dicom_tag_elements );
778 #ifdef __INCLUDE_DICOM_TAG_0042__
780 dicom_tag_element dicom_tag_elements[] = {
781 #include "dicom_tag/dicom_tag0042.csv"
783 insert_tag( dicom_tag_elements );
786 #ifdef __INCLUDE_DICOM_TAG_0044__
788 dicom_tag_element dicom_tag_elements[] = {
789 #include "dicom_tag/dicom_tag0044.csv"
791 insert_tag( dicom_tag_elements );
794 #ifdef __INCLUDE_DICOM_TAG_0046__
796 dicom_tag_element dicom_tag_elements[] = {
797 #include "dicom_tag/dicom_tag0046.csv"
799 insert_tag( dicom_tag_elements );
802 #ifdef __INCLUDE_DICOM_TAG_0050__
804 dicom_tag_element dicom_tag_elements[] = {
805 #include "dicom_tag/dicom_tag0050.csv"
807 insert_tag( dicom_tag_elements );
810 #ifdef __INCLUDE_DICOM_TAG_0054__
812 dicom_tag_element dicom_tag_elements[] = {
813 #include "dicom_tag/dicom_tag0054.csv"
815 insert_tag( dicom_tag_elements );
818 #ifdef __INCLUDE_DICOM_TAG_0060__
820 dicom_tag_element dicom_tag_elements[] = {
821 #include "dicom_tag/dicom_tag0060.csv"
823 insert_tag( dicom_tag_elements );
826 #ifdef __INCLUDE_DICOM_TAG_0062__
828 dicom_tag_element dicom_tag_elements[] = {
829 #include "dicom_tag/dicom_tag0062.csv"
831 insert_tag( dicom_tag_elements );
834 #ifdef __INCLUDE_DICOM_TAG_0064__
836 dicom_tag_element dicom_tag_elements[] = {
837 #include "dicom_tag/dicom_tag0064.csv"
839 insert_tag( dicom_tag_elements );
842 #ifdef __INCLUDE_DICOM_TAG_0066__
844 dicom_tag_element dicom_tag_elements[] = {
845 #include "dicom_tag/dicom_tag0066.csv"
847 insert_tag( dicom_tag_elements );
850 #ifdef __INCLUDE_DICOM_TAG_0070__
852 dicom_tag_element dicom_tag_elements[] = {
853 #include "dicom_tag/dicom_tag0070.csv"
855 insert_tag( dicom_tag_elements );
858 #ifdef __INCLUDE_DICOM_TAG_0072__
860 dicom_tag_element dicom_tag_elements[] = {
861 #include "dicom_tag/dicom_tag0072.csv"
863 insert_tag( dicom_tag_elements );
866 #ifdef __INCLUDE_DICOM_TAG_0074__
868 dicom_tag_element dicom_tag_elements[] = {
869 #include "dicom_tag/dicom_tag0074.csv"
871 insert_tag( dicom_tag_elements );
874 #ifdef __INCLUDE_DICOM_TAG_0088__
876 dicom_tag_element dicom_tag_elements[] = {
877 #include "dicom_tag/dicom_tag0088.csv"
879 insert_tag( dicom_tag_elements );
882 #ifdef __INCLUDE_DICOM_TAG_0100__
884 dicom_tag_element dicom_tag_elements[] = {
885 #include "dicom_tag/dicom_tag0100.csv"
887 insert_tag( dicom_tag_elements );
890 #ifdef __INCLUDE_DICOM_TAG_0400__
892 dicom_tag_element dicom_tag_elements[] = {
893 #include "dicom_tag/dicom_tag0400.csv"
895 insert_tag( dicom_tag_elements );
898 #ifdef __INCLUDE_DICOM_TAG_2000__
900 dicom_tag_element dicom_tag_elements[] = {
901 #include "dicom_tag/dicom_tag2000.csv"
903 insert_tag( dicom_tag_elements );
906 #ifdef __INCLUDE_DICOM_TAG_2010__
908 dicom_tag_element dicom_tag_elements[] = {
909 #include "dicom_tag/dicom_tag2010.csv"
911 insert_tag( dicom_tag_elements );
914 #ifdef __INCLUDE_DICOM_TAG_2020__
916 dicom_tag_element dicom_tag_elements[] = {
917 #include "dicom_tag/dicom_tag2020.csv"
919 insert_tag( dicom_tag_elements );
922 #ifdef __INCLUDE_DICOM_TAG_2030__
924 dicom_tag_element dicom_tag_elements[] = {
925 #include "dicom_tag/dicom_tag2030.csv"
927 insert_tag( dicom_tag_elements );
930 #ifdef __INCLUDE_DICOM_TAG_2040__
932 dicom_tag_element dicom_tag_elements[] = {
933 #include "dicom_tag/dicom_tag2040.csv"
935 insert_tag( dicom_tag_elements );
938 #ifdef __INCLUDE_DICOM_TAG_2050__
940 dicom_tag_element dicom_tag_elements[] = {
941 #include "dicom_tag/dicom_tag2050.csv"
943 insert_tag( dicom_tag_elements );
946 #ifdef __INCLUDE_DICOM_TAG_2100__
948 dicom_tag_element dicom_tag_elements[] = {
949 #include "dicom_tag/dicom_tag2100.csv"
951 insert_tag( dicom_tag_elements );
954 #ifdef __INCLUDE_DICOM_TAG_2110__
956 dicom_tag_element dicom_tag_elements[] = {
957 #include "dicom_tag/dicom_tag2110.csv"
959 insert_tag( dicom_tag_elements );
962 #ifdef __INCLUDE_DICOM_TAG_2120__
964 dicom_tag_element dicom_tag_elements[] = {
965 #include "dicom_tag/dicom_tag2120.csv"
967 insert_tag( dicom_tag_elements );
970 #ifdef __INCLUDE_DICOM_TAG_2130__
972 dicom_tag_element dicom_tag_elements[] = {
973 #include "dicom_tag/dicom_tag2130.csv"
975 insert_tag( dicom_tag_elements );
978 #ifdef __INCLUDE_DICOM_TAG_2200__
980 dicom_tag_element dicom_tag_elements[] = {
981 #include "dicom_tag/dicom_tag2200.csv"
983 insert_tag( dicom_tag_elements );
986 #ifdef __INCLUDE_DICOM_TAG_3002__
988 dicom_tag_element dicom_tag_elements[] = {
989 #include "dicom_tag/dicom_tag3002.csv"
991 insert_tag( dicom_tag_elements );
994 #ifdef __INCLUDE_DICOM_TAG_3004__
996 dicom_tag_element dicom_tag_elements[] = {
997 #include "dicom_tag/dicom_tag3004.csv"
999 insert_tag( dicom_tag_elements );
1002 #ifdef __INCLUDE_DICOM_TAG_3006__
1004 dicom_tag_element dicom_tag_elements[] = {
1005 #include "dicom_tag/dicom_tag3006.csv"
1007 insert_tag( dicom_tag_elements );
1010 #ifdef __INCLUDE_DICOM_TAG_3008__
1012 dicom_tag_element dicom_tag_elements[] = {
1013 #include "dicom_tag/dicom_tag3008.csv"
1015 insert_tag( dicom_tag_elements );
1018 #ifdef __INCLUDE_DICOM_TAG_300A__
1020 dicom_tag_element dicom_tag_elements[] = {
1021 #include "dicom_tag/dicom_tag300A.csv"
1023 insert_tag( dicom_tag_elements );
1026 #ifdef __INCLUDE_DICOM_TAG_300C__
1028 dicom_tag_element dicom_tag_elements[] = {
1029 #include "dicom_tag/dicom_tag300C.csv"
1031 insert_tag( dicom_tag_elements );
1034 #ifdef __INCLUDE_DICOM_TAG_300E__
1036 dicom_tag_element dicom_tag_elements[] = {
1037 #include "dicom_tag/dicom_tag300E.csv"
1039 insert_tag( dicom_tag_elements );
1042 #ifdef __INCLUDE_DICOM_TAG_4000__
1044 dicom_tag_element dicom_tag_elements[] = {
1045 #include "dicom_tag/dicom_tag4000.csv"
1047 insert_tag( dicom_tag_elements );
1050 #ifdef __INCLUDE_DICOM_TAG_4008__
1052 dicom_tag_element dicom_tag_elements[] = {
1053 #include "dicom_tag/dicom_tag4008.csv"
1055 insert_tag( dicom_tag_elements );
1058 #ifdef __INCLUDE_DICOM_TAG_4FFE__
1060 dicom_tag_element dicom_tag_elements[] = {
1061 #include "dicom_tag/dicom_tag4FFE.csv"
1063 insert_tag( dicom_tag_elements );
1066 #ifdef __INCLUDE_DICOM_TAG_5000__
1068 dicom_tag_element dicom_tag_elements[] = {
1069 #include "dicom_tag/dicom_tag5000.csv"
1071 insert_tag( dicom_tag_elements );
1074 #ifdef __INCLUDE_DICOM_TAG_5200__
1076 dicom_tag_element dicom_tag_elements[] = {
1077 #include "dicom_tag/dicom_tag5200.csv"
1079 insert_tag( dicom_tag_elements );
1082 #ifdef __INCLUDE_DICOM_TAG_5400__
1084 dicom_tag_element dicom_tag_elements[] = {
1085 #include "dicom_tag/dicom_tag5400.csv"
1087 insert_tag( dicom_tag_elements );
1090 #ifdef __INCLUDE_DICOM_TAG_5600__
1092 dicom_tag_element dicom_tag_elements[] = {
1093 #include "dicom_tag/dicom_tag5600.csv"
1095 insert_tag( dicom_tag_elements );
1098 #ifdef __INCLUDE_DICOM_TAG_6000__
1100 dicom_tag_element dicom_tag_elements[] = {
1101 #include "dicom_tag/dicom_tag6000.csv"
1103 insert_tag( dicom_tag_elements );
1106 #ifdef __INCLUDE_DICOM_TAG_FFFF__
1108 dicom_tag_element dicom_tag_elements[] = {
1109 #include "dicom_tag/dicom_tagFFFF.csv"
1111 insert_tag( dicom_tag_elements );
1122 typedef std::set< dicom_uid > baseclass;
1129 } dicom_uid_element;
1133 void insert_uid(
const std::string &
id =
"",
const std::string &n =
"",
const std::string &t =
"" )
1135 baseclass::insert(
dicom_uid(
id, n, t ) );
1140 void insert_uid(
const dicom_uid_element *dicom_uids )
1142 const dicom_uid_element *uid = dicom_uids;
1143 while( !( uid->uid == NULL && uid->name == NULL && uid->type == NULL ) )
1145 insert_uid( uid->uid, uid->name, uid->type );
1152 bool contain_uid(
const std::string &uid )
const
1154 baseclass::const_iterator ite = baseclass::find(
dicom_uid( uid ) );
1155 return( ite != baseclass::end( ) );
1163 baseclass::iterator ite = baseclass::find(
id );
1164 if( ite == baseclass::end( ) )
1166 return(
dicom_uid( uid, uid,
"no uid exists." ) );
1175 dicom_uid_element dicom_uid_elements[] = {
1176 #include "dicom_tag/dicom_uid.csv"
1178 insert_uid( dicom_uid_elements );
1195 #endif // __INCLUDE_MIST_DICOM_TAG__