// Construction
 public CHeaderFile( EHeaderFileID id, CHeaderFileRecord old_header_file_record )
 {
     ID = id;
     ProjectID = EProjectID.Invalid;
     OldHeaderFileRecord = old_header_file_record;
     NewHeaderFileRecord = null;
     CreationState = EHeaderFileCreationState.Deleted;
     State = EHeaderFileState.Invalid;
 }
        private void Parse_Project_File( FileInfo project_file )
        {
            XElement project_root = XElement.Load( project_file.FullName );
            string project_path = CEnumReflector.TopLevelDirectory + project_file.Directory.Name;

            foreach ( var elt in project_root.Elements().Where( e => e.Name.LocalName == "ItemGroup" ).
                                                         Elements().Where( e => e.Name.LocalName == "ClInclude" ).
                                                         Attributes().Where( a => a.Name.LocalName == "Include" ) )
            {
                string header_file_name = project_path + Path.DirectorySeparatorChar + elt.Value;

                string []split_directory = header_file_name.Split( Path.DirectorySeparatorChar );
                bool is_generated = false;
                for ( int i = 0; i + 1 < split_directory.Length; i++ )
                {
                    if ( split_directory[ i ] == "GeneratedCode" )
                    {
                        is_generated = true;
                        break;
                    }
                }

                if ( is_generated )
                {
                    continue;
                }

                FileInfo header_file_info = new FileInfo( header_file_name );
                CHeaderFileRecord new_header_record = new CHeaderFileRecord( header_file_name, NewProjectRecord.Name, header_file_info.LastWriteTime );

                CEnumReflector.HeaderFileTracker.Register_Header_File( ID, new_header_record );
            }
        }
 public CHeaderFile( EHeaderFileID id, EProjectID project_id, CHeaderFileRecord new_record )
 {
     ID = id;
     ProjectID = project_id;
     OldHeaderFileRecord = null;
     NewHeaderFileRecord = new_record;
     CreationState = EHeaderFileCreationState.New;
     State = EHeaderFileState.Dirty;
 }
        public void Register_Header_File( EProjectID project_id, CHeaderFileRecord header_record )
        {
            EHeaderFileID header_id = EHeaderFileID.Invalid;
            if ( m_HeaderFileIDMap.TryGetValue( header_record.FileNameWithPath, out header_id ) )
            {
                CHeaderFile header_file = null;
                if ( !m_HeaderFiles.TryGetValue( header_id, out header_file ) )
                {
                    throw new Exception( "Internal header file mapping error" );
                }

                header_file.Initialize_Existing( project_id, header_record );
            }
            else
            {
                header_id = Allocate_Header_File_ID();
                CHeaderFile header_file = new CHeaderFile( header_id, project_id, header_record );
                m_HeaderFileIDMap.Add( header_file.FileNameWithPath, header_id );
                m_HeaderFiles.Add( header_id, header_file );
            }
        }
 // Methods
 // Public interface
 public void Initialize_Existing( EProjectID project_id, CHeaderFileRecord new_record )
 {
     NewHeaderFileRecord = new_record;
     CreationState = EHeaderFileCreationState.Unchanged;
     State = ( NewHeaderFileRecord.LastModifiedTime > OldHeaderFileRecord.LastModifiedTime ) ? EHeaderFileState.Dirty : EHeaderFileState.Unchanged;
     ProjectID = project_id;
 }