1 /**
2  * Copyright (c) 2006-2016 LOVE Development Team
3  *
4  * This software is provided 'as-is', without any express or implied
5  * warranty.  In no event will the authors be held liable for any damages
6  * arising from the use of this software.
7  *
8  * Permission is granted to anyone to use this software for any purpose,
9  * including commercial applications, and to alter it and redistribute it
10  * freely, subject to the following restrictions:
11  *
12  * 1. The origin of this software must not be misrepresented; you must not
13  *    claim that you wrote the original software. If you use this software
14  *    in a product, an acknowledgment in the product documentation would be
15  *    appreciated but is not required.
16  * 2. Altered source versions must be plainly marked as such, and must not be
17  *    misrepresented as being the original software.
18  * 3. This notice may not be removed or altered from any source distribution.
19  **/
20 
21 #include "CompressedImageData.h"
22 
23 namespace love
24 {
25 namespace image
26 {
27 namespace magpie
28 {
29 
CompressedImageData(std::list<CompressedFormatHandler * > formats,love::filesystem::FileData * filedata)30 CompressedImageData::CompressedImageData(std::list<CompressedFormatHandler *> formats, love::filesystem::FileData *filedata)
31 {
32 	CompressedFormatHandler *parser = nullptr;
33 
34 	for (CompressedFormatHandler *handler : formats)
35 	{
36 		if (handler->canParse(filedata))
37 		{
38 			parser = handler;
39 			break;
40 		}
41 	}
42 
43 	if (parser == nullptr)
44 		throw love::Exception("Could not parse compressed data: Unknown format.");
45 
46 	data = parser->parse(filedata, dataImages, dataSize, format, sRGB);
47 
48 	if (data == nullptr)
49 		throw love::Exception("Could not parse compressed data.");
50 
51 	if (format == FORMAT_UNKNOWN)
52 	{
53 		delete[] data;
54 		throw love::Exception("Could not parse compressed data: Unknown format.");
55 	}
56 
57 	if (dataImages.size() == 0 || dataSize == 0)
58 	{
59 		delete[] data;
60 		throw love::Exception("Could not parse compressed data: No valid data?");
61 	}
62 }
63 
~CompressedImageData()64 CompressedImageData::~CompressedImageData()
65 {
66 	delete[] data;
67 }
68 
69 } // magpie
70 } // image
71 } // love
72