summaryrefslogtreecommitdiffstats
path: root/Source/cmSourceGroup.cxx
blob: fc09631baf5efb2851c806370dd2ae68175ce881 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile$
  Language:  C++
  Date:      $Date$
  Version:   $Revision$


  Copyright (c) 2000 National Library of Medicine
  All rights reserved.

  See COPYRIGHT.txt for copyright details.

=========================================================================*/
#include "cmSourceGroup.h"


/**
 * The constructor initializes the group's regular expression.
 */
cmSourceGroup::cmSourceGroup(const char* name, const char* regex):
  m_Name(name),
  m_GroupRegex(regex)
{
}


/**
 * Copy constructor.
 */
cmSourceGroup::cmSourceGroup(const cmSourceGroup& r):
  m_Name(r.m_Name),
  m_GroupRegex(r.m_GroupRegex),
  m_Sources(r.m_Sources),
  m_CustomCommands(r.m_CustomCommands)
{
}


/**
 * Returns whether the given name matches the group's regular expression.
 */
bool cmSourceGroup::Matches(const char* name)
{
  return m_GroupRegex.find(name);
}


/**
 * Add a source and corresponding custom command to the group.  If the
 * source already exists, the command will be added to its set of commands.
 * If the command also already exists, the given dependencies and outputs
 * are added to it.
 */
void cmSourceGroup::AddCustomCommand(const char* source,
                                     const char* command,
                                     const std::vector<std::string>& depends,
                                     const std::vector<std::string>& outputs) 
{
  CustomCommands::iterator s = m_CustomCommands.find(source);
  if(s == m_CustomCommands.end())
    {
    // The source was not found.  Add it with this command.
    m_CustomCommands[source][command].m_Depends.insert(depends.begin(),
                                                       depends.end());
    m_CustomCommands[source][command].m_Outputs.insert(outputs.begin(),
                                                       outputs.end());
    return;
    }
  
  // The source already exists.  See if the command exists.
  Commands& commands = s->second;
  Commands::iterator c = commands.find(command);
  if(c == commands.end())
    {
    // The command did not exist.  Add it.
    commands[command].m_Depends.insert(depends.begin(), depends.end());
    commands[command].m_Outputs.insert(outputs.begin(), outputs.end());
    return;
    }
  
  // The command already exists for this source.  Merge the sets.
  CommandFiles& commandFiles = c->second;
  commandFiles.m_Depends.insert(depends.begin(), depends.end());
  commandFiles.m_Outputs.insert(outputs.begin(), outputs.end());
}