File: unrefqueue.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (32 lines) | stat: -rw-r--r-- 882 bytes parent folder | download
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
#include "unrefqueue.hpp"

#include <components/sceneutil/workqueue.hpp>

namespace SceneUtil
{
    namespace
    {
        struct ClearVector final : SceneUtil::WorkItem
        {
            std::vector<osg::ref_ptr<osg::Referenced>> mObjects;

            explicit ClearVector(std::vector<osg::ref_ptr<osg::Referenced>>&& objects)
                : mObjects(std::move(objects))
            {
            }

            void doWork() override { mObjects.clear(); }
        };
    }

    void UnrefQueue::flush(SceneUtil::WorkQueue& workQueue)
    {
        if (mObjects.empty())
            return;

        // Move only objects to keep allocated storage in mObjects
        workQueue.addWorkItem(new ClearVector(std::vector<osg::ref_ptr<osg::Referenced>>(
            std::move_iterator(mObjects.begin()), std::move_iterator(mObjects.end()))));
        mObjects.clear();
    }
}