Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: core/include/fxcodec/fx_codec.h

Issue 1411683005: XFA: Remove null CFX_DIBAttribute default argument (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Sort classes Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | core/src/fxcodec/codec/codec_int.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef CORE_INCLUDE_FXCODEC_FX_CODEC_H_ 7 #ifndef CORE_INCLUDE_FXCODEC_FX_CODEC_H_
8 #define CORE_INCLUDE_FXCODEC_FX_CODEC_H_ 8 #define CORE_INCLUDE_FXCODEC_FX_CODEC_H_
9 9
10 #include <map> 10 #include <map>
11 #include <vector> 11 #include <vector>
12 12
13 #include "../../../third_party/base/nonstd_unique_ptr.h" 13 #include "../../../third_party/base/nonstd_unique_ptr.h"
14 #include "../fxcrt/fx_basic.h" 14 #include "../fxcrt/fx_basic.h"
15 #include "../fxcrt/fx_coordinates.h"
16 #include "fx_codec_def.h" 15 #include "fx_codec_def.h"
17 #include "fx_codec_provider.h" 16 #include "fx_codec_provider.h"
18 17
18 #include "../fxcrt/fx_coordinates.h" // For FX_RECT.
19
19 class CFX_DIBSource; 20 class CFX_DIBSource;
20 class CJPX_Decoder; 21 class CJPX_Decoder;
21 class CPDF_PrivateData; 22 class CPDF_PrivateData;
22 class CPDF_StreamAcc; 23 class CPDF_StreamAcc;
23 class ICodec_ScanlineDecoder;
24 class ICodec_ProgressiveDecoder;
25 class ICodec_BasicModule; 24 class ICodec_BasicModule;
26 class ICodec_FaxModule; 25 class ICodec_FaxModule;
26 class ICodec_FlateModule;
27 class ICodec_IccModule;
28 class ICodec_Jbig2Encoder;
29 class ICodec_Jbig2Module;
27 class ICodec_JpegModule; 30 class ICodec_JpegModule;
28 class ICodec_JpxModule; 31 class ICodec_JpxModule;
29 class ICodec_Jbig2Module; 32 class ICodec_ScanlineDecoder;
30 class ICodec_IccModule; 33
31 class ICodec_FlateModule; 34 class ICodec_BmpModule;
32 class ICodec_Jbig2Encoder; 35 class ICodec_GifModule;
33 class ICodec_PngModule; 36 class ICodec_PngModule;
34 class ICodec_GifModule; 37 class ICodec_ProgressiveDecoder;
35 class ICodec_BmpModule;
36 class ICodec_TiffModule; 38 class ICodec_TiffModule;
37 class CFX_DIBAttribute; 39
38 class ICodec_ScanlineDecoder; 40 class CFX_DIBAttribute {
41 public:
42 CFX_DIBAttribute();
43 ~CFX_DIBAttribute();
44
45 int32_t m_nXDPI;
46 int32_t m_nYDPI;
47 FX_FLOAT m_fAspectRatio;
48 FX_WORD m_wDPIUnit;
49 CFX_ByteString m_strAuthor;
50 uint8_t m_strTime[20];
51 int32_t m_nGifLeft;
52 int32_t m_nGifTop;
53 FX_DWORD* m_pGifLocalPalette;
54 FX_DWORD m_nGifLocalPalNum;
55 int32_t m_nBmpCompressType;
56 std::map<FX_DWORD, void*> m_Exif;
57 };
39 58
40 class CCodec_ModuleMgr { 59 class CCodec_ModuleMgr {
41 public: 60 public:
42 CCodec_ModuleMgr(); 61 CCodec_ModuleMgr();
43 ICodec_ProgressiveDecoder* CreateProgressiveDecoder();
44 ICodec_Jbig2Encoder* CreateJbig2Encoder(); 62 ICodec_Jbig2Encoder* CreateJbig2Encoder();
45 ICodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); } 63 ICodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); }
46 ICodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); } 64 ICodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); }
47 ICodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); } 65 ICodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); }
48 ICodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); } 66 ICodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); }
49 ICodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); } 67 ICodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
50 ICodec_IccModule* GetIccModule() const { return m_pIccModule.get(); } 68 ICodec_IccModule* GetIccModule() const { return m_pIccModule.get(); }
51 ICodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); } 69 ICodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); }
70
71 ICodec_ProgressiveDecoder* CreateProgressiveDecoder();
52 ICodec_PngModule* GetPngModule() const { return m_pPngModule.get(); } 72 ICodec_PngModule* GetPngModule() const { return m_pPngModule.get(); }
53 ICodec_GifModule* GetGifModule() const { return m_pGifModule.get(); } 73 ICodec_GifModule* GetGifModule() const { return m_pGifModule.get(); }
54 ICodec_BmpModule* GetBmpModule() const { return m_pBmpModule.get(); } 74 ICodec_BmpModule* GetBmpModule() const { return m_pBmpModule.get(); }
55 ICodec_TiffModule* GetTiffModule() const { return m_pTiffModule.get(); } 75 ICodec_TiffModule* GetTiffModule() const { return m_pTiffModule.get(); }
56 76
57 protected: 77 protected:
58 nonstd::unique_ptr<ICodec_BasicModule> m_pBasicModule; 78 nonstd::unique_ptr<ICodec_BasicModule> m_pBasicModule;
59 nonstd::unique_ptr<ICodec_FaxModule> m_pFaxModule; 79 nonstd::unique_ptr<ICodec_FaxModule> m_pFaxModule;
60 nonstd::unique_ptr<ICodec_JpegModule> m_pJpegModule; 80 nonstd::unique_ptr<ICodec_JpegModule> m_pJpegModule;
61 nonstd::unique_ptr<ICodec_JpxModule> m_pJpxModule; 81 nonstd::unique_ptr<ICodec_JpxModule> m_pJpxModule;
62 nonstd::unique_ptr<ICodec_Jbig2Module> m_pJbig2Module; 82 nonstd::unique_ptr<ICodec_Jbig2Module> m_pJbig2Module;
63 nonstd::unique_ptr<ICodec_IccModule> m_pIccModule; 83 nonstd::unique_ptr<ICodec_IccModule> m_pIccModule;
64 nonstd::unique_ptr<ICodec_FlateModule> m_pFlateModule; 84 nonstd::unique_ptr<ICodec_FlateModule> m_pFlateModule;
85
65 nonstd::unique_ptr<ICodec_PngModule> m_pPngModule; 86 nonstd::unique_ptr<ICodec_PngModule> m_pPngModule;
66 nonstd::unique_ptr<ICodec_GifModule> m_pGifModule; 87 nonstd::unique_ptr<ICodec_GifModule> m_pGifModule;
67 nonstd::unique_ptr<ICodec_BmpModule> m_pBmpModule; 88 nonstd::unique_ptr<ICodec_BmpModule> m_pBmpModule;
68 nonstd::unique_ptr<ICodec_TiffModule> m_pTiffModule; 89 nonstd::unique_ptr<ICodec_TiffModule> m_pTiffModule;
69 }; 90 };
70 class ICodec_BasicModule { 91 class ICodec_BasicModule {
71 public: 92 public:
72 virtual ~ICodec_BasicModule() {} 93 virtual ~ICodec_BasicModule() {}
73 virtual FX_BOOL RunLengthEncode(const uint8_t* src_buf, 94 virtual FX_BOOL RunLengthEncode(const uint8_t* src_buf,
74 FX_DWORD src_size, 95 FX_DWORD src_size,
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 virtual void Finish(void* pContext) = 0; 226 virtual void Finish(void* pContext) = 0;
206 227
207 virtual void Input(void* pContext, 228 virtual void Input(void* pContext,
208 const uint8_t* src_buf, 229 const uint8_t* src_buf,
209 FX_DWORD src_size) = 0; 230 FX_DWORD src_size) = 0;
210 231
211 virtual int ReadHeader(void* pContext, 232 virtual int ReadHeader(void* pContext,
212 int* width, 233 int* width,
213 int* height, 234 int* height,
214 int* nComps, 235 int* nComps,
215 CFX_DIBAttribute* pAttribute = NULL) = 0; 236 CFX_DIBAttribute* pAttribute) = 0;
216 237
217 virtual int StartScanline(void* pContext, int down_scale) = 0; 238 virtual int StartScanline(void* pContext, int down_scale) = 0;
218 239
219 virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) = 0; 240 virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) = 0;
220 241
221 virtual FX_DWORD GetAvailInput(void* pContext, 242 virtual FX_DWORD GetAvailInput(void* pContext,
222 uint8_t** avail_buf_ptr = NULL) = 0; 243 uint8_t** avail_buf_ptr = NULL) = 0;
223 }; 244 };
224 245
225 class ICodec_JpxModule { 246 class ICodec_JpxModule {
(...skipping 20 matching lines...) Expand all
246 public: 267 public:
247 virtual ~ICodec_PngModule() {} 268 virtual ~ICodec_PngModule() {}
248 269
249 virtual void* Start(void* pModule) = 0; 270 virtual void* Start(void* pModule) = 0;
250 271
251 virtual void Finish(void* pContext) = 0; 272 virtual void Finish(void* pContext) = 0;
252 273
253 virtual FX_BOOL Input(void* pContext, 274 virtual FX_BOOL Input(void* pContext,
254 const uint8_t* src_buf, 275 const uint8_t* src_buf,
255 FX_DWORD src_size, 276 FX_DWORD src_size,
256 CFX_DIBAttribute* pAttribute = NULL) = 0; 277 CFX_DIBAttribute* pAttribute) = 0;
257 278
258 FX_BOOL» » » » (*ReadHeaderCallback)(void* pModule, int width, int height, int bpc, int pass, int* color_type, double* gamma); 279 FX_BOOL (*ReadHeaderCallback)(void* pModule,
280 int width,
281 int height,
282 int bpc,
283 int pass,
284 int* color_type,
285 double* gamma);
259 286
260 FX_BOOL (*AskScanlineBufCallback)(void* pModule, int line, uint8_t*& src_buf); 287 FX_BOOL (*AskScanlineBufCallback)(void* pModule, int line, uint8_t*& src_buf);
261 288
262 void (*FillScanlineBufCompletedCallback)(void* pModule, int pass, int line); 289 void (*FillScanlineBufCompletedCallback)(void* pModule, int pass, int line);
263 }; 290 };
264 class ICodec_GifModule { 291 class ICodec_GifModule {
265 public: 292 public:
266 virtual ~ICodec_GifModule() {} 293 virtual ~ICodec_GifModule() {}
267 294
268 virtual void* Start(void* pModule) = 0; 295 virtual void* Start(void* pModule) = 0;
269 296
270 virtual void Finish(void* pContext) = 0; 297 virtual void Finish(void* pContext) = 0;
271 298
272 virtual FX_DWORD GetAvailInput(void* pContext, 299 virtual FX_DWORD GetAvailInput(void* pContext,
273 uint8_t** avail_buf_ptr = NULL) = 0; 300 uint8_t** avail_buf_ptr = NULL) = 0;
274 301
275 virtual void Input(void* pContext, 302 virtual void Input(void* pContext,
276 const uint8_t* src_buf, 303 const uint8_t* src_buf,
277 FX_DWORD src_size) = 0; 304 FX_DWORD src_size) = 0;
278 305
279 virtual int32_t ReadHeader(void* pContext, 306 virtual int32_t ReadHeader(void* pContext,
280 int* width, 307 int* width,
281 int* height, 308 int* height,
282 int* pal_num, 309 int* pal_num,
283 void** pal_pp, 310 void** pal_pp,
284 int* bg_index, 311 int* bg_index,
285 CFX_DIBAttribute* pAttribute = NULL) = 0; 312 CFX_DIBAttribute* pAttribute) = 0;
286 313
287 virtual int32_t LoadFrameInfo(void* pContext, int* frame_num) = 0; 314 virtual int32_t LoadFrameInfo(void* pContext, int* frame_num) = 0;
288 315
289 void (*RecordCurrentPositionCallback)(void* pModule, FX_DWORD& cur_pos); 316 void (*RecordCurrentPositionCallback)(void* pModule, FX_DWORD& cur_pos);
290 317
291 uint8_t* (*AskLocalPaletteBufCallback)(void* pModule, 318 uint8_t* (*AskLocalPaletteBufCallback)(void* pModule,
292 int32_t frame_num, 319 int32_t frame_num,
293 int32_t pal_size); 320 int32_t pal_size);
294 321
295 virtual int32_t LoadFrame(void* pContext, 322 virtual int32_t LoadFrame(void* pContext,
296 int frame_num, 323 int frame_num,
297 CFX_DIBAttribute* pAttribute = NULL) = 0; 324 CFX_DIBAttribute* pAttribute) = 0;
298 325
299 FX_BOOL» » » » (*InputRecordPositionBufCallback)(void* pModule, FX_DWORD rcd_pos, const FX_RECT& img_rc, 326 FX_BOOL (*InputRecordPositionBufCallback)(void* pModule,
300 int32_t pal_num, void* pal_ptr, 327 FX_DWORD rcd_pos,
301 int32_t delay_time, FX_BOOL user_input, 328 const FX_RECT& img_rc,
302 int32_t trans_index, int32_t disposal_method, FX_BOOL interlace); 329 int32_t pal_num,
330 void* pal_ptr,
331 int32_t delay_time,
332 FX_BOOL user_input,
333 int32_t trans_index,
334 int32_t disposal_method,
335 FX_BOOL interlace);
303 336
304 void (*ReadScanlineCallback)(void* pModule, 337 void (*ReadScanlineCallback)(void* pModule,
305 int32_t row_num, 338 int32_t row_num,
306 uint8_t* row_buf); 339 uint8_t* row_buf);
307 }; 340 };
308 class ICodec_BmpModule { 341 class ICodec_BmpModule {
309 public: 342 public:
310 virtual ~ICodec_BmpModule() {} 343 virtual ~ICodec_BmpModule() {}
311 344
312 virtual void* Start(void* pModule) = 0; 345 virtual void* Start(void* pModule) = 0;
313 346
314 virtual void Finish(void* pContext) = 0; 347 virtual void Finish(void* pContext) = 0;
315 348
316 virtual FX_DWORD GetAvailInput(void* pContext, 349 virtual FX_DWORD GetAvailInput(void* pContext,
317 uint8_t** avail_buf_ptr = NULL) = 0; 350 uint8_t** avail_buf_ptr = NULL) = 0;
318 351
319 virtual void Input(void* pContext, 352 virtual void Input(void* pContext,
320 const uint8_t* src_buf, 353 const uint8_t* src_buf,
321 FX_DWORD src_size) = 0; 354 FX_DWORD src_size) = 0;
322 355
323 virtual int32_t ReadHeader(void* pContext, 356 virtual int32_t ReadHeader(void* pContext,
324 int32_t* width, 357 int32_t* width,
325 int32_t* height, 358 int32_t* height,
326 FX_BOOL* tb_flag, 359 FX_BOOL* tb_flag,
327 int32_t* components, 360 int32_t* components,
328 int* pal_num, 361 int* pal_num,
329 FX_DWORD** pal_pp, 362 FX_DWORD** pal_pp,
330 CFX_DIBAttribute* pAttribute = NULL) = 0; 363 CFX_DIBAttribute* pAttribute) = 0;
331 364
332 virtual int32_t LoadImage(void* pContext) = 0; 365 virtual int32_t LoadImage(void* pContext) = 0;
333 366
334 FX_BOOL (*InputImagePositionBufCallback)(void* pModule, FX_DWORD rcd_pos); 367 FX_BOOL (*InputImagePositionBufCallback)(void* pModule, FX_DWORD rcd_pos);
335 368
336 void (*ReadScanlineCallback)(void* pModule, 369 void (*ReadScanlineCallback)(void* pModule,
337 int32_t row_num, 370 int32_t row_num,
338 uint8_t* row_buf); 371 uint8_t* row_buf);
339 }; 372 };
340 class ICodec_TiffModule { 373 class ICodec_TiffModule {
341 public: 374 public:
342 virtual ~ICodec_TiffModule() {} 375 virtual ~ICodec_TiffModule() {}
343 376
344 virtual void* CreateDecoder(IFX_FileRead* file_ptr) = 0; 377 virtual void* CreateDecoder(IFX_FileRead* file_ptr) = 0;
345 378
346 virtual void GetFrames(void* ctx, int32_t& frames) = 0; 379 virtual void GetFrames(void* ctx, int32_t& frames) = 0;
347 380
348 virtual FX_BOOL LoadFrameInfo(void* ctx, 381 virtual FX_BOOL LoadFrameInfo(void* ctx,
349 int32_t frame, 382 int32_t frame,
350 FX_DWORD& width, 383 FX_DWORD& width,
351 FX_DWORD& height, 384 FX_DWORD& height,
352 FX_DWORD& comps, 385 FX_DWORD& comps,
353 FX_DWORD& bpc, 386 FX_DWORD& bpc,
354 CFX_DIBAttribute* pAttribute = NULL) = 0; 387 CFX_DIBAttribute* pAttribute) = 0;
355 388
356 virtual FX_BOOL Decode(void* ctx, class CFX_DIBitmap* pDIBitmap) = 0; 389 virtual FX_BOOL Decode(void* ctx, class CFX_DIBitmap* pDIBitmap) = 0;
357 390
358 virtual void DestroyDecoder(void* ctx) = 0; 391 virtual void DestroyDecoder(void* ctx) = 0;
359 }; 392 };
360 393
361 class ICodec_Jbig2Module { 394 class ICodec_Jbig2Module {
362 public: 395 public:
363 virtual ~ICodec_Jbig2Module() {} 396 virtual ~ICodec_Jbig2Module() {}
364 397
(...skipping 10 matching lines...) Expand all
375 IFX_Pause* pPause) = 0; 408 IFX_Pause* pPause) = 0;
376 409
377 virtual FXCODEC_STATUS ContinueDecode(void* pJbig2Content, 410 virtual FXCODEC_STATUS ContinueDecode(void* pJbig2Content,
378 IFX_Pause* pPause) = 0; 411 IFX_Pause* pPause) = 0;
379 virtual void DestroyJbig2Context(void* pJbig2Content) = 0; 412 virtual void DestroyJbig2Context(void* pJbig2Content) = 0;
380 }; 413 };
381 class ICodec_ProgressiveDecoder { 414 class ICodec_ProgressiveDecoder {
382 public: 415 public:
383 virtual ~ICodec_ProgressiveDecoder() {} 416 virtual ~ICodec_ProgressiveDecoder() {}
384 417
385 virtual FXCODEC_STATUS LoadImageInfo( 418 virtual FXCODEC_STATUS LoadImageInfo(IFX_FileRead* pFile,
386 IFX_FileRead* pFile, 419 FXCODEC_IMAGE_TYPE imageType,
387 FXCODEC_IMAGE_TYPE imageType = FXCODEC_IMAGE_UNKNOWN, 420 CFX_DIBAttribute* pAttribute) = 0;
388 CFX_DIBAttribute* pAttribute = NULL) = 0;
389 421
390 virtual FXCODEC_IMAGE_TYPE GetType() = 0; 422 virtual FXCODEC_IMAGE_TYPE GetType() const = 0;
391 423 virtual int32_t GetWidth() const = 0;
392 virtual int32_t GetWidth() = 0; 424 virtual int32_t GetHeight() const = 0;
393 425 virtual int32_t GetNumComponents() const = 0;
394 virtual int32_t GetHeight() = 0; 426 virtual int32_t GetBPC() const = 0;
395
396 virtual int32_t GetNumComponents() = 0;
397
398 virtual int32_t GetBPC() = 0;
399 427
400 virtual void SetClipBox(FX_RECT* clip) = 0; 428 virtual void SetClipBox(FX_RECT* clip) = 0;
401 429
402 virtual FXCODEC_STATUS GetFrames(int32_t& frames, 430 virtual FXCODEC_STATUS GetFrames(int32_t& frames,
403 IFX_Pause* pPause = NULL) = 0; 431 IFX_Pause* pPause = NULL) = 0;
404 432
405 virtual FXCODEC_STATUS StartDecode(class CFX_DIBitmap* pDIBitmap, 433 virtual FXCODEC_STATUS StartDecode(class CFX_DIBitmap* pDIBitmap,
406 int32_t start_x, 434 int32_t start_x,
407 int32_t start_y, 435 int32_t start_y,
408 int32_t size_x, 436 int32_t size_x,
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 FX_FLOAT& G, 524 FX_FLOAT& G,
497 FX_FLOAT& B); 525 FX_FLOAT& B);
498 void AdobeCMYK_to_sRGB1(uint8_t c, 526 void AdobeCMYK_to_sRGB1(uint8_t c,
499 uint8_t m, 527 uint8_t m,
500 uint8_t y, 528 uint8_t y,
501 uint8_t k, 529 uint8_t k,
502 uint8_t& R, 530 uint8_t& R,
503 uint8_t& G, 531 uint8_t& G,
504 uint8_t& B); 532 uint8_t& B);
505 FX_BOOL MD5ComputeID(const void* buf, FX_DWORD dwSize, uint8_t ID[16]); 533 FX_BOOL MD5ComputeID(const void* buf, FX_DWORD dwSize, uint8_t ID[16]);
506
507 class CFX_DIBAttribute {
508 public:
509 CFX_DIBAttribute();
510 ~CFX_DIBAttribute();
511
512 int32_t m_nXDPI;
513 int32_t m_nYDPI;
514 FX_FLOAT m_fAspectRatio;
515 FX_WORD m_wDPIUnit;
516 CFX_ByteString m_strAuthor;
517 uint8_t m_strTime[20];
518 int32_t m_nGifLeft;
519 int32_t m_nGifTop;
520 FX_DWORD* m_pGifLocalPalette;
521 FX_DWORD m_nGifLocalPalNum;
522 int32_t m_nBmpCompressType;
523 std::map<FX_DWORD, void*> m_Exif;
524 };
525
526 void FaxG4Decode(const uint8_t* src_buf, 534 void FaxG4Decode(const uint8_t* src_buf,
527 FX_DWORD src_size, 535 FX_DWORD src_size,
528 int* pbitpos, 536 int* pbitpos,
529 uint8_t* dest_buf, 537 uint8_t* dest_buf,
530 int width, 538 int width,
531 int height, 539 int height,
532 int pitch); 540 int pitch);
533 541
534 #endif // CORE_INCLUDE_FXCODEC_FX_CODEC_H_ 542 #endif // CORE_INCLUDE_FXCODEC_FX_CODEC_H_
OLDNEW
« no previous file with comments | « no previous file | core/src/fxcodec/codec/codec_int.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698