1 //======================================================================== 2 // 3 // SplashFontFile.cc 4 // 5 // Copyright 2003-2013 Glyph & Cog, LLC 6 // 7 //======================================================================== 8 9 #include <aconf.h> 10 11 #ifdef USE_GCC_PRAGMAS 12 #pragma implementation 13 #endif 14 15 #include <stdio.h> 16 #ifndef _WIN32 17 # include <unistd.h> 18 #endif 19 #include "gmempp.h" 20 #include "GString.h" 21 #include "SplashFontFile.h" 22 #include "SplashFontFileID.h" 23 24 #ifdef VMS 25 #if (__VMS_VER < 70000000) 26 extern "C" int unlink(char *filename); 27 #endif 28 #endif 29 30 //------------------------------------------------------------------------ 31 // SplashFontFile 32 //------------------------------------------------------------------------ 33 SplashFontFile(SplashFontFileID * idA,SplashFontType fontTypeA,GString * fontBufA)34SplashFontFile::SplashFontFile(SplashFontFileID *idA, 35 SplashFontType fontTypeA, 36 #if LOAD_FONTS_FROM_MEM 37 GString *fontBufA 38 #else 39 char *fileNameA, GBool deleteFileA 40 #endif 41 ) { 42 id = idA; 43 fontType = fontTypeA; 44 #if LOAD_FONTS_FROM_MEM 45 fontBuf = fontBufA; 46 #else 47 fileName = new GString(fileNameA); 48 deleteFile = deleteFileA; 49 #endif 50 refCnt = 0; 51 } 52 ~SplashFontFile()53SplashFontFile::~SplashFontFile() { 54 #if LOAD_FONTS_FROM_MEM 55 delete fontBuf; 56 #else 57 if (deleteFile) { 58 unlink(fileName->getCString()); 59 } 60 delete fileName; 61 #endif 62 delete id; 63 } 64 incRefCnt()65void SplashFontFile::incRefCnt() { 66 #if MULTITHREADED 67 gAtomicIncrement(&refCnt); 68 #else 69 ++refCnt; 70 #endif 71 } 72 decRefCnt()73void SplashFontFile::decRefCnt() { 74 GBool done; 75 76 #if MULTITHREADED 77 done = gAtomicDecrement(&refCnt) == 0; 78 #else 79 done = --refCnt == 0; 80 #endif 81 if (done) { 82 delete this; 83 } 84 } 85