abstractdata.h 3.53 KB
Newer Older
1
2
// ================================================================================================
// 
schultezub's avatar
schultezub committed
3
// This file is part of the CAMPVis Software Framework.
4
// 
5
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
schultezub's avatar
schultezub committed
6
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
7
//      Chair for Computer Aided Medical Procedures
8
9
10
//      Technische Universitaet Muenchen
//      Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
// 
schultezub's avatar
schultezub committed
11
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
12
// 
13
14
15
16
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 
// except in compliance with the License. You may obtain a copy of the License at
// 
// http://www.apache.org/licenses/LICENSE-2.0
17
// 
18
19
20
21
// Unless required by applicable law or agreed to in writing, software distributed under the 
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
// either express or implied. See the License for the specific language governing permissions 
// and limitations under the License.
22
23
24
// 
// ================================================================================================

schultezub's avatar
schultezub committed
25
26
#ifndef ABSTRACTDATA_H__
#define ABSTRACTDATA_H__
schultezub's avatar
schultezub committed
27

28
29
#include <memory>
#include <tbb/atomic.h>
30
#include "tgt/bounds.h"
31
32

#include "core/coreapi.h"
33
#include "core/datastructures/scopedtypeddata.h" // not directly needed here but by many classes including AbstractData 
34

schultezub's avatar
schultezub committed
35
namespace campvis {
36
37
38
39

    /**
     * Interface class for data which can compute their bounds in world coordinates.
     */
40
    class CAMPVIS_CORE_API IHasWorldBounds {
41
42
43
44
45
46
47
48
49
50
51
52
53
    public:
        /// Default empty constructor
        IHasWorldBounds() {};
        /// Virtual Destructor
        virtual ~IHasWorldBounds() {};

        /**
         * Returns the data extent in world coordinates.
         * \return  The data extent in world coordinates.
         */
        virtual tgt::Bounds getWorldBounds() const = 0;
    };

54
// ================================================================================================
55

56
57
    class DataHandle;

schultezub's avatar
schultezub committed
58
59
60
    /**
     * Abstract base class for data handled by a DataHandle and stored in a DataContainer.
     */
61
    class CAMPVIS_CORE_API AbstractData {
62
63
    friend class DataHandle;

schultezub's avatar
schultezub committed
64
    public:
65
66
67
        /**
         * Constructor, simply calles ReferenceCounted ctor.
         */
schultezub's avatar
schultezub committed
68
69
        AbstractData();

70
71
72
        /**
         * Virtual destructor
         */
schultezub's avatar
schultezub committed
73
        virtual ~AbstractData();
schultezub's avatar
schultezub committed
74

75
76
77
78
79

        /**
         * Prototype - clone method, some people call this virtual constructor...
         * \return  A copy of this object.
         */
schultezub's avatar
schultezub committed
80
81
        virtual AbstractData* clone() const = 0;

82
83
84
85
86
87
88
89
90
91
92
93
        /**
         * Returns the local memory footprint of the data in bytes.
         * \return  Number of bytes occupied in local memory by the data.
         */
        virtual size_t getLocalMemoryFootprint() const = 0;

        /**
         * Returns the video memory footprint of the data in bytes.
         * \return  Number of bytes occupied in video memory by the data.
         */
        virtual size_t getVideoMemoryFootprint() const = 0;

94
95
96
97
98
    private:
        /// This weak_ptr points to the shared_ptr owning group of this object, if existant.
        /// Should be only accessed by DataHandle (therefore the friendship) in order to avoid
        /// multiple owning groups for the same object.
        std::weak_ptr<AbstractData> _weakPtr;
schultezub's avatar
schultezub committed
99
100
101
102
    };

}

103
#endif // ABSTRACTDATA_H__