[shill] the beginnings of the data model

Flesh out Manager a little, to add vectors of Device* and Service* and ways to look through them.

BUG=chromium-os:15347
TEST=unit tests

Change-Id: Iae5280f56bf58cf1580f0b87c465f4905459f07a
Reviewed-on: http://gerrit.chromium.org/gerrit/966
Reviewed-by: Chris Masone <cmasone@chromium.org>
Tested-by: Chris Masone <cmasone@chromium.org>
diff --git a/device.h b/device.h
index b2049a9..81eb781 100644
--- a/device.h
+++ b/device.h
@@ -5,30 +5,48 @@
 #ifndef SHILL_DEVICE_
 #define SHILL_DEVICE_
 
+#include <vector>
+
 #include <base/memory/ref_counted.h>
 
+#include "shill/service.h"
 #include "shill/shill_event.h"
 
 namespace shill {
 
+class ControlInterface;
+class DeviceAdaptorInterface;
+class EventDispatcher;
+
 // Device superclass.  Individual network interfaces types will inherit from
 // this class.
 class Device : public base::RefCounted<Device> {
  public:
-  // A constructor for the Device object
-  explicit Device(ControlInterface *control_interface,
-		  EventDispatcher *dispatcher);
+  enum Technology {
+    kEthernet,
+    kWifi,
+    kCellular,
+    kNumTechnologies
+  };
 
-  void Start();
-  void Stop();
+  // A constructor for the Device object
+  Device(ControlInterface *control_interface,
+         EventDispatcher *dispatcher);
+  virtual ~Device();
+
+  virtual void Start();
+  virtual void Stop();
+
+  virtual bool TechnologyIs(Technology type) = 0;
 
  protected:
-  virtual ~Device();
+  std::vector<scoped_refptr<Service> > services_;
 
  private:
   DeviceAdaptorInterface *adaptor_;
   bool running_;
   friend class DeviceAdaptorInterface;
+  DISALLOW_COPY_AND_ASSIGN(Device);
 };
 
 }  // namespace shill