Doxygen
Loading...
Searching...
No Matches
requirement.h File Reference
#include <memory>
#include <vector>
#include "construct.h"
#include "qcstring.h"
Include dependency graph for requirement.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  RequirementRef
 Class to hold requirement reference information. More...
class  RequirementIntf
class  RequirementManager

Typedefs

using RequirementRefs = std::vector<RequirementRef>
 List of requirement references.
using RequirementIntfList = std::vector<const RequirementIntf *>

Enumerations

enum class  RequirementRefType { Satisfies , Verifies }
 Types are references to a requirement. More...

Functions

void splitRequirementRefs (const RequirementRefs &input, RequirementRefs &satisfiesRefs, RequirementRefs &verifiesRefs)

Typedef Documentation

◆ RequirementIntfList

using RequirementIntfList = std::vector<const RequirementIntf *>

Definition at line 77 of file requirement.h.

◆ RequirementRefs

using RequirementRefs = std::vector<RequirementRef>

List of requirement references.

Definition at line 56 of file requirement.h.

Enumeration Type Documentation

◆ RequirementRefType

enum class RequirementRefType
strong

Types are references to a requirement.

Enumerator
Satisfies 
Verifies 

Definition at line 33 of file requirement.h.

Function Documentation

◆ splitRequirementRefs()

void splitRequirementRefs ( const RequirementRefs & input,
RequirementRefs & satisfiesRefs,
RequirementRefs & verifiesRefs )

Definition at line 403 of file requirement.cpp.

404{
405 auto makeUnique = [](RequirementRefs &uniqueRefs)
406 {
407 // sort results on itemId
408 std::stable_sort(uniqueRefs.begin(),uniqueRefs.end(),
409 [](const auto &left,const auto &right)
410 { return left.reqId()< right.reqId() ||
411 (left.reqId()==right.reqId() &&
412 qstricmp(left.title(),right.title())<0);
413 });
414
415 // filter out duplicates
416 auto last = std::unique(uniqueRefs.begin(),uniqueRefs.end(),
417 [](const auto &left,const auto &right)
418 { return left.reqId()==right.reqId() &&
419 qstricmp(left.title(),right.title())==0;
420 });
421
422 // remove unused part
423 uniqueRefs.erase(last, uniqueRefs.end());
424 };
425
426 // split into satisfied and verifies references
427 std::partition_copy(
428 inputReqRefs.begin(),
429 inputReqRefs.end(),
430 std::back_inserter(satisfiesRefs),
431 std::back_inserter(verifiesRefs),
432 [](const auto &ref) { return ref.type()==RequirementRefType::Satisfies; }
433 );
434
435 // remove duplicates
436 makeUnique(satisfiesRefs);
437 makeUnique(verifiesRefs);
438}
std::vector< RequirementRef > RequirementRefs
List of requirement references.
Definition requirement.h:56

Referenced by DefinitionImpl::writeRequirementRefs(), and writeRequirementRefs().