reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
247 CopyOnWriteVector(CopyOnWriteVector &&V) : Data(V.Data) { V.Data = nullptr; } 247 CopyOnWriteVector(CopyOnWriteVector &&V) : Data(V.Data) { V.Data = nullptr; } 251 Data = V.Data; 251 Data = V.Data; 252 V.Data = nullptr; 263 bool valid() const { return Data; } 266 bool writable() const { return Data && Data->NumRefs == 1; } 266 bool writable() const { return Data && Data->NumRefs == 1; } 270 if (!Data) { 271 Data = new VectorData(); 277 if (!Data) 279 if (Data->NumRefs <= 1) 280 delete Data; 282 --Data->NumRefs; 283 Data = nullptr; 288 if (!Data) { 289 Data = new VectorData(); 292 if (Data->NumRefs == 1) 294 --Data->NumRefs; 295 Data = new VectorData(*Data); 295 Data = new VectorData(*Data); 299 CopyOnWriteVector clone() { return CopyOnWriteVector(Data); } 303 const std::vector<T> &elements() const { return Data->Vect; } 310 unsigned size() const { return Data ? elements().size() : 0; } 313 bool sameAs(const CopyOnWriteVector &V) const { return Data == V.Data; } 313 bool sameAs(const CopyOnWriteVector &V) const { return Data == V.Data; } 318 Data->Vect.clear(); 324 Data->Vect.push_back(Elem); 331 return Data->Vect[i]; 337 Data->Vect.erase(Data->Vect.begin() + i, Data->Vect.end()); 337 Data->Vect.erase(Data->Vect.begin() + i, Data->Vect.end()); 337 Data->Vect.erase(Data->Vect.begin() + i, Data->Vect.end()); 342 if (!Data) 344 ++Data->NumRefs;