00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027
#ifndef SHSWIZZLE_HPP
00028
#define SHSWIZZLE_HPP
00029
00030
#include <iosfwd>
00031
00032
#include "ShDllExport.hpp"
00033
#include "ShException.hpp"
00034
00035
namespace SH {
00036
00056 class
00057
SH_DLLEXPORT ShSwizzle {
00058
public:
00059
00060 ShSwizzle();
00062 ShSwizzle(
int srcSize);
00064 ShSwizzle(
int srcSize,
int i0);
00066 ShSwizzle(
int srcSize,
int i0,
int i1);
00068 ShSwizzle(
int srcSize,
int i0,
int i1,
int i2);
00070 ShSwizzle(
int srcSize,
int i0,
int i1,
int i2,
int i3);
00072 ShSwizzle(
int srcSize,
int size,
int* indices);
00073
00074 ShSwizzle(
const ShSwizzle& other);
00075 ~ShSwizzle();
00076
00077 ShSwizzle& operator=(
const ShSwizzle& other);
00078
00081 ShSwizzle& operator*=(
const ShSwizzle& other);
00082
00084 ShSwizzle
operator*(
const ShSwizzle& other)
const;
00085
00087 int size()
const {
return m_size; }
00089
int operator[](
int i)
const;
00090
00092
bool identity() const;
00093
00095
bool operator==(const ShSwizzle& other) const;
00096
00097 private:
00098
int m_srcSize;
00099
00100
int* m_indices;
00101
int m_size;
00102
00103 friend SH_DLLEXPORT std::ostream& operator<<(std::ostream& out, const ShSwizzle& swizzle);
00104 };
00105
00108 class
00109 SH_DLLEXPORT
ShSwizzleException : public
ShException
00110 {
00111
public:
00112
ShSwizzleException(
const ShSwizzle& s,
int idx,
int size);
00113 };
00114
00115 }
00116
00117
#endif