src/core/object-vector.cc
changeset 2965 4b28e9740e3b
parent 2950 9e20fb862cd8
child 3190 51fe9001a679
equal deleted inserted replaced
2964:4e8cb1577144 2965:4b28e9740e3b
     1 #include "object-vector.h"
     1 #include "object-vector.h"
     2 
     2 
     3 namespace ns3 {
     3 namespace ns3 {
     4 
     4 
     5 ObjectVector::ObjectVector ()
     5 ObjectVectorValue::ObjectVectorValue ()
     6 {}
     6 {}
     7 
     7 
     8 ObjectVector::Iterator 
     8 ObjectVectorValue::Iterator 
     9 ObjectVector::Begin (void) const
     9 ObjectVectorValue::Begin (void) const
    10 {
    10 {
    11   return m_objects.begin ();
    11   return m_objects.begin ();
    12 }
    12 }
    13 ObjectVector::Iterator 
    13 ObjectVectorValue::Iterator 
    14 ObjectVector::End (void) const
    14 ObjectVectorValue::End (void) const
    15 {
    15 {
    16   return m_objects.end ();
    16   return m_objects.end ();
    17 }
    17 }
    18 uint32_t 
    18 uint32_t 
    19 ObjectVector::GetN (void) const
    19 ObjectVectorValue::GetN (void) const
    20 {
    20 {
    21   return m_objects.size ();
    21   return m_objects.size ();
    22 }
    22 }
    23 Ptr<Object> 
    23 Ptr<Object> 
    24 ObjectVector::Get (uint32_t i) const
    24 ObjectVectorValue::Get (uint32_t i) const
    25 {
    25 {
    26   return m_objects[i];
    26   return m_objects[i];
    27 }
    27 }
    28 
    28 
    29 ObjectVector::ObjectVector (Attribute value)
    29 Ptr<AttributeValue>
    30 {
       
    31   const ObjectVectorValue *v = value.DynCast<const ObjectVectorValue *> ();
       
    32   if (v == 0)
       
    33     {
       
    34       NS_FATAL_ERROR ("Expected value of type ObjectVectorValue.");
       
    35     }
       
    36   *this = v->Get ();
       
    37 }
       
    38 
       
    39 ObjectVector::operator Attribute () const
       
    40 {
       
    41   return Attribute (ns3::Create<ObjectVectorValue> ());
       
    42 }
       
    43 
       
    44 ObjectVectorValue::ObjectVectorValue ()
       
    45   : m_vector ()
       
    46 {}
       
    47 
       
    48 ObjectVectorValue::ObjectVectorValue (const ObjectVector &vector)
       
    49   : m_vector (vector)
       
    50 {}
       
    51 
       
    52 ObjectVector 
       
    53 ObjectVectorValue::Get (void) const
       
    54 {
       
    55   return m_vector;
       
    56 }
       
    57 
       
    58 Attribute 
       
    59 ObjectVectorValue::Copy (void) const
    30 ObjectVectorValue::Copy (void) const
    60 {
    31 {
    61   return Attribute (ns3::Create<ObjectVectorValue> (*this));
    32   return ns3::Create<ObjectVectorValue> (*this);
    62 }
    33 }
    63 std::string 
    34 std::string 
    64 ObjectVectorValue::SerializeToString (Ptr<const AttributeChecker> checker) const
    35 ObjectVectorValue::SerializeToString (Ptr<const AttributeChecker> checker) const
    65 {
    36 {
    66   // XXX
    37   // XXX
    67   return "";
    38   return "";
    68 }
    39 }
    69 bool 
    40 bool 
    70 ObjectVectorValue::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker)
    41 ObjectVectorValue::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker)
    71 {
    42 {
    72   // XXX ?? Can we implement this correctly ?? I doubt it very much.
    43   NS_FATAL_ERROR ("cannot deserialize a vector of object pointers.");
    73   return true;
    44   return true;
    74 }
    45 }
    75 
    46 
    76 bool 
    47 bool 
    77 ObjectVectorAccessor::Set (ObjectBase * object, Attribute value) const
    48 ObjectVectorAccessor::Set (ObjectBase * object, const AttributeValue & value) const
    78 {
    49 {
    79   // not allowed.
    50   // not allowed.
    80   return false;
    51   return false;
    81 }
    52 }
    82 bool 
    53 bool 
    83 ObjectVectorAccessor::Get (const ObjectBase * object, Attribute value) const
    54 ObjectVectorAccessor::Get (const ObjectBase * object, AttributeValue &value) const
    84 {
    55 {
    85   ObjectVectorValue *v = value.DynCast<ObjectVectorValue *> ();
    56   ObjectVectorValue *v = dynamic_cast<ObjectVectorValue *> (&value);
    86   if (v == 0)
    57   if (v == 0)
    87     {
    58     {
    88       return false;
    59       return false;
    89     }
    60     }
    90   v->m_vector.m_objects.clear ();
    61   v->m_objects.clear ();
    91   uint32_t n;
    62   uint32_t n;
    92   bool ok = DoGetN (object, &n);
    63   bool ok = DoGetN (object, &n);
    93   if (!ok)
    64   if (!ok)
    94     {
    65     {
    95       return false;
    66       return false;
    96     }
    67     }
    97   for (uint32_t i = 0; i < n; i++)
    68   for (uint32_t i = 0; i < n; i++)
    98     {
    69     {
    99       Ptr<Object> o = DoGet (object, i);
    70       Ptr<Object> o = DoGet (object, i);
   100       v->m_vector.m_objects.push_back (o);
    71       v->m_objects.push_back (o);
   101     }
    72     }
   102   return true;
    73   return true;
   103 }
    74 }
   104 bool 
    75 bool 
   105 ObjectVectorAccessor::HasGetter (void) const
    76 ObjectVectorAccessor::HasGetter (void) const