00001
00002
00003
00004
00005 #ifndef VIL_NITF2_TAGGED_RECORD_DEFINITION_H
00006 #define VIL_NITF2_TAGGED_RECORD_DEFINITION_H
00007
00008 #include <vcl_map.h>
00009 #include <vcl_string.h>
00010
00011 #include "vil_nitf2_field_functor.h"
00012
00013 class vil_nitf2_field_formatter;
00014 class vil_nitf2_field_definition;
00015 class vil_nitf2_field_definitions;
00016 template<typename T> class vil_nitf2_field_functor;
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 class vil_nitf2_tagged_record_definition
00031 {
00032 friend class vil_nitf2_tagged_record;
00033 public:
00034
00035
00036 static vil_nitf2_tagged_record_definition& define(
00037 vcl_string name, vcl_string pretty_name);
00038
00039
00040 vil_nitf2_tagged_record_definition& field(
00041 vcl_string field_name,
00042 vcl_string pretty_name,
00043 vil_nitf2_field_formatter* formatter,
00044
00045 bool blanks_ok = false,
00046
00047 vil_nitf2_field_functor<int>* width_functor = 0,
00048
00049
00050 vil_nitf2_field_functor<bool>* condition_functor = 0,
00051 vcl_string units = "",
00052 vcl_string description = "");
00053
00054
00055 vil_nitf2_tagged_record_definition& repeat(
00056 vil_nitf2_field_functor<int>* repeat_functor,
00057 vil_nitf2_field_definitions& field_definitions);
00058
00059
00060 vil_nitf2_tagged_record_definition& repeat(
00061 vcl_string int_tag,
00062 vil_nitf2_field_definitions& field_definitions);
00063
00064
00065 vil_nitf2_tagged_record_definition& repeat(
00066 int repeat_count,
00067 vil_nitf2_field_definitions& field_definitions);
00068
00069
00070
00071 void end();
00072
00073
00074 static vil_nitf2_tagged_record_definition* find(vcl_string name);
00075
00076
00077 vil_nitf2_field_definition* find_field(vcl_string name);
00078
00079
00080 ~vil_nitf2_tagged_record_definition();
00081
00082
00083 typedef vcl_map<vcl_string, vil_nitf2_tagged_record_definition*>
00084 tagged_record_definition_map;
00085 static tagged_record_definition_map& all_definitions();
00086
00087
00088 const vil_nitf2_field_definitions& field_definitions() const {
00089 return *m_field_definitions; }
00090
00091
00092 static bool undefine(vcl_string name);
00093
00094
00095 static void register_test_tre();
00096
00097 private:
00098
00099 vil_nitf2_tagged_record_definition(const vil_nitf2_tagged_record_definition&);
00100
00101
00102 vil_nitf2_tagged_record_definition& operator=(const vil_nitf2_tagged_record_definition&);
00103
00104
00105 vil_nitf2_tagged_record_definition(vcl_string name, vcl_string pretty_name,
00106 vil_nitf2_field_definitions* defs = 0);
00107
00108
00109
00110
00111 vcl_string m_name;
00112 vcl_string m_pretty_name;
00113 vil_nitf2_field_definitions* m_field_definitions;
00114 bool m_definition_completed;
00115 };
00116
00117 #endif // VIL_NITF2_TAGGED_RECORD_DEFINITION_H